Ist es möglich, meine normale Suchhervorhebung nicht auszulösen, wenn die Suche als Bewegung verwendet wird?

7

Wenn ich in vim suche, möchte ich, dass meine Ergebnisse hervorgehoben und gut sichtbar sind. Deshalb gebe ich ihnen einen hellgelben Hintergrund und einen schwarzen Vordergrund in meinem .vimrc.

" When highlighting search terms, make sure text is contrasting colors
:highlight Search guibg=yellow guifg=black

(Dies ist für GUI-Versionen von vim wie MacVim oder Gvim; für die Befehlszeile würden Sie ctermbgund verwenden ctermfg.)

Aber ich benutze manchmal die Suche mit einem Befehl, wie in c/foo- "Vom Cursor zum nächsten Vorkommen von wechseln foo".

In diesem Fall möchte ich nicht, dass alle Vorkommen foohervorgehoben werden.

Kann ich die Hervorhebung nur in Fällen deaktivieren , in denen die Suche als Bewegung für einen Befehl verwendet wird?

Nathan Long
quelle
Wenn es keine Möglichkeit gibt, dies als Standard festzulegen, gibt es eine Möglichkeit, eine alternative Suche durchzuführen, die nicht hervorgehoben wird? Wie, statt c/foo, c//foowo //ein Nicht-Hervorhebung suchen?
Nathan Long

Antworten:

3

Diese naiven Zuordnungen scheinen zu helfen.

  • normale Suche

    Drehen Sie Hervorhebung auf , bevor die Suche zu tun:

    nnoremap / :set hls<CR>/
    
  • Bewegungssuche

    Deaktivieren Sie die Hervorhebung , bevor Sie die Suche durchführen:

    nnoremap v/ :set nohls<CR>v/
    nnoremap d/ :set nohls<CR>d/
    nnoremap y/ :set nohls<CR>y/
    nnoremap c/ :set nohls<CR>c/
    

Beachten Sie, dass Sie eine ähnliche Zuordnung für einrichten müssen ?.

romainl
quelle
Ich hatte noch keine Gelegenheit, diesen Vorschlag vollständig zu untersuchen, aber er könnte funktionieren und mich zumindest in die richtige Richtung weisen. Ich würde sagen, das verdient das Kopfgeld. :)
Nathan Long
1

So deaktivieren Sie die Hervorhebung von Suchvorgängen dauerhaft:

:set nohlsearch
(or)
:set nohls

Aber wahrscheinlich möchten Sie das Highlight beibehalten. Wenn Sie das Highlight jedoch vorübergehend entfernen möchten, geben Sie Folgendes ein:

:nohlsearch
(or)
:noh

Die aktuelle Suche wird nicht mehr hervorgehoben, bis Sie erneut suchen.

Auch wenn es nicht die perfekte Antwort für Sie ist, ist dies eine gute Problemumgehung, und das verwende ich.

Denilson Sá Maia
quelle
Eigentlich habe ich eine noch kürzere Verknüpfung zum "Löschen meiner aktuellen Suchhervorhebung": Ich drücke einfach die Eingabetaste, wenn ich mich im normalen Modus befinde. Diese Zeile befindet sich in meiner .vimrc : :nnoremap <CR> :nohlsearch<CR>/<BS>. Es löscht die Hervorhebung, startet eine neue Suche und dann Leerzeichen, um die Suche abzubrechen (wodurch die Suchleiste gelöscht wird, damit die Dinge wieder normal aussehen.) Das ist ziemlich einfach, aber ich bin so faul, dass ich vermeiden könnte, überhaupt treffen zu müssen eintreten, das würde mir gefallen. :)
Nathan Long
Ich habe eine noch einfachere Verknüpfung: Alt+/zugeordnet nnoremap <M-/> :nohlsearch<CR> (Hinweis: Alt+/funktioniert nicht auf einigen Terminals, funktioniert aber gut in gvim)
Denilson Sá Maia
Ich verstehe es nicht ganz. Was tippst du und was passiert?
Nathan Long
Ich habe das Remapping-Ding zu meinem hinzugefügt .vimrc. Wenn ich dann die Hervorhebung vorübergehend deaktivieren möchte, drücke ich Alt + /. Dies ist die Verknüpfung, der ich sie zugeordnet habe.
Denilson Sá Maia
Auch ... wie gesagt, es ist eine Problemumgehung, nicht gerade eine Lösung.
Denilson Sá Maia