1

每次我尝试创建或访问扩展名为“.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],将 a 换成\\'$并尝试fundamental-mode代替text-mode; 但似乎没有任何更改组合可以使错误消失。

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

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

4

2 回答 2

1

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

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

于 2013-11-02T16:00:40.947 回答
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-xC-f foo.txt RET

评估了函数(nb 你真的可以只评估),当你点击调试器时,你现在应该得到一个更详细的堆栈跟踪,所以你将能够准确set-auto-mode找出调用发生的位置,以及因此机制导致主模式符号的值。set-auto-modeset-auto-mode-0nil

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

于 2013-11-02T08:56:40.777 回答