Rya*_*son 5 emacs perl indentation ternary-operator cperl-mode
在emacs cperl-mode中,三元运算符不受特殊处理.如果你将它们分成多行,cperl-mode只是缩进每一行,就像缩进任何继续语句一样,如下所示:
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
Run Code Online (Sandbox Code Playgroud)
这不是很易读.有什么方法可以说服像这样的cperl模式缩进吗?
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
Run Code Online (Sandbox Code Playgroud)
顺便说一下,来自这个问题的代码示例.
cperl-mode对三元运算符的缩进似乎存在错误.采用以下示例,该示例使用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';
}
Run Code Online (Sandbox Code Playgroud)
请注意,在任何支撑之外,我基本上都得到了我想要的缩进.但在内部支撑中,三元运算符的表现非常糟糕.有没有解决这个问题?
您使用什么版本的 cperl-mode 和 Emacs?在 GNU Emacs 23.1、5.23 中cperl-version,没有初始化文件,我得到:
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
fail_result;
Run Code Online (Sandbox Code Playgroud)
如果我希望它们在第一个下对齐,我会添加一组额外的括号:
$result = (($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
fail_result);
Run Code Online (Sandbox Code Playgroud)
我非常确定要实现您请求的缩进(与字符串fail_result对齐'result')需要对 cperl 模式的缩进引擎进行一些重要的更改。不过,欢迎您尝试一下。:-)
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |