2011-11-07 175 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