在emacs的cperl-mode中,连续前一行语句的行缩进一级:
my $var
= (1+1)
* (2+2)
/ (3+3);
但是,如果语句不是从零缩进开始,因为它在块内,那么如果将语句分成第三行,则会得到另一级别的缩进,依此类推:
sub break_my_indentation {
my $var
= (1+1)
* (2+2)
/ (3+3);
return "Indentation is broken.";
}
有没有办法解决这个问题,以便语句在块内部以与外部相同的方式缩进?我想第二个例子看起来像这样:
sub fix_my_indentation {
my $var
= (1+1)
* (2+2)
/ (3+3);
return "Indentation is fixed.";
}
3 回答
cperl-mode
默认情况下没有此问题 . 默认情况下,它会像这样缩进:您有一个自定义,可以防止
cperl-mode
正确缩进 . 有关缩进的配置,请参见cperl-indent-rules-alist
变量 .我确认您描述的行为存在,但是,从阅读源代码并在调试器下运行,并不是很明显有一个自定义可以让您(和我)想要的行为 .
因此我认为这是
cperl-mode
中的一个错误 .修复是:
请测试这个补丁;如果你对它感到满意,我会添加一个自定义来启用它 .
正如@jerome-radix建议的那样,问题是're experiencing doesn'默认发生在
cperl-mode
. 问题当然可以在cperl-indent-rules-alist
中找到,但还有很多其他地方可以看 .您使用的是哪种版本的模式? C-h v cperl-version RET
在调试这类问题时,您需要从几个基本的东西开始,看看是否可以重现错误 . 首先让大家知道您正在运行的M-x emacs版本 . 然后通过运行
emacs -q
从等式中删除自己的自定义,以避免在启动时加载init文件:如果仍然可以在关闭自己的init文件的情况下重现问题,那么请进一步使用
emacs -Q
在系统级别将其关闭: