每当我尝试创建或访问带有“.txt”扩展名的文件时,我都会得到如下所示的堆栈跟踪:
Debugger entered--Lisp error: (wrong-number-of-arguments quote 0)
quote()
set-auto-mode-0(quote nil)
set-auto-mode()
normal-mode(t)
after-find-file(nil t)
find-file-noselect-1(#<buffer file.txt> "~/path/to/file.txt" nil nil "~/path/to/file.txt" (24122033 2049))
find-file-noselect("/home/me/path/to/file.txt" nil nil)
ido-file-internal(raise-frame)
ido-find-file()
call-interactively(ido-find-file nil nil)
但是,在基本模式下,缓冲区“file.txt”已打开。无论我使用ido_find-file
还是M-x find file
,都会发生这种情况。
我尝试通过在init.el
文件中添加以下行来解决此问题:
(add-to-list 'auto-mode-alist '("\\.txt$" . text-mode))
...我已将txt
更改为[tT][xX][tT]
,为\\'
更改$
,并尝试fundamental-mode
而不是text-mode
{1}};但是没有任何变化组合似乎会使错误消失。
我在xubuntu linux上使用GNU Emacs 24.3.1(i686-pc-linux-gnu,GTK +版本3.4.2)。
我认为错误始于set-auto-mode()
,但我不确定,我不知道为什么那些parens会在那里空。有没有其他人有这个问题,或者知道我在这里做错了什么?
答案 0 :(得分:1)
如果这是一个自动模式列表问题,请评估以下内容以确认Emacs从中获得哪种模式:
(assoc-default "foo.txt" auto-mode-alist 'string-match)
如果是nil
,那肯定是问题所在,而且您的auto-mode-alist
配置确实存在问题。
可能不是这样,但是Emacs在set-auto-mode
尝试了很多其他的东西,所以你可能需要缩小范围。
试试这个:
find-library
RET files
RET eval-buffer
RET foo.txt
RET 评估了函数(你真的只能评估set-auto-mode
),当你点击调试器时,你现在应该得到更详细的堆栈跟踪,这样你就能够精确地找出 set-auto-mode
中{/ 1>}对set-auto-mode-0
的调用正在发生,因此哪种机制导致主模式符号的nil
值。
(如果您不确定如何从那里开始,请将堆栈跟踪粘贴到问题中。)
答案 1 :(得分:1)
我怀疑问题来自文件/home/me/path/to/file.txt
中的错误局部变量声明。你在那个文件中有一个局部变量声明,它是否包含一个不应该存在的引用('
)?
但是我同意@phils给出的好建议,以便跟踪它。 set-auto-mode
可以通过几种不同的方式来确定模式。您将需要找出正在使用的那个(除非我的猜测有帮助)。