wake-up-neo.com

Wie markiere ich alle Vorkommen eines Wortes in einem Emacs-Puffer?

Notepad ++ bietet eine praktische Funktion: Wenn Sie ein Wort in Ihrem Text auswählen (nicht unbedingt ein Schlüsselwort), wird das Wort im gesamten Text hervorgehoben. Kann man das auch in Emacs machen? Und wenn ja, wie? 

Es muss nicht unbedingt genau wie Notepad ++ funktionieren (d. H. Durch Auswahl). Im Idealfall möchte ich eine Schlüsselbindung einrichten, bei der alle Vorkommen des Word unter dem Cursor hervorgehoben werden.

Es wäre großartig, wenn die Hervorhebungen dauerhaft wären, d. H. Das Bewegen eines Punkts von einem hervorgehobenen Wort sollte nicht bewirken, dass die Hervorhebung entfernt wird.

Es wäre auch hilfreich, wenn es eine Lösung gäbe, die es ermöglichte, zwischen Markierungen zu navigieren (mit benutzerdefinierten Tastenkombinationen).

67
Headcrab

Vielleicht ist highlight-symbol.el unter http://nschum.de/src/emacs/highlight-symbol/ das, was Sie suchen:

alt text

36
polyglot

Die hi-lock Vorschläge sind gut. Ich denke es ist einfacher das zu benutzen M-x Versionen, obwohl:

M-x highlight-regexp RET <REGEXP>

M-x highlight-phrase RET <REGEXP>

highlight-phrase ist nur ein bisschen Zucker um highlight-regexp, der die Groß- und Kleinschreibung ignoriert und ein Leerzeichen im regulären Ausdruck so übersetzt, dass es mit einem beliebigen Leerzeichen übereinstimmt. Praktisch.

75
jrockway

Geben Sie C-s ein, und geben Sie dann das aktuelle Word oder C-w ein. Als Bonus können Sie jetzt erneut C-s drücken, um nach dem Wort zu suchen.

Dies wird als inkrementelle Suche bezeichnet.

35
ShreevatsaR

Was ich benutze, ist Leerlauf-Highlight

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

M-x Leerlauf-Highlight setzt einen Leerlaufzeitgeber, der alle Vorkommen im Puffer des Word unter dem Punkt hervorhebt.

Um es für alle Programmiermodi zu aktivieren, in ~/.emacs.d/init.el:

