Come posso evidenziare tutte le occorrenze di una parola selezionata in GVim, come in Notepad ++?
Come posso evidenziare tutte le occorrenze di una parola selezionata in GVim, come in Notepad ++?
Risposte:
In modalità normale:
:set hlsearch
Quindi cerca un motivo con il comando /
in modalità Normale, oppure <Ctrl>o
seguito /
in modalità Inserisci. *
in modalità Normale cercherà la ricorrenza successiva della parola sotto il cursore. L' hlsearch
opzione li evidenzierà tutti se impostati.#
cercherà la ricorrenza precedente della parola.
Per rimuovere l'evidenziazione della ricerca precedente:
:nohlsearch
Potresti voler mappare :nohlsearch<CR>
una chiave conveniente.
*
o #
da <Ctrl>o
in modalità normale.
:nohlsearch
, puoi semplicemente usare:noh
.vimrc
: noremap <F4> :set hlsearch! hlsearch?<CR>
per alternare l'evidenziazione e rimuovere l'evidenziazione di <F4>
.
Il *
tasto metterà in evidenza tutte le occorrenze della parola che si trova sotto il cursore.
&hlsearch
è attivo.
#
.
So che è una domanda davvero vecchia, ma se qualcuno è interessato a questa funzione, può controllare questo codice 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
nel modo più semplice, digita in modalità normale *
Ho anche questi mapping per abilitare e disabilitare
"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
Seleziona la parola facendo clic su di essa
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>
Selezione della parola con il mouse e conteggio delle occorrenze contemporaneamente: OBS: nota che in questa versione abbiamo il comando "CountWord" alla fine
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>
nnoremap * *``cgn
ennoremap # #``cgN
*
, come posso disattivare l'evidenziazione?
:noh
oppure:nohlsearch
nnoremap <silent> * :execute "normal! *N"<cr>
e nnoremap <silent> # :execute "normal! #n"<cr>
? Questi evidenziano semplicemente la parola sotto il cursore ma non la spostano alla ricorrenza successiva.
Le soluzioni basate sulla ricerca ( *, /...) spostano il cursore, il che potrebbe essere sfortunato.
Un'alternativa è utilizzare il plug-in mark.vim avanzato , quindi completare il tuo .vimrc
per consentire l'evidenziazione del trigger con doppio clic (non so come una selezione da tastiera possa attivare un comando):
"Use Mark plugin to highlight selected word
map <2-leftmouse> \m
Permette molteplici evidenziature, persistenza, ecc.
Per rimuovere l'evidenziazione, sia:
:Mark
(spegnere fino alla selezione successiva):MarkClear
:set noincsearch
. Secondo me è una delle funzionalità più fastidiose di Vim e una delle prime cose che disabilito per le nuove installazioni.
*
che sposterà incondizionatamente il cursore. E non riesco a vedere come incsearch
potrebbe essere fastidioso, dal momento che è solo uno "sguardo avanti", eseguendo la ricerca corrente senza effettivamente cambiare la tua posizione.
incsearch
avrebbe impedito il movimento, ma un rapido test conferma che hai ragione. Mie scuse. Tuttavia, è super facile creare una mappatura che impedisce il movimento: :nnoremap * *N
. Non riesco a credere che non trovi fastidioso che il tuo cursore salti su tutto lo schermo mentre esegui una ricerca. Ma ... queste cose sono completamente soggettive. Vive la différence ;-)
:let @/='hilight_this'
, supponendo che tu abbia hlsearch
abilitato. Evidenzia il testo senza saltare e non è necessario modificare le impostazioni esistenti. Ciò modifica il valore attualmente memorizzato nel registro di ricerca.
Primo (o nel tuo .vimrc):
:set hlsearch
Quindi posizionare il cursore sulla parola che si desidera evidenziare e premere *
.
hlsearch
significa evidenziare tutte le occorrenze della ricerca corrente e *
significa cercare la parola sotto il cursore.
Assicurati innanzitutto che hlsearch sia abilitato emettendo il seguente comando
:set hlsearch
Puoi anche aggiungere questo al tuo file .vimrc come impostato
set hlsearch
ora quando si utilizza il meccanismo di ricerca rapida in modalità comando o un normale comando di ricerca, tutti i risultati verranno evidenziati. Per spostarsi in avanti tra i risultati, premere 'n' per spostarsi all'indietro, premere 'N'
In modalità normale, per eseguire una rapida ricerca della parola sotto il cursore e per passare alla ricorrenza successiva in un comando premere '*', è anche possibile cercare la parola sotto il cursore e passare alla ricorrenza precedente premendo '# '
In modalità normale, la ricerca rapida può anche essere invocata con
/searchterm<Enter>
per rimuovere i punti salienti sull'uso delle ocuurenze, ho associato questo a un collegamento nel mio .vimrc
:nohl
Abilita l'evidenziazione della ricerca:
:set hlsearch
Quindi cerca la parola:
/word<Enter>
Il mio preferito per farlo è il plugin mark.vim . Permette di evidenziare più parole in diversi colori contemporaneamente.
per evidenziare la parola senza spostare il cursore, 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>
nel tuo vimrc.
La cosa bella di questo è g*
e g#
funzionerà ancora come "normale" *
e #
.
Per iniziare hlsearch
, puoi usare "short-form" (a meno che tu non abbia un'altra funzione che inizia con "noh" in modalità comando)::noh
. Oppure puoi usare la versione lunga::nohlsearch
Per estrema comodità (mi ritrovo hlsearch
a alternare forse 20 volte al giorno), puoi mappare qualcosa per attivare / disattivare in questo hlsearch
modo:
" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>
.:. se lo <leader>
è \(è per impostazione predefinita), è possibile premere \st(rapidamente) in modalità normale per attivare / disattivarehlsearch
.
O forse vuoi solo aver :noh
mappato:
" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>
Quanto sopra funziona semplicemente :nohlsearch
così (diversamente :set hlsearch!
) che evidenzierà comunque la parola la prossima volta che premi *o #in modo normale modalità .
Saluti
Uso autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Assicurati di aver IncSearch
impostato qualcosa. es call s:Attr('IncSearch', 'reverse')
. In alternativa puoi usare un altro gruppo di evidenziazione al suo posto.
Ciò metterà in evidenza tutte le occorrenze di parole sotto il cursore senza indugio. Trovo che un ritardo mi rallenta quando cerco il codice. Il colore di evidenziazione corrisponderà al colore della parola, quindi rimane coerente con il tuo schema.
Perché non solo: z /
Ciò evidenzierà la parola corrente sotto il cursore e qualsiasi altra occorrenza. E non devi dare un comando separato per ogni oggetto che stai cercando. Forse non è disponibile nel diabolico gvim? È in vim di default.
* è utile solo se si desidera che il cursore passi alla ricorrenza successiva. Quando si confrontano due cose visivamente, spesso non si desidera che il cursore si sposti, ed è fastidioso premere il tasto * ogni volta.
~/.vimrc
file
" 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%
Nel modello normale andare oltre la parola.
Premi * Premi F8 per cercare in modo ricorsivo sotto il tuo intero progetto
Ad esempio questo plugIn:
Cerca solo sotto il cursore in vimawesome.com
La chiave, come menzionato da Clagccs , è che il momento saliente NON è in conflitto con la tua ricerca : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle
Schermata di come NON è in conflitto con la ricerca: Note:
hlsearch
molto potresti voler mappare:set hlsearch!
invece di:set nohlsearch
. Questo attiva o disattiva l'impostazione anziché disattivarla.