perl - 我可以在 emacs 的 cperl 模式下自定义三元运算符的缩进吗?

标签 perl emacs indentation ternary-operator cperl-mode

在 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/

相关文章:

regex - 对由固定重复次数组成的组的成分的反向引用

linux - mod_perl2 脚本中的某些二进制文件可以运行,而其他二进制文件则不能运行(尽管有 ls 可见性和 +x)

emacs - 在 Emacs 中一次打开多个文件

python - emacs 上的多行 python 缩进

Perl 在脚本中进行就地编辑(而不是单行)

python - 散列多个文件

Emacs:如何编译(运行make)而不按回车进行编译命令查询?

emacs - Emacs noweb 模式下的代码块字体化?

ruby - 评论限制

php - 使用 PHP 缩进 HTML(5) 时出现问题