2009-10-11 13 views

Respuesta

81

Este AutoCommand va a hacer lo que quiere:

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

vi highlight current word

Editar: He utilizado el grupo IncSearch más destacado en mi ejemplo, pero se pueden encontrar otros colores a utilizar mediante la ejecución de este comando:

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

¿Hay alguna manera de silenciar los errores de coincidencia? – UncleZeiv

+0

@UncleZeiv: No estoy muy seguro de lo que quiere decir con errores –

+0

si muevo el cursor al final de un comentario de estilo C (estrella seguido de barra), obtengo 'E488: caracteres finales: coincida IncSearch/\ <*/\> ', e incluso tengo que presionar Enter antes de continuar, ¡bastante molesto! Supongo que debería escaparse de alguna manera y/o al menos estaría bien encontrar la manera de silenciar la advertencia. Gran consejo de todos modos. – UncleZeiv

18

Si establece

:set hlsearch 

para resaltar todas las apariciones de un patrón de búsqueda, y luego utilice * o # para encontrar ocurrencias de la palabra bajo el cursor, que les permite conocer de alguna manera a lo que desea. Sin embargo, creo que un resaltado de variable sensible a la sintaxis está más allá del alcance de VIM.

+1

¡su solución es genial! el único problema es cuando uso * el cursor salta al siguiente resultado de búsqueda. ¿No es posible mantener el cursor en la palabra actual? – Meysam

+2

@Meysam - puede crear una asignación simple que hace exactamente eso (no probado): nmap * * N – lukaszkorecki

5

Esta declaración permitirá una variable para activar/desactivar resaltando todas las apariciones de la palabra bajo el cursor:

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

Uno podría activar destacando con:

:let HlUnderCursor=1 

y desactivarlo con:

:let HlUnderCursor=0 

Uno podría definir fácilmente una tecla de método abreviado para habilitar/deshabilitar ng resaltado:

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

Eliminación de la variable que impediría la declaración partido de la ejecución, y no borrar el punto culminante actual:

:unlet HlUnderCursor 
2

Si no desea resaltar palabras de la lengua (declaraciones/preprocs como if, #define) cuando el cursor está en estas palabras, se puede poner esta función en su .vimrc basado en la respuesta @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() 
Cuestiones relacionadas