如何突出显示Emacs缓冲区中所有单词的出现次数?

时间:2008-12-22 06:20:40

标签: emacs highlighting

Notepad ++有一个方便的功能:如果您在文本中选择一个单词(不一定是关键字),则该单词会在整个文本中突出显示。这可以在Emacs中完成吗?如果是这样,怎么样?

它不一定必须像Notepad ++一样工作(即通过选择);理想情况下,我想设置一个键绑定,使所有出现的光标下的单词都突出显示。

如果高光是永久性的,那么如果导致突出显示被删除,那么移动点远离突出显示的单词会很棒。

此外,如果有一个解决方案可以在高亮显示之间导航(使用自定义键绑定),那将非常有用。

13 个答案:

答案 0 :(得分:74)

hi-lock建议很好。我认为使用 M-x 版本更容易:

M-x highlight-regexp RET <REGEXP>

M-x highlight-phrase RET <REGEXP>

highlight-phrase只是highlight-regexp周围的一点糖,忽略大小写并翻译正则表达式中的空格以匹配任意空格。方便。

答案 1 :(得分:37)

也许在http://nschum.de/src/emacs/highlight-symbol/的highlight-symbol.el正是您所寻找的:

alt text

答案 2 :(得分:36)

输入C-s,然后输入当前字词或输入C-w。作为奖励,您现在可以再次点击C-s来搜索单词。

这称为增量搜索

答案 3 :(得分:13)

我使用的是idle-highlight

http://www.emacswiki.org/emacs/IdleHighlight

  

M-x idle-highlight设置一个空闲计时器,突出显示该点下单词缓冲区中的所有出现。

要在~/.emacs.d/init.el

中为所有编程模式启用它
;; highlight words
(add-hook 'prog-mode-hook (lambda () (idle-highlight-mode t)))

答案 4 :(得分:10)

Light-symbol将突出显示符号点。

或者,您可以使用occur,其中列出了与正则表达式匹配的所有行。快速查看类中的所有函数非常有用。

答案 5 :(得分:6)

试试http://www.emacswiki.org/emacs/msearch.el 使用光标选择的文本的所有出现都会突出显示。 您必须拖动要突出显示的字符串。这使您可以轻松更改选择而无需更改突出显示。

如果您想保留字符串的突出显示,可以将其冻结。

您可以将缓冲区奴役到另一个缓冲区。在主缓冲区中选择的文本也将在从属缓冲区中突出显示。这对比较缓冲区很有用。 当您在另一个缓冲区中调查文本时,它也可用于在一个缓冲区中记笔记。您可以在notes缓冲区中拥有一组关键字。拖动这样一个关键字,它将在被调查文本中突出显示。

我现在使用这些东西多年了。我最近加了冰冻。所以,也许有些东西被打破了。如果是这种情况,请在http://www.emacswiki.org/emacs/msearch或此处留言。

答案 6 :(得分:5)

这可能不如你所希望的那么好,但如果你把

(global-hi-lock-mode 1)

在您的.emacs文件中,您可以输入C-x w h REGEX <RET> <RET>以突出显示REGEXC-x w r REGEX <RET>的所有出现,以便再次突出显示它们。再一次,并不像你想的那样优雅,但它会起作用。

答案 7 :(得分:5)

检查Interactive Highlighting

应该是:

C - x w h word &lt; RET&gt; &LT; RET&GT;

答案 8 :(得分:2)

highlight.el中的命令 让您(联合国)使用叠加或文本属性突出显示与正则表达式匹配的文本(在本例中为符号)。您可以在事件之间循环。突出显示可以是暂时的或持久的。 (more info)

答案 9 :(得分:2)

试试iedit。它突出显示单词,并允许您轻松编辑它的所有出现。通过额外的击键(C-'),它隐藏了所有没有该词的行。非常方便!

答案 10 :(得分:0)

这可能不会突出显示,但会在不需要输入的情况下搜索单词...

当你已经到达想要搜索的单词C-S时,然后用C-W读取完整的单词然后你就可以用C-S来搜索它。在我的Emacs中,它还突出显示了文档中的所有实例。

答案 11 :(得分:0)

此包可用于Melpa作品中,您也可以自定义突出显示样式。

https://github.com/ignacy/idle-highlight-in-visible-buffers-mode

答案 12 :(得分:0)

没有人提到symbol-overlay mode。基本上,这是对highlight-symbol-mode的更好重写。如上的“更好”,缺少原始突出显示符号的错误(例如,临时突出显示被卡住,或者临时突出显示消失以在突出显示的单词内移动;或者无法突出显示*之类的符号),更好地集成和维护。请参阅其自述文件的“优点”段落。

您可以像往常一样使用 Mx package-install 进行安装(确保事先使用package-list-packages更新软件包列表)。作为参考,该文章的底部有来自我的配置的代码以启用该模式。

  

Notepad ++具有一个方便的功能:如果您在文本中选择一个单词(不一定是关键字),则该单词将在整个文本中突出显示。可以在Emacs中完成吗?如果可以,怎么办?

启用overlay-symbol后,超时后(默认超时为0.5秒,可以用{{1}变量)。如果一个单词没有突出显示,则表示屏幕上只有一个匹配项(您将光标放在该匹配项上),因此无需突出显示该匹配项。

  

如果突出显示是永久性的,那太好了,也就是说,远离突出显示单词的移动点不应导致突出显示被删除。

要永久突出显示光标下的单词,有一个功能symbol-overlay-idle-time。要取消突出显示,请再次调用。

在我的配置示例中,它绑定到 Logo + `键。


symbol-overlay-put