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

Hea*_*rab 75 emacs highlighting

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

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

如果高光是永久的,即远离突出显示的单词的移动点应该导致高光被移除,那将是很好的.

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

jro*_*way 78

hi-lock建议是很好的.我认为使用这些M-x版本更容易:

M-x highlight-regexp RET <REGEXP>

M-x highlight-phrase RET <REGEXP>

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

  • 要清除亮点,请使用:`Mx unhighligh-regex` key-chord:`Cx wr` ...此外,*highlight-phrase*不完全不区分大小写.只有**初始**小写字母(单词)ae不区分大小写.(我想它的目的是处理`fred` vs`Fredred`)..例如它产生一个正则表达式:`[Cc] at [] + [Dd] og` (20认同)

pol*_*lot 38

也许你在寻找http://nschum.de/src/emacs/highlight-symbol/上的 highlight-symbol.el :

替代文字

  • @mefiX:内置函数非常适合单次使用.外部软件包增加了(仅限于)仅用1次按键突出光标下的单词的便利性,以及自动更改不同单词的高亮颜色.是的,你可以使用内置功能,但为什么浪费时间和数百次击键而不是几秒钟和按键,如果这是你经常做的事情?那些贬低者似乎是愚蠢的:有人可能会发现这个包有用,即使你没有. (4认同)

Shr*_*saR 36

键入C-s,然后键入当前单词或类型C-w.作为奖励,您现在可以C-s再次点击搜索该单词.

这称为增量搜索.

  • 为了它的价值,我现在意识到这个问题的意图:你希望"永久"突出显示的事件(直到你关闭它),即使你做其他工作,如四处走动,打字等等.为此,Cs(增量搜索) )不起作用(突出显示是"临时的";你可以在缓冲区中移动,但很难做新的编辑工作).我使用(并且已经upvoted)`Mx highlight-regexp`解决方案(并将其绑定到快捷方式). (8认同)

Joh*_*nny 13

我使用的是空闲 - 突出显示

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)))
Run Code Online (Sandbox Code Playgroud)


ieu*_*ure 10

光符号将突出显示任何符号点.

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


Hi-*_*gel 7

没有人提到symbol-overlay模式。它基本上是对highlight-symbol-mode. “更好”如,没有原有高亮符号的bug (如临时高亮卡住,或临时高亮因移动到高亮词内而消失;或不能高亮符号如*,更好地集成和维护。请参阅其自述文件的“优点”段落。

您可以像往常一样安装它,使用M-xpackage-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
Run Code Online (Sandbox Code Playgroud)


Tob*_*ias 6

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

如果要保留字符串的突出显示,可以将其冻结.

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

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


dan*_*aro 5

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

(global-hi-lock-mode 1)
Run Code Online (Sandbox Code Playgroud)

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


CMS*_*CMS 5

检查交互式突出显示

应该:

C- x w h<RET> <RET>

  • 首先,应通过 Mx hi-lock-mode 启用 hi-lock-mode。然后,它就起作用了。顺便说一句,交互式突出显示的链接已失效。现在在这里:https://www.gnu.org/software/emacs/manual/html_node/emacs/Highlight-Interactively.html (2认同)