85

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

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

如果突出显示是永久性的,那就太好了,即,将点从突出显示的单词移开不应导致突出显示被删除。

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

4

13 回答 13

90

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

M-x highlight-regexp RET <REGEXP>

M-x highlight-phrase RET <REGEXP>

highlight-phrase只是highlight-regexp忽略大小写并转换正则表达式中的空格以匹配任意空格的糖。便利。

于 2009-01-09T04:11:12.427 回答
42

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

替代文字

于 2008-12-23T00:50:53.773 回答
37

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

这称为增量搜索

于 2008-12-22T08:53:30.727 回答
15

我用的是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)))
于 2011-04-28T08:59:45.943 回答
10

Light-symbol将突出显示任何符号点结束。

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

于 2008-12-22T06:39:10.997 回答
7

没有人提到symbol-overlaymode。它基本上是一个更好的重写highlight-symbol-mode。“更好”如中,缺少原始高亮符号的错误(例如,临时高亮卡住,或临时高亮在突出显示的单词内移动而消失;或无法突出显示符号等*,更好地集成和维护。请参阅其自述文件的“优势”段落。

您可以像往常一样安装它,使用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
于 2019-04-22T23:26:00.833 回答
6

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

(global-hi-lock-mode 1)

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

于 2008-12-22T06:37:27.193 回答
6

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

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

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

我用这个东西很多年了。我最近添加了冷冻。所以,也许有些东西坏了。如果是这种情况,请在 http://www.emacswiki.org/emacs/msearch或此处给我留言。

于 2013-08-22T16:09:22.717 回答
5

检查交互式突出显示

应该:

C-x w h<RET> <RET>

于 2008-12-22T06:37:38.863 回答
2

库中的命令highlight.el 允许您(取消)突出显示匹配正则表达式(在本例中为符号)的文本,使用覆盖或文本属性。您可以在事件之间循环。突出显示可以是暂时的或持久的。(更多信息)

于 2011-09-05T06:38:39.737 回答
2

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

于 2011-10-31T03:45:30.290 回答
0

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

当你找到你想搜索的单词时,CS,然后用 CW 阅读完整的单词,然后你可以 CS,它会搜索它。在我的 Emacs 中,它还突出显示了文档中的所有实例。

于 2018-02-20T18:46:54.783 回答
0

这个包在 Melpa 作品中可用,您也可以自定义高亮样式。

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

于 2018-10-23T12:55:34.397 回答