【发布时间】:2011-02-16 02:05:11
【问题描述】:
在 emacs cperl-mode 中,三元运算符没有特殊处理。如果你将它们分成多行,cperl-mode 会像缩进任何后续语句一样简单地缩进每一行,如下所示:
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
这不是很可读。有什么方法可以说服像这样的 cperl-mode 缩进?
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
顺便说一下,来自this question的代码示例。
编辑
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';
}
请注意,在任何大括号之外,我基本上都得到了我想要的缩进。但是在大括号内,三元运算符缩进很糟糕。有解决办法吗?
【问题讨论】:
-
+1 好问题,我自己也一直在想这个问题。
-
明确地说,我希望能够使用 emacs 的内置缩进工具来做到这一点,以便使用 TAB 做正确的事情。但如果做不到这一点,欢迎使用其他解决方案。
标签: perl emacs indentation ternary-operator cperl-mode