gpt4 book ai didi

emacs - 我怎样才能让 emacs 的 cperl 模式将所有语句继续缩进一级?

转载 作者:行者123 更新时间:2023-12-04 07:59:53 25 4
gpt4 key购买 nike

在 emacs 的 cperl 模式中,延续前一行语句的行缩进一级:

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.";
}

最佳答案

我确认您描述的行为存在,但是,通过阅读源代码并在调试器下运行,并不明显有定制可以让您获得您(和我)想要的行为。

因此我认为这是 cperl-mode 中的一个错误.

修复方法是:

=== modified file 'lisp/progmodes/cperl-mode.el'
--- lisp/progmodes/cperl-mode.el 2012-12-01 05:09:12 +0000
+++ lisp/progmodes/cperl-mode.el 2012-12-26 16:29:19 +0000
@@ -3120,7 +3121,9 @@ and closing parentheses and brackets."
((eq 'continuation (elt i 0))
;; [continuation statement-start char-after is-block is-brace]
(goto-char (elt i 1)) ; statement-start
- (+ (if (memq (elt i 2) (append "}])" nil)) ; char-after
+ (+ (if (or (memq (elt i 2) (append "}])" nil)) ; char-after
+ (eq 'continuation ; do not repeat cperl-close-paren-offset
+ (elt (cperl-sniff-for-indent parse-data) 0)))
0 ; Closing parenth
cperl-continued-statement-offset)
(if (or (elt i 3) ; is-block

请测试这个补丁;如果您对它感到满意,我将添加一个自定义来启用它。

关于emacs - 我怎样才能让 emacs 的 cperl 模式将所有语句继续缩进一级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3582436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com