Markieren eines Suchbegriffs ohne Bewegen des Cursors


15

Mit Vim starre ich manchmal eine Weile auf einen Abschnitt des Quellcodes und möchte plötzlich, dass eine Variable auf dem Bildschirm herausspringt. Das ist einfach: /<var>das hebt sie alle hervor. Mein Problem ist, dass die Suche häufig mein Fenster verschiebt, sodass ich den Quellcode nicht von derselben Stelle aus betrachte. Selbst wenn es nur um ein paar Zeilen verschoben ist, stört es mich immer noch, da ich einige Sekunden brauchen muss, um herauszufinden, wohin sich die Dinge bewegt haben.

Ist es möglich, einen Suchbegriff hervorzuheben, ohne den Cursor auf die nächste Übereinstimmung zu bewegen?


2
Nicht gerade eine Antwort, aber ich benutze nur zwei Backticks (``), um dorthin zu springen, wo ich vorher war.
Izkata

Antworten:


1

http://vim.wikia.com/wiki/VimTip1572

Wenn Sie dieses Plugin verwendet haben, können Sie die Funktionalität einfach aktivieren

\ m

Verwenden Sie dann eine NumPad-Taste, um diesem Wort überall eine Farbe zuzuweisen, ohne den Cursor zu bewegen.

1

Sie können viele verschiedene Markierungen gleichzeitig für viele verschiedene Wörter oder komplexere Suchmuster verwenden, wenn Sie dies wünschen.


Ich liebe dieses Plugin!
Andrew Wood

15

Die Antwort von skyblue zeigt den Kern der Idee, wie die normale Suchhervorhebung verwendet werden kann, um das zu erreichen, was Sie wollen.

Ich habe diese Technik erweitert, indem ich eine Tastenkombination erstellt habe, die ähnlich wie der *Befehl funktioniert , ohne jedoch zum nächsten Spiel zu wechseln.

Mein Dank geht an Garyjohn , der auf das expand()Äquivalent zur Wortauswahl hingewiesen hat *(um zu vermeiden, dass er sich *selbst verwendet und die Ansicht wiederherstellt). Dies vereinfacht den Code so weit, dass er direkt in die Zuordnung aufgenommen werden kann (ohne Verwendung einer Funktion). Ich habe auch eine Zuordnung hinzugefügt, die Teilwörtern (wie g*) entspricht.

:" The leader defaults to backslash, so (by default) this
:" maps \* and \g* (see :help Leader).
:" These work like * and g*, but do not move the cursor and always set hls.
:map <Leader>* :let @/ = '\<'.expand('<cword>').'\>'\|set hlsearch<C-M>
:map <Leader>g* :let @/ = expand('<cword>')\|set hlsearch<C-M>

1
Sie könnten die Anrufe winsaveview (), winrestview () und die Vermeidung von normal *durch den Ersatz let @/ = @/mit let @/ = expand("<cword>").
Garyjohn

@garyjohn: Ja, das ist besser. Ich war mir nicht sicher, ob es etwas gibt, das der von mir vorgenommenen Wortauswahl entspricht *, aber <cword>ist es das?
Chris Johnsen

13

Sie können das Suchregister auch auf die Variable einstellen, mit der Sie übereinstimmen möchten.

Stellen Sie zunächst sicher, dass die Suchhervorhebung aktiviert ist:

:set hlsearch

Dann können Sie das Suchregister einstellen mit:

:let @/="variable"

Dadurch werden alle Vorkommen von Variablen hervorgehoben, ohne zum nächsten Spiel zu springen.

Weitere Informationen finden Sie unter :help @/


7

Eine Möglichkeit besteht darin, den :matchBefehl zu verwenden, z.

:match Question '^R^W'

Dadurch wird das Wort unter dem Cursor mithilfe der Frage-Hervorhebungsgruppe hervorgehoben. Ich benutze oft die Fragengruppe, weil es auf meinem Terminal ein schönes Grün ist. Führen Sie aus, um die verfügbaren Markierungsgruppen anzuzeigen

:hi

Die ^Rund ^Wsind Strg-R bzw. Strg-W und werden durch das Wort unter dem Cursor ersetzt. Sehen

:help c_CTRL-R_CTRL-W

für mehr dazu. Sehen

:help :match

für mehr auf dem :matchBefehl. Um diese Hervorhebung zu löschen, führen Sie einfach aus

:match

ohne Argumente.


1

Zusätzlich zu:

 :set hlsearch

Du möchtest vielleicht:

 : set noincsearch

0

Ähnlich wie *wir haben:

[I ............................. it show where the word under the cursor appears

Ein Blick lohnt sich :h [I. Dort finden wir einige interessante Dinge, die mit Ihren Bedürfnissen zusammenhängen.

Es gibt eine ähnliche Frage zum Stapelüberlauf, bei der ich meine Antwort stelle (etwas vollständiger).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.