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!

3voto

ricardo Punkte 7695

Mir gefällt das auch nicht. Ich fand es lästig, in die :nohl die ganze Zeit ... also habe ich die folgende Zuordnung in mein .vimrc

noremap <C-_> :nohl<cr>:<backspace>

Das erste Bit ( :nohl<cr> ) löscht die Hervorhebung; das zweite Bit ( :<backspace> ) ist ein Trick, um sauber die Befehlszeile. Die Suche findet weiterhin im Hintergrund statt, wenn Sie also einfach auf n wird das nächste Ereignis hervorgehoben und Sie gelangen zum nächsten.

3voto

ardnew Punkte 1880

Definieren Sie Mappings für beide Verhaltensweisen, denn beide sind nützlich!

  • Löschen Sie den Suchpuffer vollständig (z. B. durch Drücken von n für das nächste Spiel wird no Suche fortsetzen)
  • Suchpuffer beibehalten und Hervorhebung der Suchergebnisse ein/aus/ein/... umschalten (z. B. durch Drücken von n setzt die Suche fort, aber die Hervorhebung basiert auf dem aktuellen Status des Umschalters)

    " use double-Esc to completely clear the search buffer nnoremap <silent> <Esc><Esc> :let @/ = ""<CR> " use space to retain the search buffer and toggle highlighting off/on nnoremap <silent> <Space> :set hlsearch!<CR>

0 Stimmen

Wenn ich also <Esc> gefolgt von einer Pfeiltaste drücke, wird der Pufferinhalt durcheinander gebracht, weil das Esc am Anfang der Pfeiltaste mit dem ersten <Esc>, das ich gedrückt habe, kombiniert wird und vim dann mit dem Rest der Pfeiltastenfolge zurückbleibt, was Müll ist. Und nein, ich bin nicht bereit, die Pfeiltasten aufzugeben für hjkl :)

0 Stimmen

@Eric Ich kann das Problem mit gVim 8.2.2824 nicht reproduzieren. Könnten Sie das etwas näher erläutern? Versuchen Sie es auch mit preceed <silent> con <nowait>

0 Stimmen

Unglücklicherweise ist das Mapping <esc> führt in der Regel zu einer lästigen Verzögerung beim Verlassen des Einfügemodus. Siehe vi.stackexchange.com/questions/16148/ .

3voto

dinigo Punkte 5732

Basierend auf der Antwort von @baruch-even, können Sie den Suchbegriff auf ESC Doppelt drücken, während in normal Modus mit:

nnoremap <esc> :let @/ = ""<return><esc>
nnoremap <esc>^[ <esc>^[

0 Stimmen

Ich denke, die zweite Bindung ist in Ordnung, aber die erste ist gefährlich. Neuzuordnung <esc> funktioniert gut in der GUI vim, aber verursacht schwere Probleme mit Pfeiltasten und anderen ESC-kodierten Tasten, wenn vim in einem Terminal läuft. Legen 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.

3voto

Ekans Punkte 831

Ich denke, das Mischen von @ShaunBouckaert und 19. März '09 um 16:22 Antworten ist ein guter Kompromiss:

" Reset highlighted search
nnoremap <CR> :let @/=""<CR><CR>

Presse Enter und der markierte Text wird nicht mehr hervorgehoben, während die Suchhervorhebung weiterhin aktiviert ist.

2voto

Cui Mingda Punkte 753

Jede Lösung von nohlsearch wird nicht bevorzugt, was ist mit next search? Die beste Antwort wird durch let @/ = "" erstellt, aber ich mag die Zuordnung mit der Funktionstaste auf dem Mac nicht, also hier ist meine:

let mapleader=','
let g:mapleader=','
nnoremap <leader>cs :let @/ = ""<cr>

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