如何在RET上禁用电动缩进但仍保留其他电子字符(例如“{”)?

时间:2014-11-22 13:12:41

标签: emacs indentation emacs24 auto-indent cc-mode

在Emacs 24.4中,默认缩进行为已更改 - 新行现在自动缩进。来自release notes

*** `electric-indent-mode' is now enabled by default.
Typing RET reindents the current line and indents the new line.
`C-j' inserts a newline but does not indent.  In some programming modes,
additional characters are electric (eg `{').

我更喜欢旧的行为,所以我添加了

(electric-indent-mode 0)

到我的.emacs文件。但是,这会禁用所有电子角色,这不是我想要的。

是否有任何方法可以禁用新行为,同时仍然使用“{”或“:”等字符触发缩进?

2 个答案:

答案 0 :(得分:6)

您想要从?\n中删除electric-indent-chars。您可以通过以下方式全局执行此操作:

(setq electric-indent-chars (remq ?\n electric-indent-chars))

或仅在特定模式下(例如C):

(add-hook 'c-mode-hook
          (lambda ()
            (setq-local electric-indent-chars (remq ?\n electric-indent-chars))))

答案 1 :(得分:0)

通过检查c-electric-brace的文档,我发现电子角色的行为是由缓冲区局部变量c-electric-flag控制的。在我将以下行添加到.emacs文件后,它工作正常:

(add-hook 'c-mode-hook
          (lambda ()
            (set 'c-electric-flag t)))

(add-hook 'c++-mode-hook
          (lambda ()
            (set 'c-electric-flag t)))