Jak mogę zaznaczyć wszystkie wystąpienia wybranego słowa w GVim, jak w Notepad ++?
Jak mogę zaznaczyć wszystkie wystąpienia wybranego słowa w GVim, jak w Notepad ++?
Odpowiedzi:
W trybie normalnym:
:set hlsearch
Następnie wyszukać wzór z komendy /
w trybie normalnym lub <Ctrl>o
następuje /
w trybie Insert. *
w trybie normalnym wyszuka następne wystąpienie słowa pod kursorem. Ta hlsearch
opcja podświetli je wszystkie, jeśli są ustawione. #
wyszuka poprzednie wystąpienie słowa.
Aby usunąć wyróżnienie poprzedniego wyszukiwania:
:nohlsearch
Możesz mapować :nohlsearch<CR>
do jakiegoś wygodnego klucza.
*
lub #
by <Ctrl>o
w trybie normalnym.
:nohlsearch
możesz po prostu użyć:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
do przełączania między podświetleniem a usunięciem podświetlenia według <F4>
.
*
Klucz zaprezentuje wszystkie wystąpienia tego słowa, które jest pod kursorem.
&hlsearch
jest włączony.
#
.
Wiem, że to naprawdę stare pytanie, ale jeśli ktoś jest zainteresowany tą funkcją, może sprawdzić ten kod http://vim.wikia.com/wiki/Auto_highlight_current_word_when_idle
" Highlight all instances of word under cursor, when idle.
" Useful when studying strange source code.
" Type z/ to toggle highlighting on/off.
nnoremap z/ :if AutoHighlightToggle()<Bar>set hls<Bar>endif<CR>
function! AutoHighlightToggle()
let @/ = ''
if exists('#auto_highlight')
au! auto_highlight
augroup! auto_highlight
setl updatetime=4000
echo 'Highlight current word: off'
return 0
else
augroup auto_highlight
au!
au CursorHold * let @/ = '\V\<'.escape(expand('<cword>'), '\').'\>'
augroup end
setl updatetime=500
echo 'Highlight current word: ON'
return 1
endif
endfunction
najprostszy sposób, wpisz w trybie normalnym *
Mam też te mapowania do włączania i wyłączania
"highligh search enabled by default
set hlsearch
"now you can toggle it
nnoremap <S-F11> <ESC>:set hls! hls?<cr>
inoremap <S-F11> <C-o>:set hls! hls?<cr>
vnoremap <S-F11> <ESC>:set hls! hls?<cr> <bar> gv
Wybierz słowo, klikając je
set mouse=a "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>
Bonus: CountWordFunction
fun! CountWordFunction()
try
let l:win_view = winsaveview()
let l:old_query = getreg('/')
let var = expand("<cword>")
exec "%s/" . var . "//gn"
finally
call winrestview(l:win_view)
call setreg('/', l:old_query)
endtry
endfun
" Bellow we set a command "CountWord" and a mapping to count word
" change as you like it
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <f3> :CountWord<CR>
Zaznaczanie wyrazów myszką i od razu liczenie wystąpień: OBS: Zauważ, że w tej wersji na końcu mamy komendę "CountWord"
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap * *``cgn
innoremap # #``cgN
*
wpisaniu wyłączyć podświetlenie?
:noh
lub:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
i nnoremap <silent> # :execute "normal! #n"<cr>
? Po prostu podświetlają słowo pod kursorem, ale nie przenoszą go do następnego wystąpienia.
Rozwiązania oparte na wyszukiwaniu ( *, /...) przesuwają kursor, co może być niefortunne.
Alternatywą jest użycie rozszerzonej wtyczki mark.vim , a następnie uzupełnij, .vimrc
aby podświetlić wyzwalacz dwukrotnym kliknięciem (nie wiem, w jaki sposób wybór klawiatury może wywołać polecenie):
"Use Mark plugin to highlight selected word
map <2-leftmouse> \m
Pozwala na wiele wyróżnień, trwałości itp.
Aby usunąć wyróżnienie:
:Mark
(wyłącz do następnego wyboru):MarkClear
:set noincsearch
. Moim zdaniem jest to jedna z najbardziej irytujących funkcji Vima i jedna z pierwszych rzeczy, które wyłączam przy nowych instalacjach.
*
bezwarunkowo przesunie kursor. I nie rozumiem, jakie to incsearch
może być irytujące, ponieważ jest to tylko „spojrzenie w przyszłość”, wykonywanie bieżącego wyszukiwania bez faktycznej zmiany pozycji.
incsearch
uniemożliwi ruch, ale szybki test potwierdza, że masz rację. Przepraszam. Jednakże, jest to bardzo proste, aby utworzyć odwzorowanie który uniemożliwia ruch: :nnoremap * *N
. Nie mogę uwierzyć, że nie denerwuje Cię to, że podczas wyszukiwania kursor przeskakuje po całym ekranie. Ale ... te rzeczy są całkowicie subiektywne. Vive la différence ;-)
:let @/='hilight_this'
, zakładając, że masz hlsearch
włączone. Podświetla tekst bez przeskakiwania i nie musisz zmieniać istniejących ustawień. Spowoduje to zmianę wartości, która jest obecnie przechowywana w rejestrze wyszukiwania.
Najpierw (lub w twoim .vimrc):
:set hlsearch
Następnie umieść kursor nad słowem, które chcesz wyróżnić, i naciśnij *
.
hlsearch
oznacza podświetlenie wszystkich wystąpień bieżącego wyszukiwania i *
oznacza wyszukiwanie słowa pod kursorem.
Najpierw upewnij się, że hlsearch jest włączone, wydając następujące polecenie
:set hlsearch
Możesz również dodać to do swojego pliku .vimrc jako zestaw
set hlsearch
teraz, gdy używasz mechanizmu szybkiego wyszukiwania w trybie poleceń lub zwykłego polecenia wyszukiwania, wszystkie wyniki zostaną podświetlone. Aby przejść do przodu między wynikami, naciśnij „n”, aby przejść do tyłu, naciśnij „N”
W trybie normalnym, aby wykonać szybkie wyszukiwanie słowa pod kursorem i przeskoczyć do następnego wystąpienia jednym poleceniem, naciśnij '*', możesz również wyszukać słowo pod kursorem i przejść do poprzedniego wystąpienia, naciskając '# '
W trybie normalnym szybkie wyszukiwanie można również wywołać za pomocą rozszerzenia
/searchterm<Enter>
aby usunąć podświetlenia przy użyciu zdarzeń, powiązałem to ze skrótem w moim .vimrc
:nohl
Włącz wyróżnianie wyszukiwania:
:set hlsearch
Następnie wyszukaj słowo:
/word<Enter>
Moim ulubionym narzędziem do tego jest wtyczka mark.vim . Pozwala na jednoczesne wyróżnienie kilku słów w różnych kolorach.
aby podświetlić słowo bez przesuwania kursora, plop
" highlight reg. ex. in @/ register
set hlsearch
" remap `*`/`#` to search forwards/backwards (resp.)
" w/o moving cursor
nnoremap <silent> * :execute "normal! *N"<cr>
nnoremap <silent> # :execute "normal! #n"<cr>
do twojego vimrc.
Fajne w tym jest g*
i g#
nadal będzie działać jak „normalne” *
i #
.
Aby ustawić hlsearch
off, można użyć „short-form” (chyba że masz inną funkcję, która zaczyna się od „Noh” w trybie poleceń) :noh
. Lub możesz użyć długiej wersji::nohlsearch
Dla maksymalnej wygody (przełączam się hlsearch
może 20 razy dziennie), możesz zmapować coś do przełączania w następujący hlsearch
sposób:
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.:. jeśli tak <leader>
jest \(domyślnie), możesz nacisnąć \st(szybko) w trybie normalnym , aby przełączyć hlsearch
.
A może po prostu chcesz :noh
zmapować:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
Powyższe działa po prostu :nohlsearch
tak (w przeciwieństwie :set hlsearch!
), że nadal będzie podświetlać słowo po następnym naciśnięciu *lub #w trybie normalnym .
Twoje zdrowie
Posługiwać się autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Upewnij się, że IncSearch
coś ustawiłeś. np call s:Attr('IncSearch', 'reverse')
. Alternatywnie możesz użyć innej grupy podświetlenia w jej miejsce.
Spowoduje to bezzwłoczne podświetlenie wszystkich wystąpień słów pod kursorem. Uważam, że opóźnienie spowalnia mnie, gdy przeglądam kod. Kolor podświetlenia będzie pasował do koloru słowa, więc pozostaje spójny z Twoim schematem.
Dlaczego nie tylko: z /
To podświetli bieżące słowo pod kursorem i wszystkie inne wystąpienia. I nie musisz wydawać osobnego polecenia dla każdego szukanego elementu. Może to nie jest dostępne w przeklętym gvimie? Domyślnie jest w Vimie.
* jest dobre tylko wtedy, gdy chcesz, aby kursor przeszedł do następnego wystąpienia. Podczas wizualnego porównywania dwóch rzeczy często nie chcesz, aby kursor się poruszał, i denerwujące jest naciskanie klawisza * za każdym razem.
~/.vimrc
pliku
" highlight the searched items
set hlsearch
" F8 search for word under the cursor recursively , :copen , to close -> :ccl
nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>
:so%
W normalnym modelu przejdź przez słowo.
Naciśnij * Naciśnij klawisz F8, aby wyszukać rekurencyjnie poniżej całego projektu nad słowem
Na przykład te wtyczki:
Wystarczy wyszukać pod kursorem w vimawesome.com
Kluczem, jak wspomniano clagccs , jest to, że podświetlenie NIE koliduje z twoim wyszukiwaniem : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle
Zrzut ekranu pokazujący, jak NIE koliduje to z wyszukiwaniem: Uwagi:
hlsearch
dużo przełączać, możesz chcieć mapować:set hlsearch!
zamiast:set nohlsearch
. Spowoduje to przełączenie ustawienia zamiast jego wyłączania.