2011-11-07 174 views
6

我試圖讓emacs whitespace-mode僅在某些模式下自動啓用。根據文檔,啓用global-whitespace-mode和設置whitespace-global-modes變量應該完全相同。但我無法讓它正常工作。如何獲得僅針對特定模式的空白模式

在我.emacs.el我:

(require 'whitespace) 
(global-whitespace-mode t) 
(setq whitespace-global-modes '(c-mode c++-mode)) 

whitespace-global-modes定義似乎被忽略;在每個緩衝區中啓用global-whitespace-mode。我知道,我已經得到了正確的變量名,因爲C-h v whitespace-global-modes告訴我:

whitespace-global-modes's value is (c-mode c++mode) 

Documentation: 
Modes for which global `whitespace-mode' is automagically turned on. 
... 

那我做錯了嗎?我誤解了whitespace-global-modes的用途嗎?

我正在運行emacs 23.2.1。

回答

3

事實證明,我的.emacs.el中的命令畢竟是(幾乎)。令我困惑的是,即使只有C和C++緩衝區得到whitespace-mode的效果,所有緩衝區中的「WS」都會出現。

另一個問題是我有一個錯字:c++mode而不是c++-mode

+0

嗯,那麼模式行中WS的含義是什麼?我很困惑。全球的WS,本地的WS ......那種事情? –

5

顯然,whitespace-global-modes的含義與你(和我)所理解的有很大不同。

如何試圖

(require 'whitespace) 

(add-hook 'c-mode-hook 
    (function (lambda() 
       (whitespace-mode t)))) 

,並重復同樣的事情,在C++ - 模式?

+0

我認爲這也能起作用,但我真的想讓'whitespace-global-modes'工作。我想你的解決方案的一個優點是,「WS」不會出現在緩衝區的模式行中,因爲它沒有做任何事情。 – jchl

+0

是的,WS和ws對我來說也非常混亂。 –

+0

非常感謝!這解決了新創建的文件和暫存緩衝區不遵守全局定義的問題。爲每種模式添加鉤子(如Sevinç先生的回答中所述),無需手動打開新文件和/或暫存緩衝區的空格。全局行爲令人困惑,因爲全局定義適用於用應用程序打開的現有文件,但不適用於新文件或暫存緩衝區。 – lawlist