Jak mogę wyczyścić podświetlanie słów w bieżącym dokumencie (np. Po wyszukiwaniu słowa)?


61

Kiedy wyszukujesz słowo w pliku z czymś podobnym /console.log, wszystkie wystąpienia console.logsą podświetlone.

Gdy już Cię to nie interesuje, wyróżnianie może być rozpraszające. Moja obecna strategia usuwania wyróżnienia polega na zrobieniu czegoś takiego /asntehua. Czy istnieje właściwy sposób na usunięcie podświetlenia tego słowa?


2
Nie ma nic szybszego do pisania niż /skldafjlksjdf;)
— Shahbaz

1
Dodaj poniższe linie do swojej .vimrc: :nnoremap <silent> <CR> :nohlsearch<CR><CR>. Wciśnij klawisz Return w trybie poleceń, a podświetlenie zniknie.
— nilon

Odpowiedzi:


47

Alternatywnie :noh, lubię :let @/=""mapować do skrótu klawiaturowego.

Różnica polega na tym, że :nohopuszcza termin wyszukiwania w rejestrze poszukiwanych, tak ni Nw trybie normalnym wznowić wyszukiwanie skoki do następnego / poprzedniego meczu i ponownego podświetlenia. :let @/=""Z drugiej strony użycie wiadomości powoduje wyświetlenie wiadomości E25: No previous regular expressioni pozostawia kursor tam, gdzie była , co jest szczególnie wygodne, jeśli jeszcze nie wiesz ctrl- ojeszcze i przypadkowo trafiłeś n.

Można to również wykorzystać w inny sposób. Aby vim podświetlił jakiś tekst bez przechodzenia do niego, możesz:let @/="some text"

W tych wyrażeniach @ pozwala odwoływać się do rejestru, a @ / jest rejestrem zawierającym ostatni wzorzec wyszukiwania.


31

Po prostu wpisz

:noh<cr>

(Gdzie <cr>symbolizuje powrót karetki, tj. Enter.) Pełna wersja tej komendy nie jest skrócona :nohlsearch.

Dla wygody możesz mieć mapowanie, takie jak

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

w twoim .vimrc. Ponieważ moim liderem jest Space, pozwala mi to wyczyścić zaznaczenie po prostu dotykając spacji dwa razy. (Domyślnie <Leader>jest ustawiony na \)

Inną popularną opcją jest powiązanie go z Ctrl+ L, ponieważ jest to mniej więcej domyślna opcja „przerysowanego ekranu terminala”, co jest mniej więcej tym, co robisz:

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

Ma to efekt uboczny również odświeżanie ekranu terminala, który może być powolna jeśli połączenie terminal jest powolny (co jest bardzo rzadkie w dzisiejszych czasach).
UWAGA: Jeśli używasz tpope / vim-sensible, to już oferuje <C-l>mapowanie wymienione powyżej.


21

Wyłącz podświetlanie wyszukiwania na stałe

Dopasowania nie będą podświetlane przy każdym wyszukiwaniu za pomocą /

:set nohlsearch

Wyczyść zaznaczenie do następnego wyszukiwania

:noh

lub :nohlsearch(czyści aż nlub Njest wciśnięty lub świeży Wyszukiwanie odbywa)


Wyczyść zaznaczenie po naciśnięciu ESC

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

Usuń zaznaczenie po naciśnięciu innego klawisza lub mapy niestandardowej

  • Wyczyść podświetlenia po naciśnięciu \(ukośnik odwrotny)

    nnoremap \ :noh<return>
    
  • Wyczyść zaznaczenia po ESCdwukrotnym trafieniu

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

Dodałem nnoremap <esc> :noh<return><esc>do mojego, vimrcale to nie działa. Mam jkodwzorowane uciec, to może być, dlaczego?
— mbigras

Co się właściwie dzieje? Może wyłączyłeś ESCklucz?
— Sheharyar

naciśnięcie jknie wyłącza podświetlonego tekstu (ale nadal działa jako Esc). Naciśnięcie my Escw lewym górnym rogu klawiatury powoduje wyłączenie podświetlonego tekstu.
— mbigras

Masz więc swoją odpowiedź. Umieść jkmapę pod ESCmapą i upewnij się, że używasz prostej mapzamiastnoremap
— Sheharyar

Zmiana odwzorowania zmiany znaczenia może powodować problemy z klawiszami strzałek, i zakładam inne scenariusze, które używają kodu zmiany znaczenia. vi.stackexchange.com/questions/11144/…
— Rob Mosher

2

Po wypróbowaniu kilku sugerowanych rozwiązań dla skrótów do tego w ~ / vimrc, postanowiłem po prostu go dodać nmap <esc><esc> :noh<return>. Podwójna ucieczka zapobiega zakłóceniom w działaniu klawiszy strzałek. Jeśli jesteś w trybie wstawiania, konieczna jest potrójna ucieczka. Jest to szybkie do wykonania i łatwe do zapamiętania.


2

Dodałem autocmd do mojego .vimrc, który usuwa podświetlenie za każdym razem, gdy wchodzisz w tryb wstawiania.

 autocmd InsertEnter * :let @/=""

2
Używanie nohlzamiast let @/=""byłoby lepszym rozwiązaniem, ponieważ odtąd nie blokujesz bieżącego wyszukiwania.
— jamessan

@jamessan działa z :let @/=""poleceniem, ale autocmd InsertEnter * :nohz jakiegoś powodu nie ma, jakiś pomysł, dlaczego?
— tobek

1
Właściwie znalazłem przyczynę: zgodnie z dokumentami „Podświetlania wyszukiwania nie można wyłączyć za pomocą„: nohlsearch ”w automatycznej komendzie” - szczegóły: vimdoc.sourceforge.net/htmldoc/autocmd.html#autocmd-searchpat
— tobek

1

Jeśli nie chcesz wyróżniać po żadnym wyszukiwaniu, możesz użyć tego (lepiej):

:set nohls

lub to (gorzej):

:hi Search NONE

1

Podczas pisania :help incsearchznalazłem następujące instrukcje:

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

którego zrezygnowałem, ponieważ inne rozwiązania, które wypróbowałem, nie były idealne, a takie rozwiązanie pochodzi „prosto z pyska konia”, że tak powiem. Podświetla wszystkie pasujące wyszukiwania w bieżącym oknie.


1
/asdfasdf

Ma to tę zaletę, że nie trzeba wpisywać go dokładnie. Wadą jest to, że w pliku 4096 bajtów istnieje szansa około 1: 68719476736, że to nie działa, a kursor przeskoczy w inne miejsce. Ta szansa wzrasta w przypadku większych plików.


1
Witamy na vi SE! Myślę, że ciąg asdfasdfjest wyjątkowy w tym sensie, że zdarza się często w praktycznych plikach, niż w losowo wybranej 8-bajtowej sekwencji. Zatem szansa jest znacznie większa. :-)
— user259412

0

Nie sądzę, aby usunięcie hls w ogóle byłoby dobrą rzeczą, a co z ułatwieniem włączenia lub wyłączenia utworzenia łatwego skrótu (boolean) W moim przypadku ->

" 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

Magia dzieje się z powodu „ !” na końcu ustawienia


0

Uważam, że bardzo rzadko w ogóle chcę wyróżniać, a kiedy muszę je podkreślać, to tylko na krótką chwilę. Moje rozwiązanie to

nnoremap <Leader>/ set hls!<CR>

Umożliwia to podświetlanie po naciśnięciu \/i wyłącza je ponownie po ponownym naciśnięciu. Zapewnia to łatwy dostęp do wyróżniania w rzadkich przypadkach, gdy jest to potrzebne.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.