2324 Stimmen

Vim löscht die Markierung der letzten Suche

Nachdem ich eine Suche in Vim durchgeführt habe, werden alle Vorkommen hervorgehoben. Wie kann ich das abschalten? Ich suche nun erneut nach etwas Kauderwelsch, das nicht gefunden werden kann.

Gibt es eine Möglichkeit, die Hervorhebung vorübergehend zu deaktivieren und sie bei Bedarf wieder zu aktivieren?

7 Stimmen

:set invhlsearch deaktiviert die Hervorhebung, wenn sie bereits hervorgehoben ist, und aktiviert sie, wenn sie es nicht ist. Sie können es mit Shift-H verbinden.

1 Stimmen

@StewartJohnson Wenn ich das in meinen .vimrc-Dateien mache, scheint es mit :set mouse=a zu interferieren/zu brechen. Irgendeine Idee warum? Dieser Fehler tritt nur in iTerm2 auf

0 Stimmen

Ich habe im Laufe der Jahre so viel Kauderwelsch getippt, um diese Markierung zu löschen (wirklich ineffizient bei Textdateien mit mehreren GB). Die Kauderwelsch-Suche ist im Grunde eine zweite Suche, die Rechenzeit vergeudet. Gute Frage!

47voto

millerdev Punkte 9423

Meine ursprüngliche Lösung (siehe unten) war schmutzig und verschwenderisch. Ich verwende jetzt :noh

Wie bei vielen Funktionen in Vim ist der richtige Weg oft nicht leicht zu finden.

--

(TUN SIE DIES NICHT)

Suche nach einer unwahrscheinlichen Zeichenfolge (drücke die Tasten in der ersten Reihe):

/;alskdjf;

Dies funktioniert in vim und less, und es ist einfacher zu merken/einzutippen als @ShaunBouckaerts logisch sauberere Lösung "das zuletzt verwendete Suchmuster zu löschen":

:let @/ = ""

Ein möglicher Nachteil besteht darin, dass Ihr Suchverlauf mit Junk-Einträgen versehen wird.

25 Stimmen

Dies ist nicht nur eine unsaubere Lösung (die ich selbst bis jetzt benutzt habe, nichts für ungut), ein weiterer Nachteil ist, dass es ein hässliches rotes Banner mit der Aufschrift "Muster nicht gefunden" am unteren Rand des Fensters hinzufügt, was fast so ärgerlich ist wie die Hervorhebung selbst und weitere Aktionen erfordert, um verworfen zu werden (z. B. "Suche + Rücktaste").

6 Stimmen

Es kann auch ein paar Sekunden dauern, da es sucht tatsächlich den gesamten Rest der Datei. Das ist wirklich ärgerlich, wenn die Datei groß ist. Natürlich könnten Sie Ihre aktuelle Position markieren, an den Anfang springen und rückwärts nach einem Zeichen suchen, aber das ist ähnlich unsauber.

0 Stimmen

Ja, ich verwende auch diese hässliche Lösung, aber ich verwende immer "/qwe", das aus irgendeinem Grund nie etwas in irgendeiner Datei findet.

42voto

sjas Punkte 16831
nnoremap <cr> :noh<CR><CR>:<backspace>

Auf diese Weise werde ich die :noh die in der Befehlszeile angezeigt wird, wenn Sie auf enter nach der Suche.

: ist wie der Beginn der Eingabe eines neuen Befehls, Backspace löscht es und setzt den Fokus zurück in das Editorfenster.

7 Stimmen

Ich danke Ihnen. Das ":noh" unten links hat mich verrückt gemacht, verdammte Zwangsstörung.

0 Stimmen

Ich habe versucht, es auf Shifted Cr zu mappen, indem ich nnoremap <S-cr> :noh<CR><CR> gemacht habe, aber es hat nicht funktioniert, wissen Sie, warum es nicht funktioniert?

0 Stimmen

Ich vermute, dass man Verschiebung und Rückgabe nicht kombinieren kann, aber ich habe ehrlich gesagt keine Ahnung.

38voto

Anthony Geoghegan Punkte 10795

Die Antworten, die vorschlagen :noh o :nohlsearch (z. B. die von Matt McMinn) sind korrekt für vorübergehend Deaktivierung der Suchhervorhebung - wie in der ursprünglichen Frage gefordert.

Ich dachte, ich würde ein Mapping beisteuern, das ich im Normalmodus nützlich finde:

nnoremap <C-L> :nohlsearch<CR><C-L>

Standardmäßig, CtrlL in Vim löscht und zeichnet den Bildschirm neu. Eine Anzahl von Kommandozeilen-Programmen (meistens diejenigen, die die GNU Readline-Bibliothek (z. B. Bash) verwenden dieselbe Tastenkombination, um den Bildschirm zu löschen. Diese Funktion ist nützlich, wenn ein im Hintergrund laufender Prozess in das Terminal druckt und dabei Teile des Vordergrundprozesses überschreibt.

Diese Abbildung im Normalmodus löscht auch die Hervorhebung des letzten Suchbegriffs, bevor der Bildschirm neu gezeichnet wird. Ich finde, die beiden Funktionen ergänzen sich und es ist praktisch, eine davon zu verwenden CtrlL für beide Aktionen zusammen, anstatt eine separate Zuordnung für die Deaktivierung der Suchhervorhebung zu erstellen.

NB: noremap verwendet wird, anstatt map da die Zuordnung sonst rekursiv wäre.

Tipp: Ich überarbeite normalerweise Caps Lock a Ctrl um die Eingabe solcher Tastenkombinationen zu erleichtern; die Details dazu hängen von der Wahl des Betriebssystems/Fenstersystems ab (und sind für diese Antwort nicht relevant). Die beiden folgenden Tipps enthalten Informationen zum Mapping Caps Lock a Ctrl wie auch Esc :

35voto

avocade Punkte 1303

Umgestellt auf in meiner .vimrc.local-Datei, schnell und schmutzig, aber sehr funktionell:

" Clear last search highlighting
map <Space> :noh<cr>

30voto

Sheharyar Punkte 69702

Suchhervorhebung dauerhaft deaktivieren

Die Treffer werden nicht hervorgehoben, wenn Sie eine Suche mit /

:set nohlsearch

Markierung bis zur nächsten Suche löschen

:noh

o :nohlsearch (löscht bis n o N gedrückt wird)


Löschen der Markierung beim Drücken von ESC

nnoremap <esc> :noh<return><esc>

Löschen der Markierung beim Drücken einer anderen Taste oder einer benutzerdefinierten Karte

  • Deutliche Hervorhebungen beim Drücken \ (Backslash)

    nnoremap \ :noh<return>
  • Klare Highlights beim Schlagen ESC zweimal

    nnoremap <esc><esc> :noh<return>

6 Stimmen

El nnoremap <silent> <esc> :noh<return><esc> Lösung funktioniert gut in der GUI vim, aber verursacht schwere Probleme mit Pfeiltasten und anderen ESC-kodierten Tasten, wenn vim in einem Terminal läuft. Stecken Sie es nicht in Ihr ~/.vimrc ohne Umhüllung in if has('gui_running') ... end . Erwägen Sie auch das Hinzufügen der <silent> wodurch das Blinken der :noh in der Statusleiste.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X