Nach einer Suche in Vim werden alle Vorkommen hervorgehoben. Wie kann ich das deaktivieren? Ich mache jetzt eine weitere Suche nach etwas Kauderwelsch, das nicht gefunden werden kann.
Gibt es eine Möglichkeit, die Hervorhebung nur vorübergehend zu deaktivieren und bei Bedarf wieder zu aktivieren?
nnoremap <esc> :noh<return><esc>
von @StewartJohnson vorgeschlagene Lösung funktioniert gut in GUI vim, verursacht jedoch Probleme mit Pfeiltasten und anderen ESC-codierten Schlüsseln, wenn vim in einem Terminal ausgeführt wird. Setzen Sie es nicht in Ihrem~/.vimrc
ohne es in Verpackungif has('gui_running')
...end
.Antworten:
So deaktivieren Sie die Hervorhebung bis zur nächsten Suche:
Oder deaktivieren Sie die Hervorhebung vollständig:
Oder um es umzuschalten:
quelle
:noh
funktioniert besser.set nohlsearch
die Hervorhebung auch für die nächsten Suchvorgänge deaktiviert wird. Das Verhalten von:noh
ist sehr unterschiedlich: Die Hervorhebung wird automatisch wieder aktiviert, wenn Sie eine neue Suche durchführen oder wenn Sie etwas im Zusammenhang mit der aktuellen Suche tun (z. B. wenn Sie eingebenn
, um zum nächsten Element zu gelangen).'\/'
map <Leader>/ :nohlsearch<CR>
Aus der VIM-Dokumentation
So löschen Sie das zuletzt verwendete Suchmuster:
Dadurch wird das Muster nicht auf eine leere Zeichenfolge festgelegt, da dies überall übereinstimmen würde. Das Muster wird wirklich gelöscht, wie beim Starten von Vim.
quelle
:command C let @/=""
Mit dieser Option können Sie eingeben, um die Suchzeichenfolge:C
zu löschen ... sehr schnell und hat keinen Einfluss auf die zukünftige Suche oder Hervorhebung.:he registers
). Vim verfügt über mehrere integrierte Register, die Text enthalten, manchmal für gerissene Daten, manchmal für die letzte Suche usw. Wenn Sie eine Suche durchführen, legt vim das Muster in das Register "/", auf das Sie verweisen@/
. Sie können auch Werte zu Registern zugeordnet werden,@regname=value
woregname
wird der der Name des Registers ist. So@/=""
wird einfach einstellen Register „/“ auf eine leere Zeichenfolge (außer , dass für die „/“ registriert vim wird die letzte Suche löschen , wenn es eine leere Zeichenfolge enthält).noremap <silent> <c-_> :let @/ = ""<CR>
Du kannst tun
oder
:nohlsearch
um die Suchhervorhebung vorübergehend bis zur nächsten Suche zu deaktivieren.quelle
Ich habe diese Antwort vor Jahren auf vim.org gefunden:
Fügen Sie Ihrer .vimrc Folgendes hinzu:
Drücken Sie daher nach Ihrer Suche im Befehlsmodus erneut die Eingabetaste, und die Hervorhebung verschwindet.
quelle
n
, um das nächste Vorkommen zu finden (das erneut hervorgehoben wird). Übrigens würde ich beim Scripting die abgekürzte Form vermeiden und stattdessen schreiben:nohlsearch
.Von http://twitter.com/jonbho/status/2194406821
Die zweite Zeile wird für die Zuordnung zum Escape-Schlüssel benötigt, da Vim intern Escape verwendet, um spezielle Schlüssel darzustellen.
quelle
Meine ursprüngliche Lösung (unten) war schmutzig und verschwenderisch. Ich benutze jetzt
:noh
Wie bei vielen Funktionen in Vim ist der richtige Weg oft nicht leicht zu erkennen.
- -
(MACH DAS NICHT)
Suchen Sie nach einer unwahrscheinlichen Zeichenfolge (mischen Sie die Schlüssel in der Startzeile):
/;alskdjf;
Dies funktioniert in vim und weniger und es ist einfacher, sich zu merken / zu tippen als die logisch sauberere Lösung von @ ShaunBouckaert, "um das zuletzt verwendete Suchmuster zu löschen":
:let @/ = ""
Ein möglicher Nachteil ist, dass es Ihrem Suchverlauf Junk hinzufügt.
quelle
:nohl
Befehl vertraut gemacht haben. Nachdem ich von letzterem erfahren hatte, hörte ich sofort auf, diese Suchen durchzuführen./$4
. Es ist nicht nur unwahrscheinlich, dass etwas passt, sondern tatsächlich völlig UNMÖGLICH.$
muss immer von einer neuen Zeile gefolgt werden oder das Ende der Datei sein, und 4 ist weder eine neue Zeile noch das Ende der Datei. (Der Grund für 4 ist nur, dass es auf der gleichen Taste ist, so dass es wirklich einfach ist, schnell zu tippen)Neu zugeordnet in meiner .vimrc.local-Datei, schnell und schmutzig, aber sehr funktional:
quelle
Auf diese Weise werde ich
:noh
in der Kommandozeile angezeigt, wenn ich enternach der Suche treffe .:Es ist, als würde man mit der Eingabe eines neuen Befehls beginnen, ihn Backspacelöschen und den Fokus wieder in das Editorfenster setzen.
quelle
[a-z]
und solche Zeichen verwenden.:<Backspace>
, können Sie einfach<silent>
nach dem hinzufügennnoremap
, um Vim anzuweisen, keine Ausgabe im Befehlsbereich anzuzeigen :nnoremap <silent> <cr> :noh<CR><CR>
.Die vorgeschlagenen
:noh
oder:nohlsearch
(z. B. die von Matt McMinn) Antworten sind richtig, um die Hervorhebung der Suche vorübergehend zu deaktivieren - wie in der ursprünglichen Frage gestellt.Ich dachte, ich würde ein Mapping beisteuern, das ich im Normalmodus nützlich finde:
Standardmäßig wird CtrlLin Vim der Bildschirm gelöscht und neu gezeichnet. Eine Reihe von Befehlszeilenprogrammen (hauptsächlich solche, die die GNU Readline-Bibliothek verwenden , z. B. Bash) verwenden dieselbe Tastenkombination, um den Bildschirm zu löschen. Diese Funktion ist nützlich, wenn ein im Hintergrund ausgeführter Prozess auf dem Terminal gedruckt wird und Teile des Vordergrundprozesses überschreibt.
Diese Zuordnung 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 CtrlLfür beide Aktionen zusammen zu verwenden, anstatt eine separate Zuordnung zum Deaktivieren der Suchhervorhebung zu erstellen.
NB: Wird
noremap
verwendet, anstattmap
wie sonst, wäre die Zuordnung rekursiv.Tipp: Normalerweise ordne ich neu Caps Lockzu Ctrl, um die Eingabe solcher Tastenkombinationen zu vereinfachen. Die Details hierfür hängen von Ihrer Wahl des Betriebssystems / Fenstersystems ab (und sind für diese Antwort nicht thematisch). Sowohl die folgenden Tipps enthalten Informationen zum Zuordnen Caps Lockzu Ctrlsowie Esc:
quelle
Ich
:noh
ordne im Allgemeinen dem Backslash-Schlüssel zu. Um die Hervorhebung wieder zu aktivieren, drücken Sie einfach nund es wird wieder hervorgehoben.quelle
Deaktivieren Sie die Suchhervorhebung dauerhaft
Übereinstimmungen werden nicht hervorgehoben, wenn Sie eine Suche mit durchführen /
Markierung bis zur nächsten Suche löschen
oder
:nohlsearch
(wird gelöscht, bis noder Ngedrückt wird)Markierung beim Drücken löschen ESC
Deaktivieren Sie die Markierung beim Drücken einer anderen Taste oder einer benutzerdefinierten Karte
Klare Markierungen beim Drücken \(Backslash)
Klare Highlights beim ESCzweimaligen Schlagen
quelle
nnoremap <silent> <esc> :noh<return><esc>
Lösung funktioniert gut in GUI vim, verursacht jedoch schwerwiegende Probleme mit Pfeiltasten und anderen ESC-codierten Tasten, wenn vim in einem Terminal ausgeführt wird. Setzen Sie es nicht in Ihrem~/.vimrc
ohne es in Verpackungif has('gui_running')
...end
. Fügen Sie auch das hinzu,<silent>
wodurch das Flashen des:noh
Befehls in der Statusleiste vermieden wird .Dies ist, was ich benutze (extrahiert aus vielen verschiedenen Fragen / Antworten):
Mit "double" Escentfernen Sie die Hervorhebung, aber sobald Sie erneut suchen, wird die Hervorhebung erneut angezeigt.
Eine andere Alternative:
Laut vim Dokumentation:
quelle
.vimrc
undnnoremap <silent> <Esc><Esc> :let @/=""<CR>
@/=""
hat den Nebeneffektn
, dass Ihre Suche nicht funktioniert. Ich bevorzuge,:noh
dass die vorherige Suche im Register zur Wiederverwendung bleibt.Deaktivieren der Hervorhebung bis zur nächsten Suche
quelle
Wenn Sie das incsearch.vim-Plugin installiert haben, gibt es eine Einstellung, mit der die Hervorhebung nach der Suche automatisch gelöscht wird:
quelle
Janus für VIM und GVIM hat eine Reihe von eingebauten Dingen für Neulinge wie mich, einschließlich
Welches ist genau das, was Sie brauchen. Geben Sie einfach
\hs
im normalen Modus ein. (Der Führungsschlüssel ist\
standardmäßig zugeordnet.)HTH.
quelle
Hierfür gibt es zwei 'must have'-Plugins:
Ctrl-l
für nohlsearch und neu zeichnen bildschirm.[oh
,]oh
undcoh
die Kontrolle hlsearch.quelle
co
umyo
in v2, es ist soyoh
. Siehe github.com/tpope/vim-unimpaired/blob/v2.0/doc/unimpaired.txt und github.com/tpope/vim-unimpaired/issues/150coh
funktioniert immer noch, obwohl es eine Meldung gibt, die vorschlägt,yoh
wenn Sie verwendencoh
Deaktivieren Sie die Hervorhebung, sobald Sie den Cursor bewegen:
Installieren Sie vim-cool . Es wurde erstellt, um dieses spezielle Problem zu beheben. Die Hervorhebung wird deaktiviert, sobald Sie den Cursor bewegen. Seien Sie jedoch gewarnt, es erfordert eine aktuelle vim-Version!
quelle
Dadurch wird das Suchhighlight nach
updatetime
Millisekunden Inaktivität gelöscht.updatetime
Der Standardwert ist 4000 ms oder 4 s, aber ich habe meinen auf 10 s eingestellt. Es ist wichtig zu beachten, dassupdatetime
dies mehr als nur dies tut. Lesen Sie daher die Dokumente, bevor Sie sie ändern.quelle
Wenn Sie die Hervorhebung schnell aktivieren / deaktivieren möchten, können Sie einen Schlüssel zuordnen
Fügen Sie einfach das obige Snippet in Ihre .vimrc-Datei ein.
Das ist für mich die bequemste Möglichkeit, das Suchhighlight mit einem singenden Tastenanschlag ein- und auszublenden
Weitere Informationen finden Sie in der Dokumentation unter http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches
quelle
Eine weitere Lösung durch Kombination von 2 Top-Antworten:
quelle
@/=""
hat den Nebeneffektn
, dass Ihre Suche nicht funktioniert. Ich bevorzuge,:noh
dass die vorherige Suche im Register zur Wiederverwendung bleibt. Sie können<F3>
sich mitnnoremap <F3> :noh<CR>
Ich persönlich mag es
esc
, dem Befehl Folgendes zuzuordnen:noh
:map <esc> :noh<cr>
Ich habe kürzlich einen ganzen Artikel über die Vim-Suche geschrieben : Wie man auf Vanilla Vim sucht und das beste Plugin, um die Suchfunktionen zu verbessern.
quelle
Ich benutze nur das einfache Nohl unten und es werden keine Plugins benötigt.
:nohl
quelle
Ich vermute, dass es bei der ursprünglichen Frage nicht darum ging, die Hervorhebung der Suche zu deaktivieren, sondern lediglich die Hervorhebung aus der letzten Suche zu löschen. Die Lösung für die Suche nach einem Kauderwelsch, die auf dem Originalplakat erwähnt wurde, ist eine, die ich seit einiger Zeit verwende, um Hervorhebungen aus einer früheren Suche zu entfernen, aber sie ist hässlich und umständlich.
Einige Vorschläge, die ich
nnoremap ...
zu ~ / .vimrc hinzugefügt habe, haben den Effekt, dass vim beim Start in den Ersetzungsmodus versetzt wird, was überhaupt nicht das ist, was ich will. Die einfachste Lösung, die ich gefunden habe, ist das Hinzufügen der Zeilezu meinem ~ / .vimrc. Dies entspricht dem KISS-Prinzip und beeinträchtigt die Pfeiltasten nicht, was bei Verwendung eines einzelnen <esc> der Fall ist. Im Befehlsmodus ist ein doppeltes <esc> erforderlich (oder ein dreifaches <esc> aus dem Einfüge- oder Ersetzungsmodus), um die Hervorhebung aus einer vorherigen Suche zu löschen. Aus Sicht der Benutzeroberfläche ist der Vorgang jedoch so einfach wie möglich.
quelle
nmap <esc><esc> :noh<return> - to turn off search highlighting and nmap <esc>` :set hlsearch<return> - to turn on search highlighting
Ich benutze folgendes in meinem
~/.vimrc
nnoremap <Leader><space> :noh<Enter>
Dies macht es sehr einfach und schnell, die aktuell hervorgehobene Suche zu löschen. Mein Leitschlüssel ist zugeordnet,
\
sodass die Aktion mit meinem rechten kleinen Finger und Daumen sehr einfach ausgeführt werden kann.quelle
Ich denke, das Mischen von @ShaunBouckaert und 19. März 09 um 16:22 Antworten ist ein guter Kompromiss:
Drücken Sie Enterund der hervorgehobene Text wird nicht mehr hervorgehoben, während die Suchhervorhebung weiterhin aktiviert ist.
quelle
Sie können : noremap verwenden , um das Suchergebnis wie folgt ein- oder auszuschalten
:noremap <F3> :set hls! hls?<CR>
quelle
Basierend auf der @ baruch-Even-Antwort können Sie den Suchbegriff ESCim normalen Modus durch zweimaliges Drücken löschen mit:
quelle
<esc>
funktioniert gut in GUI vim, verursacht jedoch schwerwiegende Probleme mit Pfeiltasten und anderen ESC-codierten Tasten, wenn vim in einem Terminal ausgeführt wird. Setzen Sie es nicht in Ihrem~/.vimrc
ohne es in Verpackungif has('gui_running')
...end
. Fügen Sie auch das hinzu,<silent>
wodurch das Flashen des:noh
Befehls in der Statusleiste vermieden wird .Ich mag es auch nicht. Ich fand es mühsam, die
:nohl
ganze Zeit einzutreten ... also habe ich die folgende Zuordnung in meine eingefügt.vimrc
Das erste Bit (
:nohl<cr>
) löscht die Hervorhebung; Das zweite Bit (:<backspace>
) ist ein Trick, um die Befehlszeile zu bereinigen . Die Suche befindet sich immer noch im Hintergrund. Wenn Sie sie also einfach drücken, wirdn
sie erneut hervorgehoben und zum nächsten Ereignis weitergeleitet.quelle
Ich habe dies meiner
vimrc
Datei hinzugefügt .command! H let @/=""
Nachdem Sie eine Suche durchgeführt haben und die Highlights aus Ihrer Suche löschen möchten, tun Sie dies einfach
:H
quelle
Alternativ können Sie Ihrer .vimrc-Datei eine Zuordnung hinzufügen als:
und dann können Sie drücken
jederzeit, um den markierten Text zu löschen
quelle