如何仅在特定模式下启用空格模式

8
我正在尝试仅在特定模式下自动启用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。

2个回答

5

显然,`whitespace-global-modes`的含义与您(和我)理解的完全不同。

不妨尝试:

(require 'whitespace)

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

并且对于c++-mode,需要重复相同的操作吗?

1
我认为那也可能行得通,但我确实想让whitespace-global-modes起作用。你的解决方案的一个优点是,“WS”不会出现在它没有起作用的缓冲区的modeline中。 - jchl
是的,WS和ws对我来说也非常令人困惑。 - Emre Sevinç
非常感谢!这解决了新创建的文件和草稿缓冲区不遵循全局定义的问题。为每种模式添加钩子(如Sevinç先生的答案中所述)可以消除手动打开新文件和/或草稿缓冲区的空格的需要。全局行为令人困惑,因为全局定义适用于使用应用程序打开的现有文件,但不适用于新文件或草稿缓冲区。 - lawlist

4
原来我的.emacs.el文件中的命令(几乎)都能正常工作。让我困惑的是,尽管只有C和C ++缓冲区受到了期望中的whitespace-mode效果,但“WS”出现在所有缓冲区的模型行中。
另一个问题是我有一个错别字:c++mode而不是c++-mode

嗯,那么模式行中的WS是什么意思呢?我有点困惑。WS代表全局,ws代表本地...类似这样的吗? - Emre Sevinç

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接