Emacs一直在问我
Buffer text.txt does not end in newline. And one? (y or n)
我很困惑为什么我不能阻止Emacs进行这项调查。我已经设置了两个
require-final-newline
mode-require-final-newline
在到CCD_ 2的挂钩中到nil
。
当我在文件中工作时,我已经验证了它的值确实是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的问题对我开始调试这里发生的事情非常有用。
我想我已经找到问题了。我仍然对如何解决它感兴趣。
我正在使用.dir-locals.el
为我正在处理的本地文件设置一些参数。如果我删除.dir-locals.el
文件并通过钩子进行设置(就像我以前认为的那样(,一切都会正常运行。
然而,如果我使用.dir-locals.el
文件集参数,那么事情就会停止正常工作。在.dir-locals.el
文件中,我有以下行:
(nil . ((require-final-newline nil)))
这似乎就是问题所在。现在的情况是,require-final-newline
没有被设置为nil
,而是被设置为(nil)
。
我可以坚持使用钩子来完成我想要的任务。但是,现在我很好奇。我是不是搞错了tex-mode
0的语法。这是我完整的.dir-locals.el
文件
(
(nil . ((fill-column . 70)))
(nil . ((mode .tex)))
(nil . ((require-final-newline nil)))
)
我遇到的问题是由于.dir-locals.el
文件中的语法错误。
我在那个文件里有一行是
(nil . ((require-final-newline nil)))
这是错误的。它将require-final-newline
设置为(nil)
,而不是nil
。
如果我将语法更正为
(nil . ((require-final-newline . nil)))
一切都按预期进行。