代码之家  ›  专栏  ›  技术社区  ›  Ryan C. Thompson

如何使emacs的cperl模式将所有语句的连续性缩进一级?

  •  8
  • Ryan C. Thompson  · 技术社区  · 15 年前

    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 回复  |  直到 13 年前
        1
  •  6
  •   sds Niraj Rajbhandari    13 年前

    我确认您描述的行为是存在的,但是,从阅读源代码和在调试器下运行来看,不明显存在错误 定制 这会让你(和我)得到你想要的行为。

    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
    

    请测试此修补程序;如果您满意,我将添加一个自定义项以启用它。

        2
  •  1
  •   Jérôme Radix    15 年前

    cperl-mode 默认情况下不存在此问题。默认情况下,缩进如下:

    my $var
      = (1+1)
      * (2+2)
      / (3+3);
    

    你有一个定制,防止 cperl-indent-rules-alist 用于缩进配置的变量。

        3
  •  0
  •   aculich    13 年前

    正如@jerome radix所暗示的,你所经历的问题不会发生在你身上 cperl-mode 默认情况下。这个问题肯定会解决的 cperl-indent-rules-alist ,但还有很多地方可以看。

    你使用的是哪种模式? C-h v cperl版本RET

    在调试这类问题时,您需要从几个基本问题开始,看看是否可以重现错误。首先让大家知道 M-x emacs版本 你在跑步。然后通过运行 emacs -q 要避免在启动时加载init文件:

    --no-init-file, -q          load neither ~/.emacs nor default.el
    

    如果您仍然可以在关闭自己的init文件的情况下重现问题,那么请更进一步,在系统级别使用 emacs -Q :

    --quick, -Q                 equivalent to:
                                  -q --no-site-file --no-site-lisp --no-splash
    
    推荐文章