Emacs c++模式在预处理器语句后创建尾随空格+反斜杠

Emacs C++ mode creates trailing space+backslash after preprocessor statements

本文关键字:空格 创建 模式 c++ 预处理 语句 处理器 Emacs      更新时间:2023-10-16

在过去的一年中,我多次尝试使用Emacs 24.4/24.5来编写c++代码。然而,每次我遇到预处理器语句的一个非常基本的问题:当我在带有预处理器语句的行上按ENTER时,Emacs会插入奇怪的尾随空格和尾随。通常,下一行的缩进是错误的,而且,这种行为在这一行继续。因此,在#include <iostream>之后按ENTER三次,例如会产生:

#include <iostream>                             
                                                
                                                
  | <- this is where the cursor is now (at indentation 2)

澄清一下:每行都用空格填充,并以结尾。

同样,如果我将光标放在#include行开头并按ENTER,我将在上面得到一个丑陋的空格+斜杠行。

我的ENTER键(Emacs术语中的RET)绑定到(autopair-newline)

我怎样才能摆脱这种行为?我基本上不希望Emacs在这里做任何花哨的事情,只是一个简单的"新行"。请注意,我一般不希望将RET还原为完全普通的"新行"(例如,我希望在其他情况下保持自动缩进)。因此,我想知道是什么导致了这种行为?

我已经找到解决这个问题的办法了。在CC模式文档中有一个绑定ENTER的示例,它执行换行+缩进。实际上,我已经得到了换行+缩进的行为,因为我通常将RET绑定到'comment-indent-new-line。但显然'comment-indent-new-line不能很好地配合CC模式。我现在已经将它添加到init.el中,它只是覆盖c-initialization-hook中的绑定:

(defun my-make-CR-do-indent ()
  (define-key c-mode-base-map "C-m" 'c-context-line-break))
(add-hook 'c-initialization-hook 'my-make-CR-do-indent)