2009-10-11 9 views

Répondre

81

Ce autocommand fera ce que vous voulez:

:autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\')) 

vi highlight current word

Edit: J'ai utilisé le groupe fort IncSearch dans mon exemple, mais vous pouvez trouver d'autres couleurs à utiliser en exécutant cette commande:

:so $VIMRUNTIME/syntax/hitest.vim 
+0

est-il un moyen de faire taire les erreurs de correspondance? – UncleZeiv

+0

@UncleZeiv: Je ne suis pas sûr de ce que vous entendez par des erreurs –

+0

si je déplace le curseur sur la fin d'un commentaire de style C (étoile suivie par une barre oblique), je reçois 'E488: Caractères surnuméraires: correspondre IncSearch/\ <*/\> ', et je dois même appuyer sur Entrée avant de continuer, assez ennuyeux! Je suppose qu'il devrait être échappé d'une manière ou d'une autre et/ou au moins, il serait acceptable de trouver un moyen de faire taire l'avertissement. Bon conseil quand même. – UncleZeiv

18

Si vous définissez

:set hlsearch 

pour mettre en évidence toutes les occurrences d'un modèle de recherche, puis utilisez * ou # pour trouver les occurrences du mot sous le curseur, que vous obtiendrez une certaine façon à ce que vous voulez. Cependant, je pense qu'une mise en surbrillance de variables prenant en compte la syntaxe dépasse la portée de VIM.

+1

votre solution est géniale! le seul problème est quand j'utilise * le curseur saute au prochain résultat de recherche. N'est-il pas possible de garder le curseur sur le mot courant? – Meysam

+2

@Meysam - vous pouvez créer un mappage simple qui ne fait que cela (non testé): nmap * * N – lukaszkorecki

5

Cette déclaration permettra une variable pour activer/désactiver la surbrillance toutes les occurrences du mot sous le curseur:

:autocmd CursorMoved * exe exists("HlUnderCursor")?HlUnderCursor?printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\')):'match none':"" 

Un activerait mettant en lumière avec:

:let HlUnderCursor=1 

Et le désactiver avec:

:let HlUnderCursor=0 

On pourrait facilement définir une touche de raccourci pour activer/désactiver ng mise en évidence:

:nnoremap <silent> <F3> :exe "let HlUnderCursor=exists(\"HlUnderCursor\")?HlUnderCursor*-1+1:1"<CR> 

Supprimer la variable empêcherait l'instruction de correspondance de l'exécution, et non effacer le point fort courant:

:unlet HlUnderCursor 
2

Si vous ne voulez pas mettre en évidence les mots de la langue (états/preprocs tels que if, #define) lorsque votre curseur est sur ces mots, vous pouvez mettre cette fonction dans votre .vimrc en fonction de la réponse @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() 
Questions connexes