highlight-symbol-at-point
确实有用,但是我找不到取消突出显示符号的简便方法。
目前,我必须unhighlight-regexp
为每个突出显示的符号重复调用。
是否有更好的方法来:
- 取消突出显示缓冲区中所有突出显示的符号
- 取消显示符号?
M-x hi-lock-mode
highlight-symbol-at-point
确实有用,但是我找不到取消突出显示符号的简便方法。
目前,我必须unhighlight-regexp
为每个突出显示的符号重复调用。
是否有更好的方法来:
M-x hi-lock-mode
Answers:
从中C-h f unhighlight-regexp
,我们得到
(unhighlight-regexp REGEXP)
删除通过hi-lock设置的REGEXP的每个匹配项的突出显示。以交互方式提示您输入REGEXP,仅接受以前由hi-lock交互功能插入的正则表达式。如果REGEXP为t(或以交互方式指定了Cu),则删除所有高亮显示。
这意味着,我们只需要调用unhighlight-regexp
与t
作为它的参数删除所有喜锁在缓冲区突出。
如果这是一次性的事情,则可以通过M-: (unhighlight-regexp t)
或快速完成C-u M-s h u
。但这似乎是您经常需要做的事情。在这种情况下,最好将其包装在interactive
函数中并将其绑定到某个键。
下面是一个建议的解决方案,其中my/unhighlight-all-in-buffer
包装器交互功能是绑定到hU
中的search-map
。默认情况下,search-map
前缀为M-s
。所以,现在,正如M-s h u
发布会unhighlight-regexp
,M-s h U
(注意是大写的U)发射my/unhighlight-all-in-buffer
。
(require 'hi-lock)
(defun my/unhighlight-all-in-buffer ()
"Remove all highlights made by `hi-lock' from the current buffer.
The same result can also be be achieved by \\[universal-argument] \\[unhighlight-regexp]."
(interactive)
(unhighlight-regexp t))
(define-key search-map "hU" #'my/unhighlight-all-in-buffer)
好处是您无需将点放在需要突出显示的符号上。
您只需调用M-x unhighlight-regexp
或M-s h u
(其默认绑定)并按M-p
/ M-n
直到遇到需要取消突出显示的符号的正则表达式,然后按Enter。
另一种方法是使用库Highlight(highlight.el
),命令hlt-highlight-symbol-at-point
和hlt-unhighlight-symbol-at-point
。
它们分别默认绑定到C-x X h s
和C-x X u s
。C-x X
默认情况下,所有突出显示和取消突出显示的命令都绑定在前缀键上。高亮显示命令使用前缀键C-x X h
。取消突出显示的命令使用前缀key C-x X u
。除了C-x X
将其绑定到prefix命令外,还可以使用其他前缀键hlt-map
。
库中的突出显示突出显示可以使用覆盖或文本属性(或两者)。可以自动选择突出显示的脸部或颜色(从定制的脸部和颜色序列中选择)。
突出显示可以使用property font-lock-face
,因此它由Font Lock模式控制。或者它可以使用property face
,以便不受其控制。(您可以使用property face
在不使用字体锁定的缓冲区中突出显示,并且在关闭Font Lock模式时,突出显示将保留在字体锁定的缓冲区中。)