在 emacs cperl 模式中,三元运算符不会被特殊处理。如果将它们分成多行,cperl-mode 只是缩进每行,就像缩进任何连续语句一样,如下所示:
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
这不是很可读。有什么方法可以让我像这样说服 cperl 模式缩进吗?
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
顺便说一句,代码示例来自 this question .
编辑
cperl 模式的三元运算符缩进似乎存在错误。以下面的示例是使用 Emacs 23.1.1、cperl-mode 版本 5.23 进行缩进的:
my $result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
{
my $result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
}
请注意,在任何大括号之外,我基本上得到了我想要的缩进。但在大括号内,三元运算符缩进得很严重。有解决办法吗?
最佳答案
您使用的 cperl-mode 和 Emacs 版本是什么?在 GNU Emacs 23.1,cperl-version
5.23 中,没有初始化文件,我得到:
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
fail_result;
如果我希望它们在第一个下面对齐,我会添加一组额外的括号:
$result = (($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
fail_result);
我很确定要实现您请求的缩进(将 fail_result
与 'result'
字符串对齐)需要对 cperl-mode 进行一些重要的更改压痕引擎。不过,欢迎您尝试一下。 :-)
关于perl - 我可以在 emacs 的 cperl 模式下自定义三元运算符的缩进吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775981/