
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