Wie kann ich die Hervorhebung von Wörtern im aktuellen Dokument löschen (z. B. nach der Suche nach einem Wort)?

61

Wenn Sie mit so etwas wie nach einem Wort in einer Datei suchen /console.log, werden alle Instanzen von console.loghervorgehoben.

Wenn Sie sich nicht mehr für diese interessieren, kann die Hervorhebung ablenken. Meine derzeitige Strategie zum Entfernen der Hervorhebung besteht darin, so etwas wie zu tun /asntehua. Gibt es eine richtige Möglichkeit, diese Worthervorhebung zu entfernen?

drs
quelle
2
Es gibt nichts schnelleres als zu tippen /skldafjlksjdf;)
Shahbaz
1
Fügen Sie folgende zu Ihrem .vimrc: :nnoremap <silent> <CR> :nohlsearch<CR><CR>. Drücken Sie im Befehlsmodus die Eingabetaste, und die Hervorhebung verschwindet.
Nilon

Antworten:

47

Als Alternative zu :nohmache ich gerne eine :let @/=""Zuordnung zu einer Tastenkombination.

Der Unterschied besteht darin , dass Sie :nohden Suchbegriff in das Suchregister verlässt, so nund Nim normalen Modus die Suche fortsetzen , indem Sie auf den nächsten / vorherigen Spiel und Wiederhervorhebung springen. Wenn Sie :let @/=""dagegen verwenden, wird die Nachricht ausgelöst, E25: No previous regular expressionund der Cursor bleibt an der Stelle, an der er sich befunden hat. Dies ist besonders praktisch, wenn Sie noch nichts darüber wissen ctrl- ound dies noch aus Versehen n.

Dies kann auch anders verwendet werden. Damit vim einen Text hervorhebt, ohne zu ihm zu springen, können Sie dies tun:let @/="some text"

In diesen Ausdrücken können Sie mit @ auf ein Register verweisen, und @ / ist das Register, das das letzte Suchmuster enthält.

John O'M.
quelle
31

Einfach eintippen

:noh<cr>

(Wobei <cr>ein Wagenrücklauf symbolisiert, dh Eingabetaste.) Die vollständige, nicht abgekürzte Version dieses Befehls lautet :nohlsearch.

Der Einfachheit halber können Sie eine Zuordnung wie z

nnoremap <Leader><space> :noh<cr>

in deinem .vimrc. Da mein Anführer Space ist, kann ich die Hervorhebung durch zweimaliges Tippen auf Space löschen. (Standardmäßig <Leader>ist festgelegt auf \)

Eine andere beliebte Option ist, es an Ctrl+ zu binden L, da dies mehr oder weniger die Standardeinstellung für "Terminalbildschirm neu zeichnen" ist, was ungefähr so ​​ist, wie Sie es tun:

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

Dies hat den Nebeneffekt, dass auch der Terminalbildschirm neu gezeichnet wird, was langsam sein kann, wenn Ihre Terminalverbindung langsam ist (was heutzutage sehr selten ist).
HINWEIS: Wenn Sie tpope / vim-sensible verwenden , bietet es bereits die <C-l>oben aufgeführte Zuordnung.

Türknauf
quelle
21

Deaktivieren Sie die Suchmarkierung dauerhaft

Übereinstimmungen werden bei jeder Suche mit nicht hervorgehoben /

:set nohlsearch

Markierung bis zur nächsten Suche löschen

:noh

oder :nohlsearch(löscht, bis noder Ngedrückt wird oder eine neue Suche durchgeführt wird)


Klare Hervorhebung beim Drücken von ESC

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

Klare Hervorhebung beim Drücken einer anderen Taste oder einer benutzerdefinierten Karte

  • Deutliche Hervorhebungen beim Drücken \(Backslash)

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

    nnoremap <esc><esc> :noh<return>
    
Sheharyar
quelle
Ich fügte hinzu nnoremap <esc> :noh<return><esc>, vimrcaber es funktioniert nicht. Ich muss jkfliehen, könnte das der Grund sein?
Mbigras
Was ist genau los? Vielleicht haben Sie den ESCSchlüssel deaktiviert ?
Sheharyar
Durch Drücken jkvon wird der hervorgehobene Text nicht umgeschaltet (funktioniert jedoch weiterhin als Esc). Durch Drücken von my Escoben links auf meiner Tastatur wird der hervorgehobene Text ausgeblendet.
Mbigras
Dann haben Sie genau dort Ihre Antwort. jkESCmapnoremap
Platzieren
Das erneute Zuordnen von Escape-Zeichen kann Probleme mit den Pfeiltasten verursachen, und ich würde andere Szenarien annehmen, in denen ein Escape-Code verwendet wird. vi.stackexchange.com/questions/11144/…
Rob Mosher
2

