【问题标题】:Emacs Whitespace Mode ignores whitespace-line-column and fill-columnEmacs 空白模式忽略空白行列和填充列
【发布时间】:2012-07-11 10:15:32
【问题描述】:

我在 Mac OS X 上使用 Emacs 24.1.1 时遇到问题。我正在编辑 Jade 和 CoffeeScript 文件,因此我为这些文件类型打开了空白模式。

我看到的是,长度超过 70 个字符的行会用空白行字体突出显示,而不管空白行列的设置如何。

在这张照片中,很明显我已经自定义了 whitespace-line-column 来跟踪 fill-column,并且我已经将 fill-column 设置为 120,但更短的行被突出显示。

我浏览了 Jade 模式的代码,并没有看到任何可以解释该行为的内容,但我对 Emacs Lisp 的了解仅略知一二。

提前感谢您的任何指点!

【问题讨论】:

  • fill-column 是本地缓冲区。您能否通过在当前缓冲区中键入 M-: fill-column 来确认它在您的 user.jade 缓冲区中为 120?
  • ^H v fill-column fill-column 是在“C 源代码”中定义的变量。其值为 120 原始值为 70 Local in buffer index.jade;全局值为 70
  • 它看起来像空白模式只尊重填充列的全局值;它似乎不知道缓冲区本地版本。

标签: emacs whitespace emacs24


【解决方案1】:

您必须在激活whitespace-mode 之前设置whitespace-line-column。也就是说,如果你想改变它的值,它不会生效,除非你关闭whitespace-mode然后再打开。具有讽刺意味的是,在您激活该模式一次之前,M-x customize 无法使用该变量:-(

但是,您可以通过在 .emacs 文件中添加以下行来自定义此变量的全局值:

(setq whitespace-line-column 120)

由于在您启动 Emacs 时会评估您的 .emacs,因此该设置将在您第一次调用 whitespace-mode 之前生效,因此应该执行您想要的操作。如果您不想全局设置该值,而仅针对 Jade 文件,请将以下内容放入您的 .emacs 文件中:

(set (make-local-variable 'whitespace-line-column) 80)
(add-hook 'after-change-major-mode-hook
          '(lambda () (when (eq major-mode 'jade-mode)
                        (setq whitespace-line-column 120))))

如果您根本不想特别突出显示长行,您可能需要考虑第三种选择。您可以自定义变量空白样式(通过键入 M-x customize-variable ENTER whitespace-style ENTER)并在值列表中删除条目:

  • 行尾

(如果有)。这应该会在全局范围内关闭长行的突出显示,而与 whitespace-line-column 的值无关(同样,仅在您取消并重新激活空白模式之后)。

【讨论】:

  • 您认为这是一个错误吗?在我看来,空白模式应该在它改变时尊重空白行列(和填充列)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2017-11-23
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多