错误:“打开带有”.txt“扩展名的文件时出现”错误的参数数量引用0“

时间:2013-11-02 07:55:28

标签: emacs emacs24

每当我尝试创建或访问带有“.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会在那里空。有没有其他人有这个问题,或者知道我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

如果这是一个自动模式列表问题,请评估以下内容以确认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-x C-f 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可以通过几种不同的方式来确定模式。您将需要找出正在使用的那个(除非我的猜测有帮助)。