Emacs即使在更改.emacs后仍会自动添加换行符

18

我目前使用的是Mac电脑,尝试设置Emacs默认不在文件结尾添加换行符。但是几乎所有搜索结果都建议在家目录下的.emacs文件中添加(setq require-final-newline nil)代码...但是这并没有起作用。接下来我应该看哪些方面进行修改?

这是当前.emacs文件的内容:

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(gud-gdb-command-name "gdb --annotate=1")
 '(large-file-warning-threshold nil)
 '(require-final-newline nil))
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )

2
更紧迫的问题是:“除了给自己惹麻烦,你为什么要改变这个明智而有用的默认设置呢?” - pmr
1
因为我正在编辑一个输入文件,该程序期望在文件的最后一个字符是文件结束符,但是emacs在该字符之后添加了一个换行符。 - Jayson
1
这个出现问题的文件的主要模式是什么? - Trey Jackson
@pmr 是的,更好的方法是将其本地设置为 nil - legends2k
1个回答

22

你尝试过:

(setq mode-require-final-newline nil)

可能该文件的主要模式是使用此变量的值,而不是您尝试的那个变量。如何找出使用此变量而不是您尝试的变量的模式并不明显,但是编写该模式的人应该更清楚。

因此,您可能希望更改该文件的主要模式,这可以通过回答此SQ问题来完成:如何告诉emacs在C++模式下打开.h文件?(显然要根据您的需要自定义答案)。


我刚试了一下,这对我的问题起作用了。不过我不确定"major mode"是什么,所以我现在还不能给你一个连贯的答案。 - Jayson
1
要查找特定文件(缓冲区)的主模式,请键入“C-h m”(或“M-x describe-mode”),将会出现一个新缓冲区,其中描述了当前缓冲区的模式(包括主模式)。 - Trey Jackson
1
@Jayson,“主要模式”是与当前缓冲区相关联的语法高亮、键绑定和其他行为的集合。它应该在您的模型行中列出,用括号括起来。您应该看到类似于U:--- 文件名 所有 L10 (Major Minor)的内容。其中的“Major”部分就是主要模式(您可能只有一个主要模式,或者可能有一个主要模式和一个或多个次要模式)。 - Brian Campbell
对于我的 Emacs 23.3.1 版本,我必须使用 (setq require-final-newline nil) 才能使其正常工作。 - HXCaine
@HXCaine - 这个问题已经设置了,所以在某些情况下确实需要它。在其他情况下,该变量是从 mode-require-final-newline 设置的。有关更多信息,请参阅 require-final-newline 的文档。 - Trey Jackson

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