首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以在emacs的cperl-mode中自定义三元运算符的缩进吗?

我可以在emacs的cperl-mode中自定义三元运算符的缩进吗?
EN

Stack Overflow用户
提问于 2010-05-06 02:56:28
回答 2查看 753关注 0票数 5

在emacs cperl模式中,三元运算符没有特殊处理。如果将它们分成多行,cperl-mode只会以与缩进任何连续语句相同的方式来缩进每行,如下所示:

代码语言:javascript
复制
$result = ($foo == $bar)  ? 'result1' :
    ($foo == $baz)  ? 'result2' :
        ($foo == $qux)  ? 'result3' :
            ($foo == $quux) ? 'result4' : 
                'fail_result';

这不是很好读。有什么方法可以说服cperl-mode这样的缩进吗?

代码语言:javascript
复制
$result = ($foo == $bar)  ? 'result1' :
          ($foo == $baz)  ? 'result2' :
          ($foo == $qux)  ? 'result3' :
          ($foo == $quux) ? 'result4' : 
                            'fail_result';

顺便说一句,来自this question的代码示例。

编辑

cperl-mode的三进制运算符的缩进似乎有一个bug。以下面的示例为例,该示例使用Emacs 23.1.1,cperl-mode版本5.23缩进:

代码语言:javascript
复制
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';
}

注意,在任何花括号之外,我基本上得到了我想要的缩进。但是在大括号中,三元运算符的缩进很严重。有什么办法可以解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-06 06:00:16

您使用的是什么版本的cperl-mode和Emacs?在没有初始化文件的GNU Emacs23.1,cperl-version 5.23中,我得到:

代码语言:javascript
复制
$result = ($foo == $bar)  ? 'result1' :
  ($foo == $baz)  ? 'result2' :
  ($foo == $qux)  ? 'result3' :
  ($foo == $quux) ? 'result4' :
  fail_result;

如果我想让它们排在第一个下面,我会添加一组额外的括号:

代码语言:javascript
复制
$result = (($foo == $bar)  ? 'result1' :
           ($foo == $baz)  ? 'result2' :
           ($foo == $qux)  ? 'result3' :
           ($foo == $quux) ? 'result4' :
           fail_result);

我敢肯定,要实现您所请求的缩进(使用fail_result'result'字符串),需要对cperl-mode的缩进引擎进行一些重要的更改。不过,欢迎您尝试一下。:-)

票数 3
EN

Stack Overflow用户

发布于 2010-05-06 03:45:13

我不知道Cperl模式下的自动缩进,但是M-1 M-S-| perltidy (如果你安装了Perl::Tidy )会很好地整理一个标记的区域(包括三元语句)。默认情况下,它看起来并不完全像您的示例,但我相信您可以在其.perltidyrc中自定义它来做您想做的事情。

顺便说一句,我自己没有弄明白这一点-我在哪里读到的-我想是PBP,但我刚刚检查了一下&似乎不是这样的,但不管怎样,我一直在使用它,发现它非常有用。

编辑:它在cperl page in the emacs wiki

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2775981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档