Emacs 不断地问我
Buffer text.txt does not end in newline. And one? (y or n)
我很困惑为什么我不能阻止 Emacs 进行这个查询。我都设置了
require-final-newline
mode-require-final-newline
到nil
钩子上tex-mode
。
我已经验证它的价值确实是nil
当我在我的文件中工作时。但尽管如此,Emacs 仍在继续进行调查。
我查看了basic-save-buffer
. 代码的相关部分是:
(or (eq require-final-newline t)
(eq require-final-newline 'visit-save)
(and require-final-newline
(y-or-n-p
(format "Buffer %s does not end in newline. Add one? "
(buffer-name)))))
似乎 Emacs 永远不应该达到 .y-or-n-p
因为它显示为and
测试的第二部分,第一部分的计算结果为nil
.
这里发生了什么?
我的 Emacs 是 GNU 27.2。
我玩了一点重写这段代码。举个例子,
(or (eq require-final-newline t)
(eq require-final-newline 'visit-save)
(and nil
(y-or-n-p
(format "Buffer %s does not end in newline. Add one? "
(buffer-name)))))
表现如我所料。
我也尝试过类似的东西:
(or (eq require-final-newline t)
(eq require-final-newline 'visit-save)
(and require-final-newline
(progn
(message (concat "[2] require-final-newline: " (format "%S" require-final-newline)))
(sit-for 1)
t)
(y-or-n-p
(format "Buffer %s does not end in newline. Add one? "
(buffer-name)))))
并且消息报告说,require-final-newline
但nil
获得消息的唯一方法就是让它成为t
。
这是怎么回事?
更新
我可以进入并自定义变量。当我这样做并将其设置为 时Don't add newlines
,烦人的问题就消失了。但是,我对此并不满意。无论我处于何种模式,这似乎都在全局设置这个值。这不是我想要的。它仅适用于特定文件,并且tex-mode
我希望在其中应用它。
进一步更新:
实际上,@phils 的问题对我开始调试这里发生的事情非常有用。
我想我已经找到了问题所在。我仍然对如何解决它感兴趣。
我正在使用 a.dir-locals.el
为我正在处理的本地文件设置许多参数。如果我删除.dir-locals.el
文件并通过挂钩进行设置(就像我以前认为的那样),一切都会正常运行。
但是,如果我使用.dir-locals.el
文件集参数,那么事情就会停止正常工作。在.dir-locals.el
文件中,我有以下行:
(nil . ((require-final-newline nil)))
这似乎是问题所在。正在发生的事情是,它没有被设置为,而是require-final-newline
被nil
设置为(nil)
.
我可以坚持使用钩子来完成我想要的。但是,现在我很好奇。我是否得到.dir-locals.el
错误的语法。这是我的完整.dir-locals.el
文件
(
(nil . ((fill-column . 70)))
(nil . ((mode .tex)))
(nil . ((require-final-newline nil)))
)