2013-11-02 13 views
1

每次嘗試創建或訪問擴展名爲「.txt」的文件時,都會得到類似如下:錯誤:以「.txt」擴展名打開文件時出現「錯誤的參數數量爲0」

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,都會發生這種情況。

我試圖通過添加以下行中我​​文件來解決這個問題:

(add-to-list 'auto-mode-alist '("\\.txt$" . text-mode))

...我已經改變了txt[tT][xX][tT],切換出一個\\'$,和嘗試fundamental-mode而不是text-mode;但沒有任何變化的組合似乎會使錯誤消失。

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

我假設錯誤以set-auto-mode()開頭,但我不知道這是肯定的,而且我不知道爲什麼那裏的parens會是空的。有沒有其他人有這個問題,或知道我在這裏做錯了嗎?

回答

1

如果是自動模式ALIST問題,評估以下確認Emacs的是從獲得的模式:

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

如果是nil,這是肯定的問題,你有一個問題您的auto-mode-alist配置。

雖然這可能不是 - Emacs在set-auto-mode中嘗試的其他一些東西,所以您可能需要縮小範圍。

嘗試這種情況:

  • M-Xfind-libraryRETfilesRET
  • M-Xeval-bufferRET
  • C-XC-Ffoo.txtRET

在評價函數(N.B.你可能真的只是評估set-auto-mode),你現在應該得到一個更詳細的堆棧跟蹤,當你點擊調試器,所以你將能夠確切地計算出set-auto-mode正在調用set-auto-mode-0正在發生,因此哪個機制導致主模式符號的值爲nil

(如果您不確定如何從那裏繼續,請將堆棧跟蹤粘貼到問題中。)

1

我懷疑問題來自文件/home/me/path/to/file.txt中的錯誤局部變量聲明。你在那個文件中有一個局部變量聲明,它是否包含一個不應該在那裏的引用(')?

但我同意@phils給出的好建議,以便跟蹤下來。 set-auto-mode可以嘗試確定模式有幾種不同的方式。你需要找出哪一個被使用(除非我的猜測可能有幫助)。