错误:打开扩展名为".txt"的文件时"wrong-number-of-arguments quote 0"



每次我尝试创建或访问扩展名为".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;但是,似乎没有任何更改组合可以使错误消失。

我正在使用 GNU Emacs 24.3.1(i686-pc-linux-gnu,GTK+ 版本 3.4.2),在 xubuntu Linux 上。

我认为错误以 set-auto-mode() 开头,但我不确定,也不知道为什么那里的括号是空的。有没有其他人遇到过这个问题,或者知道我在这里做错了什么?

如果这是一个自动模式问题,请评估以下内容以确认 Emacs 从中获取的模式:

(assoc-default "foo.txt" auto-mode-alist 'string-match)

如果是nil,那肯定是问题所在,您的auto-mode-alist配置确实有问题。

不过,可能不是这样 - Emacs在set-auto-mode中尝试了很多其他的东西,所以你可能需要缩小范围。

试试这个:

  • M-x find-library RET files RET
  • M-x eval-buffer RET
  • C-xC-f foo.txt RET

在计算了函数之后(注意,你真的可以只计算set-auto-mode),你现在应该在点击调试器时得到一个更详细的堆栈跟踪,这样你就能够准确地找出set-auto-mode调用set-auto-mode-0发生的位置,以及因此哪种机制导致主模式符号的nil值。

(如果您不确定如何从那里继续,请将堆栈跟踪粘贴到问题中。

我怀疑问题来自文件/home/me/path/to/file.txt中的错误局部变量声明。 您是否在该文件中有一个局部变量声明,它是否可能包含不应该存在的引号 ( ' )?

但我同意@phils给出的好建议,以追踪这一点。 set-auto-mode可以通过几种不同的方式尝试确定模式。 您需要找出正在使用哪一个(除非我的猜测有所帮助)。

相关内容

最新更新