如何仅对某些模式启用空白模式

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 代表本地……那种东西?

以上是关于如何仅对某些模式启用空白模式的主要内容,如果未能解决你的问题,请参考以下文章

如何启用移动但禁用 UITableView 中某些行的删除

如何创建一个 Excel 电子表格,通过仅对正确用户启用的按钮提供指向工作簿的链接?

如何在chrome中默认启用设备仿真模式(设备模式)

如何在 iOS 中以编程方式启用睡眠模式?

如何确定是不是启用了“调试模式”

如何启用或禁用特定 ViewController 的横向模式?