Nachdem ich einige Lösungsvorschläge für Verknüpfungen in ~ / vimrc ausprobiert hatte, entschied ich mich, sie einfach nmap <esc><esc> :noh<return>zu ergänzen . Das doppelte Escape verhindert Störungen der Funktion der Pfeiltasten. Wenn Sie sich im Einfügemodus befinden, ist ein dreifaches Escape erforderlich. Dies ist schnell auszuführen und leicht zu merken.

Lindsay Haisley
quelle
2

Ich habe meiner .vimrc-Datei eine Autocmd-Datei hinzugefügt, die die Hervorhebungen bei jedem Wechsel in den Einfügemodus entfernt.

 autocmd InsertEnter * :let @/=""
Kevin Edington
quelle
2
Verwenden nohlstatt let @/=""wäre ein besserer Ansatz, da Sie dann Ihre aktuelle Suche nicht behindern.
Jamessan
@jamessan es funktioniert mit dem :let @/=""Befehl aber autocmd InsertEnter * :nohaus irgendeinem Grund nicht, keine Ahnung warum?
17.
1
Eigentlich habe ich den Grund gefunden: laut der Dokumentation "Die Suchhervorhebung kann nicht mit": nohlsearch "in einem Autocommand abgeschaltet werden" - Details des Grundes
tobek
1

Wenn Sie nach einer Suche keine Hervorhebung vornehmen möchten, können Sie dies verwenden (besser):

:set nohls

oder das (schlimmer):

:hi Search NONE
MichalH
quelle
1

Bei der Eingabe habe :help incsearchich im Handbuch Folgendes gefunden:

augroup vimrc-incsearch-highlight
  autocmd!
  autocmd CmdlineEnter /,\? :set hlsearch
  autocmd CmdlineLeave /,\? :set nohlsearch
augroup END

Ich habe mich damit abgefunden, da andere Lösungen, die ich ausprobiert habe, nicht perfekt waren und diese Lösung sozusagen "direkt aus dem Maul des Pferdes" kommt. Es werden alle Suchtreffer im aktuellen Fenster hervorgehoben.

papiro
quelle
1
/asdfasdf

Dies hat den Vorteil, dass Sie es nicht genau eingeben müssen. Der Nachteil ist, dass in einer 4096-Byte-Datei eine Wahrscheinlichkeit von 1: 68719476736 besteht, dass dies nicht funktioniert und der Cursor an eine andere Stelle springt. Diese Chance erhöht sich für größere Dateien.

12431234123412341234123
quelle
1
Willkommen auf der vi SE! Ich denke, der String asdfasdfist insofern besonders, als er in praktischen Dateien weitaus häufiger vorkommt als eine zufällig ausgewählte 8-Byte-Sequenz. Somit ist die Chance weitaus höher. :-)
user259412
0

Ich halte es überhaupt nicht für eine gute Sache, hls zu entfernen. Wie wäre es, wenn Sie das Erstellen einer einfachen Verknüpfung (boolean) in meinem Fall einfach aktivieren oder deaktivieren würden ->

" to reselect use gv in normal mode
nnoremap <S-F11> <ESC>:set hls!<cr>
inoremap <S-F11> <C-o>:set hls!<cr>
vnoremap <S-F11> <ESC>:set hls!<cr> <bar> gv

Die Magie geschieht wegen " !" am Ende der Einstellung

SergioAraujo
quelle
0

Ich finde, dass es sehr selten ist, dass ich überhaupt Hervorheben möchte, und wenn ich Hervorheben muss, ist es nur für einen kurzen Moment. Meine Lösung ist

nnoremap <Leader>/ set hls!<CR>

Dies aktiviert die Hervorhebung, wenn Sie drücken, \/und deaktiviert sie erneut, wenn Sie erneut drücken. Dies ermöglicht den einfachen Zugriff auf Hervorhebungen in seltenen Fällen, wenn Sie diese benötigen.

Hunaphu
quelle