Hervorheben von Text in geöffneten (angezeigten) Puffern / Fenstern - Suchen nach Text aus einem Puffer in einem anderen

8

Im Moment habe ich meinen Emacs-Rahmen vertikal geteilt und betrachte zwei verschiedene Puffer in den beiden Fenstern.

Ich möchte zu einem Wort in einem Puffer gehen, einige Tasten drücken und die Vorkommen dieses Wortes (falls vorhanden) im anderen Puffer hervorheben und bei Bedarf zu diesem Wort scrollen.

Gibt es eine Möglichkeit, das zu tun?

Screenshot zur Erklärung

Im obigen Screenshot möchte ich mit meinem Cursor kurz vor "bar" im linken Puffer <etwas tun> und schnell sehen, wo sich "bar" im rechten Puffer befindet.


Hinweis: Dies hängt mit zusammen. Wie finde ich Text in mehreren offenen Puffern? in dem Sinne, dass wenn ich eine Isearch über den "anderen" Puffer durchführen könnte, es tun würde, was ich will. Aber keine der Antworten dort ist genau das, was ich will:

  • Die occurbasierten Lösungen öffnet sich ein neues Fenster , das zeigt Linien passende, während Ich mag würde meine zwei Fenster angezeigt noch halten - ich werde tatsächlich für den Kontext in den anderen Puffer suchen werden um das Spiel, so dass nur die passende Linie zeigt ist nicht sehr hilfreich.
  • multi-isearch-buffersIch muss die Liste der Puffer jedes Mal angeben, wenn ich diese Suche durchführen möchte (häufig), anstatt sie automatisch als die beiden angezeigten Puffer aufzunehmen. Noch wichtiger ist, wenn ich von einem Fenster aus starte und die Suche durchführe und die Übereinstimmung im anderen Puffer finde, wird dieser Puffer in diesem Fenster angezeigt, sodass beide Fenster denselben (anderen) Puffer anzeigen. Dann setzt Cg alles zurück und ich kann das im anderen Puffer hervorgehobene Wort nicht mehr sehen.
  • icicle-search hat so viele Funktionen, dass einer von ihnen dies möglicherweise kann, aber ich konnte nach einem flüchtigen Blick in die Dokumentation nichts finden.
ShreevatsaR
quelle
Im Moment mache ich Cs Cw Cs (um die Suche in diesem Puffer durchzuführen), wechsle zum anderen Puffer, mache Cs Cs (um die gleiche Suche dort zu wiederholen) und wechsle dann zurück. Das sind sieben Tastenanschläge, die ich als Makro aufzeichnen könnte, denke ich. Lass mich das tun. Trotzdem bin ich interessiert zu wissen, ob es andere Lösungen gibt.
ShreevatsaR
FWIW: Hört C-s C-w C-x o C-s C-ssich für mich nicht so schlecht an. (Sie brauchen kein C-sRecht nach dem C-w.)
Drew
@Drew: Danke, die Idee, ein Makro zu verwenden, kam erst, nachdem ich die Frage gestellt hatte. jetzt ein Makro, das in der C-s C-w C-x o C-s C-s C-x oTat in Ordnung scheint.
ShreevatsaR

Antworten:

5

Sie können ein Paket namens verwenden highlight-global, das von github erhältlich ist, jedoch nicht auf Melpa (zum Zeitpunkt des Schreibens).

Die highlight-frame-togglein diesem Paket definierte Funktion hebt das Wort am Punkt oder den ausgewählten Bereich überall im Rahmen hervor (in allen Puffern). Dies würde jedoch nicht automatisch zu dem hervorgehobenen Wort scrollen, das Sie benötigen. Es wird eine andere Hervorhebungsfarbe ausgewählt, wenn Sie mehr Wörter hervorheben, ohne die früheren Hervorhebungen zu löschen.

Hier ist ein Screenshot davon, wie es aussieht:

