如何使 emacs 突出显示超过 80 个字符的行?
Posted
技术标签:
【中文标题】如何使 emacs 突出显示超过 80 个字符的行?【英文标题】:How can I make emacs highlight lines that go over 80 chars? 【发布时间】:2011-09-14 17:27:05 【问题描述】:我知道有一些解决方案可以让 emacs 显示 80 行列,但我不想要那种视觉干扰。如果超过 80 个字符,我只想让它突出显示一行。
【问题讨论】:
> 我知道有解决方案 对于那些不知道的人,例如emacswiki.org/emacs/FillColumnIndicator 。当这个问题被问到时,这可能并不存在,而且恕我直言,这并不太令人不安,但品味是,嗯,一个品味问题。 【参考方案1】:另一个简单的选择是在表达式 .\81\
上运行 highlight-lines-matching-regexp
。
包含 81 个或更多字符的每一行都将以您选择的颜色突出显示。
【讨论】:
太棒了。有什么方法可以在我的 .emacs 中启用它吗? 突出显示是每个缓冲区的设置。但是,您可以像这样在 .emacs 上添加特定于模式的挂钩:(add-hook 'emacs-lisp-mode-hook '(lambda () (highlight-lines-matching-regexp ".\81\" "hi-green-b")))
。我没有找到适用于所有缓冲区的通用新缓冲区挂钩。
为什么(add-hook 'c++-mode-hook '(lambda () (highlight-lines-matching-regexp ".\81\" "hi-green-b")))
对我不起作用?
@RNAer 试试这个:(add-hook 'c++-mode-hook '(lambda () (highlight-lines-matching-regexp ".\\81\\" 'hi-yellow)))
@Juancho find-file-hook
应该是你要找的钩子。【参考方案2】:
参见whitespace-mode
——它现在是 Emacs 的一部分,并且可以做的不仅仅是突出显示长行。 (但当然只能用来做那个。)
【讨论】:
您能解释一下这是如何工作的吗?有一个对“长线”的倾斜引用,但在解释是什么使一条线变长时。如果不是80个字符,怎么指定80? 您可以设置whitespace-line-column
。如需更多选项,请使用M-x customize-group RET whitespace RET
,您将看到所有选项。 (我只是看源码,写elisp代码...)
我使用了 redspace.el (emacswiki.org/emacs/redspace.el),但这似乎更好。谢谢!
我的问题是它添加了一堆可能不需要的其他突出显示。
@EoghanM,看看whitespace-style
:你可以控制要突出显示的内容。【参考方案3】:
这是我来自Emacs Dev Kit的配置:
;; whitespace-mode
;; free of trailing whitespace and to use 80-column width, standard indentation
(setq whitespace-style '(trailing lines space-before-tab
indentation space-after-tab)
whitespace-line-column 80)
基本上你只需要最后一点,但我发现其他设置非常有用(我讨厌制表符和尾随空格)。
【讨论】:
【参考方案4】:试试highlight-80+.el
。可以从here获取。
要安装它,只需将以下内容添加到您的.emacs
:
(add-to-list 'load-path "/path/to/highlight-80+")
(require 'highlight-80+)
然后您可以通过以下方式启用它:
M-x highlight-80+-mode
【讨论】:
highlight-80+.el 的作者说它已停产,并建议从 Emacs 23 开始使用 whitespace-mode 的 空白行列.【参考方案5】:这里是一些示例代码,它将突出显示位于第 80 列之外的文本以及当前的“警告”面,以及为 C++ 模式启用它的一行。
;; Turn on warn highlighting for characters outside of the 'width' char limit
(defun font-lock-width-keyword (width)
"Return a font-lock style keyword for a string beyond width WIDTH
that uses 'font-lock-warning-face'."
`((,(format "^%s\\(.+\\)" (make-string width ?.))
(1 font-lock-warning-face t))))
(font-lock-add-keywords 'c++-mode (font-lock-width-keyword 80))
它没有突出整行,但我觉得它很有帮助。
【讨论】:
但不适用于标签。有关更高级的正则表达式,请参阅 emacswiki.org/emacs/EightyColumnRule。 我可以将它应用于特定的文件名模式而不是*mode
吗? @acm
@alper - 不幸的是,我不知道。也许开始一个新问题?【参考方案6】:
这不是您想要的,但我遇到了类似的问题并找到了这个问题/答案。我想要的只是在需要时插入视觉指南。这就是我最终得到的结果:
(defun insert-80 ()
"Insert an 80-character-wide guide at beginning of line."
(interactive)
(beginning-of-line)
(insert "0 1 2 3 4 5 6 7 |")
(newline)
(insert "01234567890123456789012345678901234567890123456789012345678901234567890123456789|")
(newline)
)
超级简单,但有时非常有效。
【讨论】:
【参考方案7】:emacs-goodies-el
(建议安装在终端)中有一个内置的包,叫做highlight-beyond-fill-column.el,把它加到你的.emacs
或者init.el
:
(setq-default fill-column 80)
(add-hook 'prog-mode-hook 'highlight-beyond-fill-column)
(custom-set-faces '(highlight-beyond-fill-column-face
((t (:foreground "red" )))))
sn-p 中fill-column
80 以外的文本将以red
的颜色突出显示。您可以随意设置脸部。
【讨论】:
也许使用set-face-attribute
? custom-set-faces
不应该被手动触摸。【参考方案8】:
这与此处的其他答案类似,具有使用fill-column
的优势,并且它在模式切换后运行。因此,每种模式都可以有自己的线宽,突出显示适当地尊重。
(add-hook 'after-change-major-mode-hook
(lambda ()
(when (derived-mode-p 'prog-mode)
(let ((column-re (format "^[^\n]\\%d\\\\(.*\\)$" fill-column)))
(font-lock-add-keywords nil
`((,column-re 1 font-lock-warning-face prepend)))))))
您可能不想删除 prog-mode
检查您是否也希望为文本文件启用此功能。
【讨论】:
以上是关于如何使 emacs 突出显示超过 80 个字符的行?的主要内容,如果未能解决你的问题,请参考以下文章