我正在运行基于GNU Emacs 24.3.50.2的Aquamacs 3.0a。perl的版本是6.2。当我编辑Perl常量块时,我得到了我不想要的额外缩进:-
use constant {
ONE => 1,
TWO => 2,
THREE => 3,
};
我想要的是这个:-
use constant {
ONE => 1,
TWO => 2,
THREE => 3,
};
问题似乎是添加了perl- continuatedstatement -offset,因为我们在一个块中,并且在前一行的末尾没有分号。
是否有办法告诉perl缩进常数块使用"父"规则?我确实尝试了调整perl-indent-parens-as-block,但是没有帮助。我并不感到惊讶,我想我应该寻找一个名为perl-indent-constant-block-as- parents的变量:-)
稍微深入研究一下代码,就会发现这是perl模式下的一个bug——它应该像对待匿名hashref一样对待常量块——毕竟,它基本上就是这样!这里有一个perl-block-p的补丁。有人愿意同意或反对吗?我的英语有点生疏了:-)
$ diff -u cperl-mode.el.orig cperl-mode.el
--- cperl-mode.el.orig 2013-09-27 13:43:56.000000000 +0100
+++ cperl-mode.el 2014-06-30 18:02:30.000000000 +0100
@@ -4828,9 +4828,9 @@
(and (memq (char-syntax (preceding-char)) '(?w ?_))
(progn
(backward-sexp)
- ;; sub {BLK}, print {BLK} $data, but NOT `bless', `return', `tr'
+ ;; sub {BLK}, print {BLK} $data, but NOT `bless', `constant', `return', `tr'
(or (and (looking-at "[a-zA-Z0-9_:]+[ tnf]*[{#]") ; Method call syntax
- (not (looking-at "\(bless\|return\|q[wqrx]?\|tr\|[smy]\)\>")))
+ (not (looking-at "\(bless\|constant\|return\|q[wqrx]?\|tr\|[smy]\)\>")))
;; sub bless::foo {}
(progn
(cperl-backward-to-noncomment (point-min))