如何仅对某些模式启用空白模式
Posted
技术标签:
【中文标题】如何仅对某些模式启用空白模式【英文标题】:How to get whitespace-mode enabled only for certain modes 【发布时间】:2011-11-07 12:33:37 【问题描述】:我正在尝试仅在某些模式下自动启用 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。
【问题讨论】:
【参考方案1】:显然 whitespace-global-modes 的含义与您(和我)所理解的非常不同。
试试怎么样
(require 'whitespace)
(add-hook 'c-mode-hook
(function (lambda ()
(whitespace-mode t))))
对 c++-mode 重复同样的事情?
【讨论】:
我认为这也可以,但我真的很想让whitespace-global-modes
工作。我想您的解决方案的一个优点是“WS”不会出现在没有做任何事情的缓冲区的模式行中。
是的,WS 与 ws 对我来说也很混乱。
非常感谢!这解决了新创建的文件和暂存缓冲区不符合全局定义的问题。为每种模式添加挂钩(如 Sevinç 先生的回答中所述)消除了手动打开新文件和/或暂存缓冲区的空白的需要。全局行为令人困惑,因为全局定义适用于使用应用程序打开的现有文件,但不适用于新文件或暂存缓冲区。【参考方案2】:
事实证明,我的.emacs.el
中的命令是(几乎)工作的。让我感到困惑的是,“WS”出现在所有缓冲区的模式行中,即使只有 C 和 C++ 缓冲区根据需要获得whitespace-mode
的效果。
另一个问题是我打错了:c++mode
而不是c++-mode
。
【讨论】:
嗯,那么mode行中的WS是什么意思呢?我很困惑。 WS 代表全局,ws 代表本地……那种东西?以上是关于如何仅对某些模式启用空白模式的主要内容,如果未能解决你的问题,请参考以下文章