在`diff-mode`中覆盖`show-trailing-whitespace`


9

我已经在文件中全局show-trailing-whitespace设置了,这通常不是问题,除了当我正在查看的补丁中,该补丁具有用于空白上下文行的强制尾随空白时。t.emacsdiff-mode

一个解决办法是简单地关闭show-trailing-whitespacediff-mode一些相关挂钩,但实际上我想在改变线仍然显示尾部的空白。例如,如果我不小心引入了尾随空格或将其删除,那没关系,但我仍然希望该trailing-whitespace表情可以出现在脸上。我只是不希望空白上下文行被视为尾随空格,因为它们对于diff格式本身是必需的。

这是我得到的当前行为的示例:

在此处输入图片说明

这就是我想要的:

在此处输入图片说明

这是另一个示例,但这一次,实际添加了空格:

在此处输入图片说明

但是,如果我show-trailing-whitespace完全禁用diff-mode,那么我将根本看不到任何深红色。相反,这就是我想要的:

在此处输入图片说明

基本上,我认为这涉及到show-trailing-whitespace意识到只有一个空格的差异线是特殊的。


3
您确定只在diff模式下完全禁用此功能不是您想要的吗?如果您不小心添加或删除了结尾的空格,那么无论您的emacs配置如何,diff-mode都不会突出显示(由于文件中的更改)?
马拉巴巴2014年

我想以红色的空白字体看到结尾的空白。随意提供仅在diff模式下禁用的答案,因为这可能对其他人有帮助,但这并不是我想要的。
b4hand 2014年

1
如果将diff模式自己的突出显示脸部设置为类似于空白模式红色的东西,是否会令人满意?
马拉巴巴2014年

Answers:


1

一种解决方案是在“差异”模式下关闭“尾随空白”模式,然后为不想看到的尾随空白定义自己的自定义字体锁定规则。

(defvar diff-trailing-whitespace-keywords
  '(("^[+-<>]\\(.*\\S \\)?\\(\\s +\\)$" (2 'trailing-whitespace t))))
(defun diff-mode-font-lock-add-trailing-whitespace ()
  (setq diff-font-lock-keywords-and-whitespace
    (append diff-font-lock-keywords
        diff-trailing-whitespace-keywords))
  (setcar diff-font-lock-defaults 'diff-font-lock-keywords-and-whitespace))
(defun turn-off-trailing-whitespace ()
  (setq show-trailing-whitespace nil))
(add-hook 'diff-mode-hook 'turn-off-trailing-whitespace)
(eval-after-load "diff-mode" '(diff-mode-font-lock-add-trailing-whitespace))

2

设置后,其值将show-trailing-whitespace变为局部缓冲区,因此您只需在相关挂钩中进行设置即可:

(add-hook 'diff-mode-hook (lambda () (setq show-trailing-whitespace nil)))

要检查显示尾随空白的文档:C-h v show-trailing-whitespace


2
但这会关闭整个缓冲区的模式,这正是b4hand想要避免的模式。
吉尔斯(Gillles)“所以-别再作恶了”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.