关闭Emacs的空格模式“长行”可视化

13

我个人喜欢将每行代码限制在80个字符以内,但在团队项目中,其他程序员可能不关心代码长度。

我喜欢使用空格模式,但当我在不能干扰长行的项目上工作时,长行可视化会让我很不爽。似乎应该很容易关闭长行可视化——我按下 m-x global-whitespace-toggle-options l,然后可以按下m-x global-whitespace-toggel-options ?确认“长行可视化”已关闭。但是长行仍然被突出显示。我杀死缓冲区并重新加载它们,但突出显示仍然存在。我肯定正在使用全局而非本地的空格模式。

为什么我无法关闭长行可视化?


2
不想像《IT Crowd》中的Roy那样,你尝试过在切换全局选项后关闭并重新打开缓冲区中的white-space-mode吗? - sanityinc
3个回答

10

我上一次自定义 whitespace-mode 时,注意到对设置的更改没有在已经存在的缓冲区中生效;请尝试重新创建缓冲区,或者离开并重新进入 whitespace-mode。如果您还不知道,可以使用 M-x customize-group whitespace 完全关闭特定选项,而不是手动关闭。

编辑:具体来说,您需要自定义 whitespace-style 变量。这允许您打开和关闭单个样式。在这种情况下,您应该关闭标记为“(Face) Lines”和“(Face) Lines, only overlong part”的选项。前者会在整行过长时更改整行的面容,而后者仅会更改扩展超过阈值的部分的面容。

(此组中的其他选项定义了 whitespace-mode 将用于突出显示已打开的样式的面容、用于识别某些情况的正则表达式等,但通常只关心 whitespace-style )。


1
请注意,您可以通过自定义“空格样式”设置并删除 line-tail 或类似设置来关闭长行“验证”。 - duma
这并没有真正回答问题,我的意思是,在M-x customize group中我们要改变什么?我已经多次更改了“Whitespace Line Face”(即关闭并保存),但没有任何变化。 - Startec
我已经编辑了我的答案,使其更具体,但请注意,我的答案更多地回答了为什么更改设置不会更新缓冲区的问题。通常,在应用这些设置之前,您需要关闭并重新打开缓冲区。另一方面,编辑_face_(而不是更新_style_变量)应立即更新使用该face的所有内容;也许您正在编辑错误的face? - db48x

5

将 whitespace-line-column 设为较高的值(默认为 80),这样长行的高亮就不会出现:

(setq whitespace-line-column 250)


5
为什么要使用黑客技巧,而不是直接将其关闭? - Evgeniy Berezovsky
@EugeneBeresovsky 因为这是唯一有效的答案。 - Startec

2
我假设您已经在您的init.el或类似文件中激活了whitespace-mode。如果是这样,您可以根据duma上面的comment进行调整,并且可以选择:
  • 编辑设置whitespace-style的elisp,移除lines-tail。例如,Emacs Prelude设置为:

    (setq whitespace-style '(face tabs empty trailing lines-tail))

    只需更改为

    (setq whitespace-style '(face tabs empty trailing))

  • 如果你不想直接编辑该elisp,而是后来使用自己的代码覆盖它,可以像这样做

    (setq whitespace-style (delete 'lines-tail whitespace-style))

    不幸的是,如果使用类似Emacs Desktop的自动加载缓冲区运行Prelude,则初始设置将优先:对于每个您想要按照指示显示whitespace-style的缓冲区,您必须进行以下操作[1]

    1. 杀死缓冲区
    2. 重新打开缓冲区

[1]: 注意给提问者:如果有其他重新加载缓冲区的方法,请编辑或评论此答案。我希望能找到类似M-x reload-buffer这样的东西,但在C-h a buffer中没有看到类似的内容。


如果您想在主要模式下使用钩子,例如当您想在文本编辑时停用它,但随后又为某些编程语言启用它,则我认为此答案是最有用的。 - Zelphir Kaltstahl
对于[1] PS注意:M-x revert-buffer是你想要的,先保存你的更改C-x C-s,否则它们会丢失。 - JohnDoe

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