;; highlight words
(add-hook 'prog-mode-hook (lambda () (idle-highlight-mode t)))
13
Johnny

Lichtsymbol hebt hervor, was der Symbolpunkt ist.

Alternativ können Sie einführen verwenden. Hier werden alle Zeilen aufgelistet, die einem regulären Ausdruck entsprechen. Es ist nützlich, schnell alle Funktionen in einer Klasse zu sehen.

10
ieure

Versuchen Sie http://www.emacswiki.org/emacs/msearch.el Alle Vorkommen des mit dem Cursor ausgewählten Textes werden hervorgehoben .. Sie müssen über die Zeichenfolge ziehen, die Sie hervorheben möchten . So können Sie die Auswahl einfach ändern, ohne die Hervorhebung zu ändern.

Wenn Sie die Hervorhebung einer Zeichenfolge beibehalten möchten, können Sie sie einfrieren.

Sie können einen Puffer in einen anderen Puffer versklaven. Der im Master-Puffer ausgewählte Text wird auch im Slave-Puffer hervorgehoben. Dies ist nützlich, um Puffer zu vergleichen. __ Sie können auch Notizen in einem Puffer machen, während Sie den Text in einem anderen Puffer untersuchen. Sie können eine Sammlung von Schlüsselwörtern im Notizpuffer haben. Ziehen Sie ein solches Schlüsselwort über, und die Vorkommen im untersuchten Text werden hervorgehoben.

Ich benutze dieses Zeug seit Jahren. Ich habe vor kurzem das Einfrieren hinzugefügt. Vielleicht ist etwas kaputt. Wenn dies der Fall ist, hinterlassen Sie eine Notiz auf http://www.emacswiki.org/emacs/msearch oder hier.

6
Tobias

Das ist vielleicht nicht so schön wie das, was Sie erhofft haben, aber wenn Sie es setzen 

(global-hi-lock-mode 1)

in Ihrer .emacs-Datei können Sie C-x w h REGEX <RET> <RET> eingeben, um alle Vorkommen von REGEX hervorzuheben, und C-x w r REGEX <RET>, um sie wieder aufzuheben. Wieder nicht so elegant, wie Sie wahrscheinlich möchten, aber es wird funktionieren.

5
dancavallaro

Aktivieren Sie Interaktive Hervorhebung

Sollte sein:

C-xwh Wort <RET><RET>

5
CMS

Mit Befehlen in der Bibliothek highlight.el Können Sie Text (un) markieren, der einem regulären Ausdruck (in diesem Fall einem Symbol) entspricht, indem Sie Overlays oder Texteigenschaften verwenden. Sie können zwischen den Vorkommen wechseln. Die Hervorhebung kann temporär oder dauerhaft sein. (Mehr Info) .

2
Drew

Versuchen Sie iedit . Es hebt das Wort an einem Punkt hervor und ermöglicht Ihnen die einfache Bearbeitung aller Vorkommen. Mit einem zusätzlichen Tastenanschlag (C- ') werden alle Zeilen ohne dieses Wort ausgeblendet. Sehr praktisch

2
Phob

Dies wird möglicherweise nicht hervorgehoben, sucht aber nach einem Wort, ohne dass Sie es eingeben müssen ...

wenn Sie das zu suchende Wort erreicht haben, C-S, dann das vollständige Wort mit C-W lesen, dann können Sie C-S und es wird danach suchen. In meinen Emacs werden auch alle Instanzen im Dokument hervorgehoben.

0
George

Mit diesem in Melpa verfügbaren Paket können Sie auch den Hervorhebungsstil anpassen. 

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

0
Pharaoh

Niemand erwähnte symbol-overlay mode . Es ist im Grunde ein besseres Umschreiben von highlight-symbol-mode. "Besser" als in, es fehlen Fehler des ursprünglichen Hervorhebungssymbols (z. B. das zeitweilige Hervorheben bleibt hängen oder das zeitweilige Hervorheben verschwindet, wenn Sie sich in dem hervorgehobenen Wort bewegen, oder es kann keine Symbole hervorheben wie *) , besser integriert und gepflegt. Siehe den Abschnitt "Vorteile" in der README-Datei.

Sie können es wie gewohnt mit installieren M-xpackage-install  (stellen Sie sicher, dass Sie die Paketliste vorher mit package-list-packages aktualisieren) . Als Referenz enthält der untere Teil des Beitrags Code aus meiner Konfiguration, um den Modus zu aktivieren.

Notepad ++ hat eine praktische Funktion: Wenn Sie ein Wort in Ihrem Text auswählen (nicht unbedingt ein Schlüsselwort), wird das Wort im gesamten Text hervorgehoben. Kann das auch in Emacs gemacht werden? Und wenn ja, wie?

Sobald Sie overlay-symbol aktivieren, werden Vorkommen auf dem Bildschirm für jedes Wort angezeigt, auf das Sie den Cursor nach einer Zeitüberschreitung setzen (die Zeitüberschreitung beträgt standardmäßig 0,5 s und kann mit der Variablen symbol-overlay-idle-time konfiguriert werden) . Wenn ein Wort nicht hervorgehoben wird, bedeutet dies, dass es nur eine Übereinstimmung auf dem Bildschirm gibt (die, auf die Sie den Cursor setzen) , sodass dies nicht erforderlich ist Markieren Sie es.

Es wäre großartig, wenn die Hervorhebungen dauerhaft wären, d. H. Das Bewegen eines Punktes von einem hervorgehobenen Wort weg sollte nicht dazu führen, dass die Hervorhebung entfernt wird.

Um das Wort unter dem Cursor dauerhaft hervorzuheben, gibt es eine Funktion symbol-overlay-put. Zum Deaktivieren rufen Sie es noch einmal auf.

In meinem Konfigurationsbeispiel ist es gebunden an Logo+` Schlüssel.


(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-map (make-sparse-keymap))       ;; disable special cmds on overlays
0
Hi-Angel