Ho lavorato in NetBeans e mi è piaciuta questa funzione: quando si posiziona il cursore in un nome di variabile, tutte le occorrenze della variabile vengono evidenziate. Questo è molto utile per la ricerca rapida di tutte le occorrenze della variabile. È possibile aggiungere questo comportamento a Vim?Evidenzia la variabile sotto il cursore in Vim come in NetBeans
risposta
Questa autocomando farà ciò che si vuole:
:autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
Edit: Ho usato il gruppo IncSearch
momento clou nel mio esempio, ma è possibile trovare altri colori da utilizzare per l'esecuzione di questo comando:
:so $VIMRUNTIME/syntax/hitest.vim
Se si imposta
:set hlsearch
per evidenziare tutte le occorrenze di un modello di ricerca, e quindi utilizzare *
o #
per trovare le occorrenze della parola sotto il cursore, che vi porterà qualche modo a ciò che si desidera. Tuttavia, ritengo che l'evidenziazione di una variabile sintattica esuli dallo scopo di VIM.
la tua soluzione è fantastica! l'unico problema è quando uso * il cursore salta al risultato di ricerca successivo. Non è possibile mantenere il cursore sulla parola corrente? – Meysam
@Meysam - puoi creare una semplice mappatura che fa proprio questo (non testato): nmap
penso che quello che vuoi veramente sia il seguente plugin di Shuhei Kubota:
http://www.vim.org/scripts/script.php?script_id=4306
Secondo la descrizione: 'Questo script mette in evidenza le parole sotto il cursore come molti IDE.'
Cheers.
Questa affermazione consentirà una variabile per abilitare/disabilitare evidenziare tutte le occorrenze della parola sotto il cursore:
:autocmd CursorMoved * exe exists("HlUnderCursor")?HlUnderCursor?printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\')):'match none':""
Si potrebbe attivare mettendo in evidenza con:
:let HlUnderCursor=1
E disabilitarlo con:
:let HlUnderCursor=0
Si potrebbe facilmente definire un tasto di scelta rapida per abilitare/disabilitare ng evidenziazione:
:nnoremap <silent> <F3> :exe "let HlUnderCursor=exists(\"HlUnderCursor\")?HlUnderCursor*-1+1:1"<CR>
Cancellare la variabile impedirebbe la dichiarazione partita da eseguire, e non è chiaro il momento clou corrente:
:unlet HlUnderCursor
Se non si desidera evidenziare parole della lingua (dichiarazioni/preprocs quali if
, #define
) quando il cursore si trova su queste parole, si può mettere questa funzione nel vostro .vimrc
in base alla risposta @too_much_php:
let g:no_highlight_group_for_current_word=["Statement", "Comment", "Type", "PreProc"]
function s:HighlightWordUnderCursor()
let l:syntaxgroup = synIDattr(synIDtrans(synID(line("."), stridx(getline("."), expand('<cword>')) + 1, 1)), "name")
if (index(g:no_highlight_group_for_current_word, l:syntaxgroup) == -1)
exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))
else
exe 'match IncSearch /\V\<\>/'
endif
endfunction
autocmd CursorMoved * call s:HighlightWordUnderCursor()
c'è un modo per silenziare gli errori di corrispondenza? – UncleZeiv
@UncleZeiv: Non sono abbastanza sicuro di cosa intendi per errori –
se sposto il cursore alla fine di un commento in stile C (stella seguita da barra), ottengo 'E488: Caratteri finali: corrispondenza IncSearch/\ <*/\> ', e devo anche premere Invio prima di continuare, piuttosto fastidioso! Immagino che dovrebbe essere sfuggito in qualche modo e/o almeno sarebbe ok trovare un modo per mettere a tacere l'avvertimento. Ottimo consiglio comunque. – UncleZeiv