Hervorheben eines Suchbegriffs ohne Bewegen des Cursors

Hervorheben eines Suchbegriffs ohne Bewegen des Cursors

Bei der Verwendung von Vim ertappe ich mich manchmal dabei, wie ich eine Weile auf einen Abschnitt des Quellcodes starre und plötzlich möchte, dass eine Variable auf dem Bildschirm hervorspringt. Das ist einfach: /<var>Dadurch werden sie alle hervorgehoben. Mein Problem ist, dass die Suche meistens mein Fenster verschiebt, sodass ich den Quellcode nicht von derselben Stelle aus betrachte. Selbst wenn es nur um ein paar Zeilen verschoben ist, verwirrt es mich trotzdem, da ich einige Sekunden brauche, um herauszufinden, wohin die Dinge verschoben wurden.

Ist es möglich, einen Suchbegriff hervorzuheben, ohne den Cursor zum nächsten Treffer zu bewegen?

Antwort1

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

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

\M

Weisen Sie diesem Wort dann überall mit einer Ziffernblocktaste eine Farbe zu, ohne den Cursor zu bewegen.

1

Sie können viele verschiedene Hervorhebungen gleichzeitig für viele unterschiedliche Wörter oder, wenn Sie möchten, komplexere Suchmuster verwenden.

Antwort2

skyblues Antwortzeigt den Kern der Idee, wie Sie die normale Suchhervorhebung verwenden, um das gewünschte Ergebnis zu erzielen.

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

Mein Dank giltAbonnierenfür den Hinweis auf dieexpand()entspricht *der Wortauswahl von (um die Verwendung *selbst und die Wiederherstellung der Ansicht zu vermeiden). Dies vereinfacht den Code so weit, dass er direkt in die Zuordnung eingefügt werden kann (erübrigt die Verwendung einer Funktion). Ich habe auch eine Zuordnung hinzugefügt, die Teilwörter abgleicht (wie g*).

:" 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>

Antwort3

Sie können das Suchregister auch auf die Variable einstellen, die Sie abgleichen möchten.

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

:set hlsearch

Anschließend können Sie das Suchregister wie folgt festlegen:

:let @/="variable"

Dadurch werden alle Vorkommen der Variablen hervorgehoben, ohne zur nächsten Übereinstimmung zu springen.

Weitere Informationen finden Sie unter:help @/

Antwort4

Zusätzlich zu:

 :set hlsearch

Du möchtest vielleicht:

 : set noincsearch

verwandte Informationen