Notepad++ 有一个方便的功能:如果您在文本中选择一个词(不一定是关键字),该词会在整个文本中突出显示。这也可以在 Emacs 中完成吗?如果是这样,怎么办?
它不一定必须像 Notepad++ 一样工作(即,通过选择);理想情况下,我想设置一个键绑定,使光标下所有出现的单词都被突出显示。
如果突出显示是永久性的,那就太好了,即,将点从突出显示的单词移开不应导致突出显示被删除。
此外,如果有一种解决方案可以在高亮之间导航(使用自定义键绑定),那将很有用。
hi-lock
的建议很好。不过,我认为使用 Mx 版本更容易:
Mx highlight-regexp
RET <REGEXP>
Mx highlight-phrase
RET <REGEXP>
highlight-phrase
只是 highlight-regexp
周围的一点糖,它忽略大小写并转换正则表达式中的空格以匹配任意空格。便利。
也许 http://nschum.de/src/emacs/highlight-symbol/ 的 highlight-symbol.el 是您正在寻找的:
https://nschum.de/src/emacs/highlight-symbol/highlight-symbol.png
键入 C-s
,然后键入当前单词或键入 C-w
。作为奖励,您现在可以再次点击 C-s
来搜索该词。
这称为增量搜索。
M-x highlight-regexp
解决方案(并将其绑定到快捷方式)。
我用的是idle-highlight
http://www.emacswiki.org/emacs/IdleHighlight
Mx idle-highlight 设置一个空闲计时器,它突出显示该点下单词缓冲区中的所有出现。
要为所有编程模式启用它,在 ~/.emacs.d/init.el
中:
;; highlight words
(add-hook 'prog-mode-hook (lambda () (idle-highlight-mode t)))
Light-symbol 将突出显示任何符号点结束。
或者,您可以使用 occur,它列出与正则表达式匹配的所有行。快速查看类中的所有函数很有用。
没有人提到 symbol-overlay
mode。它基本上是对 highlight-symbol-mode
的更好重写。 “更好”,缺少原始高亮符号 的错误(例如,临时高亮卡住,或临时高亮因在高亮单词内移动而消失;或无法高亮像 *
之类的符号)< /em>,更好地集成和维护。请参阅其自述文件的“优势”段落。
您可以像往常一样使用 Mxpackage-install 安装它(确保事先使用 package-list-packages
更新软件包列表)。作为参考,我在底部附加了用于启用该模式并禁用一些您可能想要或可能不想要的更高级功能的代码。
Notepad++ 有一个方便的功能:如果您在文本中选择一个词(不一定是关键字),该词会在整个文本中突出显示。这也可以在 Emacs 中完成吗?如果是这样,怎么办?
启用 overlay-symbol
后,屏幕上将显示您将光标放在超时后的每个单词的出现次数(默认超时为 0.5 秒,可以使用 symbol-overlay-idle-time
变量进行配置)。如果一个词没有突出显示,这意味着屏幕上只有一个匹配项(您将光标放在的那个),因此无需突出显示它。
如果突出显示是永久性的,那就太好了,即,将点从突出显示的单词移开不应导致突出显示被删除。
要永久突出光标下的单词,有一个函数 symbol-overlay-put
。要取消突出显示,请再次调用它。
在我的配置示例中,它绑定到 Logo+` 键。
(require 'symbol-overlay)
(defun enable-symbol-overlay-mode ()
(unless (or (minibufferp)
(derived-mode-p 'magit-mode)
(derived-mode-p 'xref--xref-buffer-mode))
(symbol-overlay-mode t)))
(define-global-minor-mode global-symbol-overlay-mode ;; name of the new global mode
symbol-overlay-mode ;; name of the minor mode
enable-symbol-overlay-mode)
(global-symbol-overlay-mode) ;; enable it
(global-set-key (kbd "s-`") 'symbol-overlay-put)
(setq symbol-overlay-ignore-functions nil) ;; don't ignore keywords in various languages
(setq symbol-overlay-map (make-sparse-keymap)) ;; disable special cmds on overlays
symbol-overlay-mode
正是我想要的。将 symbol-overlay-put
绑定到 F 键对于在文件中切换给定单词的突出显示非常方便。
symbol-overlay-put
可以不区分大小写吗?
case-fold-search
,但它对 symbol-overlay-put
突出显示的文本没有影响。我认为您可以创建一个功能请求 on the project bugtracker。
这可能不如你希望的那么好,但如果你把
(global-hi-lock-mode 1)
在您的 .emacs
文件中,您可以输入 C-x w h REGEX <RET> <RET>
以突出显示所有出现的 REGEX
,然后输入 C-x w r REGEX <RET>
以再次取消突出显示它们。再一次,没有你想的那么优雅,但它会起作用。
尝试 http://www.emacswiki.org/emacs/msearch.el 用光标选择的所有文本都突出显示。您必须拖动要突出显示的字符串。这使您能够轻松更改选择而不更改突出显示。
如果要保留字符串的突出显示,可以将其冻结。
您可以将一个缓冲区奴役到另一个缓冲区。在主缓冲区中选择的文本也将在从缓冲区中突出显示。这对于比较缓冲区很有用。当您在另一个缓冲区中调查文本时,它也可用于在一个缓冲区中记笔记。您可以在注释缓冲区中有一组关键字。拖动这样的关键字,它在调查文本中的出现将被突出显示。
我用这个东西很多年了。我最近添加了冷冻。所以,也许有些东西坏了。如果是这种情况,请在 http://www.emacswiki.org/emacs/msearch 或此处给我留言。
应该:
Cx wh 字
这可能不会突出显示,但会在您无需键入的情况下搜索单词...
当你找到你想搜索的单词时,CS,然后用 CW 阅读完整的单词,然后你可以 CS,它会搜索它。在我的 Emacs 中,它还突出显示了文档中的所有实例。
不定期副业成功案例分享
M-x unhighligh-regex
key-chord:C-x w r
...此外,highlight-phrase 并非完全不区分大小写。只有 initial 小写字母(单词)ae 不区分大小写。 (我想它是为了处理fred
vsFred
).. 例如它生成一个正则表达式,如:[Cc]at[ ]+[Dd]og
unhighlight-regexp
而不是unhighligh-regex
(缺少t
和p
)。M-x highlight-regexp RET <hello>, <world>
之类的东西。 2. 如何同时unhighlight
所有单词?M-x unhighlight-regexp RET <hello>, <world>
之类的东西