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?

dr
źródło
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.

John O'M.
źródło
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.

Klamka
źródło
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>
    
Sheharyar
źródło
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.

Lindsay Haisley
źródło
2

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

 autocmd InsertEnter * :let @/=""
Kevin Edington
źródło
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
MichalH
źródło
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.

papiro
źródło
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.

12431234123412341234123
źródło
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

SergioAraujo
źródło
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.

Hunaphu
źródło