Emacs cperl - 常量块的缩进

8
我在运行基于GNU Emacs 24.3.50.2的Aquamacs 3.0a。cperl-version是6.2。当我编辑Perl常量块时,会出现不想要的额外缩进:
use constant {
    ONE => 1,
        TWO => 2,
        THREE => 3,
    };

What I want is this:-

use constant {
    ONE => 1,
    TWO => 2,
    THREE => 3,
};

问题似乎在于 cperl-continued-statement-offset 被添加,因为我们处于一个块内,并且前一行末尾没有分号。
有没有办法告诉 cperl 使用“括号”规则缩进常量块?我尝试调整了 cperl-indent-parens-as-block,但没有帮助。我并不感到惊讶,我想我应该寻找一个名为 cperl-indent-constant-block-as-parens 的变量 :-)
1个回答

10

从代码中的一些挖掘来看,这似乎是cperl-mode中的一个bug - 它应该将常量块视为匿名哈希引用 - 毕竟,这基本上就是它的作用!这里是一个对cperl-block-p的补丁,使其可以这样。有人想批准或拒绝吗?我的elisp有点生疏 :-)

$ 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_:]+[ \t\n\f]*[{#]") ; 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))

2
我认为这看起来很合理(虽然我不太了解Perl语法)。您可以使用M-x report-emacs-bug将错误报告和此补丁发送给维护者。 - legoscia
1
谢谢您的建议 - 我已经直接给cperl-mode维护者发送了电子邮件。 - kbro
2
我可能需要提一下,使用这个补丁后,我仍然需要将cperl-indent-parens-as-block设置为t才能获得所需的缩进,但这正是应该的方式。 - kbro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接