Geben Sie hier die Bildbeschreibung ein Klicken Sie hier, um den Screenshot besser anzuzeigen

Kaushal Modi
quelle
0

helm hat Schnittstellen, die dieses Ziel erreichen können. Ich habe einen Gifcast aufgenommen, um das Helm- Sturzflug - Paket zu demonstrieren :

Nach dem Start der helm-swoopSuche kann ich entweder auf weniger Kandidaten eingrenzen, indem ich weitere durch Leerzeichen getrennte Token eingebe, oder drücken C-pund C-nzum nächsten wechseln und gleichzeitig im Zielpuffer scrollen.

Wasamasa
quelle
Wie ich in der Frage sagte, sind die ereignisbasierten Lösungen nicht das, was ich will, weil sie übereinstimmende Zeilen auflisten (und ich muss weiter dorthin gehen und mit der Liste interagieren), anstatt den anderen Puffer intakt zu halten und den Text darin hervorzuheben .
ShreevatsaR
Hmm, der andere Puffer bleibt intakt und kann Ihnen den Kontext anzeigen, aber wenn die Highlights das sind, wonach Sie suchen, ist Helm-Swoop möglicherweise eher Ihr Ding.
Wasamasa
OK, bearbeitet, um zu demonstrieren helm-swoop.
Wasamasa
Ich wünschte, ich könnte mich klarer machen. Während des gesamten Vorgangs möchte ich nicht, dass das andere Fenster jemals etwas anderes anzeigt, als es gerade anzeigt. Alles , was ich will , ist ein Tastendruck und sehen Sie treffen im anderen Fenster, wie es ist, die (erste, sagen wir) das Auftreten des aktuellen Worts in dem anderen Puffer. (Wenn sich mein Cursor in meinem Screenshot auf "Balken" im linken Puffer befindet, möchte ich eine Taste drücken und sehen, wo "Balken" im rechten Puffer vorkommt, wobei der rechte weiterhin angezeigt wird.) Entspricht Schlagen C-s C-w C-x o C-s C-s C-x o(was ich jetzt benutze und eigentlich in Ordnung zu sein scheint).
ShreevatsaR
Wenn das Ruder alle Vorkommen im anderen Puffer hervorheben könnte (während noch gescrollt wird, sodass das erste auf dem Bildschirm sichtbar ist), wäre dies besser als das Makro, das an die Sequenz dieser 8 Tastenanschläge gebunden ist. :-)
ShreevatsaR
0

Wie wäre es highlight-regexp, wenn Sie das aktuelle Symbol (oder Wort, Region usw.) im anderen Fenster markieren?

Hier sind einige Funktionen, die funktionieren könnten. Der erste findet das Symbol an der Stelle, springt dann zum anderen Fenster und hebt es hervor. Der zweite springt zum anderen Fenster und entfernt die Markierungen.

 (require 'thingatpt)

 (defun highlight-other-window ()
   (interactive)
   (let ((match (thing-at-point 'symbol t)))
     (when match
       (save-excursion
         (other-window 1)
         (highlight-regexp (regexp-quote match))
         (other-window 1)))))

 (defun unhighlight-other-window ()
   (interactive)
   (save-excursion
     (other-window 1)
     (unhighlight-regexp t) 
     (other-window 1)))

In beiden Fällen springt dies zurück, sodass das aktuelle Fenster am Ende aktiv bleibt. Sie sind sich nicht sicher, ob Sie das möchten, andernfalls lassen Sie den letzten other-windowAnruf aus.

Diese Funktionen könnten auch verbessert werden, indem nach dem aktiven Bereich gesucht und dieser abgeglichen wird. Umgang mit dem Fall, in dem kein anderes Fenster sichtbar ist; usw.

Glucas
quelle
Der highlight-frame-togglein einer anderen Antwort erwähnte Befehl scheint eine ausgefeiltere Version davon zu sein, also müssen Sie wohl nicht Ihren eigenen rollen.
Glucas