Emacs - require-final-newline本地值覆盖全局值

4

我希望将每个缓冲区的 require-final-newline 设置为 nil。 在我的配置文件中,我有:

(setq require-final-newline nil)
(setq-default require-final-newline nil)

看起来全局变量已正确设置。然而,我打开的每个缓冲区中,本地值仍为 t。使用 describe-variable 命令,得到以下结果:

require-final-newline is a variable defined in `files.el'.
Its value is t
Original value was nil
Local in buffer myfile.js; global value is nil

files.el位于/usr/local/Cellar/emacs/24.5/share/emacs/24.5/lisp/,因此我猜我不应该修改它。 如何将这个局部值设置为nil

1个回答

7
首先,有一些模式会强制设置 require-final-newline,因为这些类型的文件需要一个最终的换行符。然而,我不认为 js-mode 是其中之一。
可能您有一些自定义配置导致了这种情况,可能是通过 js-mode-hookprog-mode-hook 设置的。
使用 emacs -Q 确认这不是默认行为,然后您可以开始追踪罪魁祸首(我会在您的 Elisp 文件中使用 M-x rgrep 来查找 require-final-newline)。

1
经过grep之后,罪魁祸首可能是editorconfig(它没有读取我的配置文件,但似乎设置了默认值)。你说的emacs -Q是什么意思?命令行吗?如果是的话,很遗憾,在我的osx上通过命令行启动emacs似乎不能正常工作。 - nha
是的,这意味着在命令行上运行 emacs -Q。也许 emacs 可执行文件的目录不在您的 shell 的 PATH 环境变量中?如果您知道它的位置,只需在适当的路径上运行 /path/to/emacs -Q 即可。(如果您认为已经找到了配置问题的罪魁祸首,可以删除或注释相关代码并正常启动 Emacs 来进行测试。) - phils
是的,很可能是 editorconfig,所以我接受了你的答案。我需要看看是否可以覆盖它的行为,但如果我找不到,那将是另一个问题。从CLI中同样适用于emacs。谢谢! - nha
1
FTR:事实证明,c-mode和c++-mode也需要在末尾加上一个换行符,奇怪的是这似乎是标准要求的。请参见此源代码注释 - Hi-Angel
在1月26日,mode-require-final-newline 默认为 t(在 emacs -Q 中看到);我不太了解 Emacs,无法弄清楚原因。require-final-newline 以某种方式从中继承。重复 @nha 的片段并使用 mode-require-final-newline 可以暂时解决问题。 - EML
显示剩余3条评论

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