2009-09-23 12 views
18

Vengo a Vim desde TextMate y me gustaría personalizar mi vim colorcheme. Sería realmente útil si pudiera descubrir a qué grupo (s) de resaltado pertenece cualquier palabra o símbolo en particular. En TextMate, me coloque el cursor en la palabra/símbolo en cuestión, y luego presionar Ctrl-Shift-P y aparecería una punta de la herramienta diciendo algo como:Averigüe a qué grupo de resaltado pertenece una palabra clave/símbolo en particular en vim

text.html.basic 
meta.tag.structure.any.html 
string.quoted.double.html

partir de esta información, es muy fácil de editar un tema de color TextMate para aplicar (o eliminar) el formato al texto en cuestión.

En Vim, si quiero cambiar el formato de una determinada palabra o símbolo, no estoy seguro de dónde empezar. ¿Hay algo equivalente a ctrl-shift-p de TextMate?

Respuesta

22

No estoy seguro de haber entendido bien, pero ¿estás buscando esto?

" adds to statusline 
set laststatus=2 
set statusline+=%{synIDattr(synID(line('.'),col('.'),1),'name')} 

" a little more informative version of the above 
nmap <Leader>sI :call <SID>SynStack()<CR> 

function! <SID>SynStack() 
    if !exists("*synstack") 
     return 
    endif 
    echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') 
endfunc 
+0

Spot on - gracias! – nelstrom

+0

Acabo de hacer un cambio: asignar el comando a ctrl-shift-p por el bien de la coherencia. 'nmap : llame al SynStack() ' – nelstrom

3

ACTUALIZACIÓN: De :help synID() (ver el ejemplo):

 
synID({line}, {col}, {trans})       *synID()* 
       The result is a Number, which is the syntax ID at the position 
       {line} and {col} in the current window. 
       The syntax ID can be used with |synIDattr()| and 
       |synIDtrans()| to obtain syntax information about text. 
       {col} is 1 for the leftmost column, {line} is 1 for the first 
       line. 
       When {trans} is non-zero, transparent items are reduced to the 
       item that they reveal. This is useful when wanting to know 
       the effective color. When {trans} is zero, the transparent 
       item is returned. This is useful when wanting to know which 
       syntax item is effective (e.g. inside parens). 
       Warning: This function can be very slow. Best speed is 
       obtained by going through the file in forward direction. 

       Example (echoes the name of the syntax item under the cursor): 
         :echo synIDattr(synID(line("."), col("."), 1), "name") 

Por lo que yo sé, lo mejor que puede hacer es :syntax, lo que le dará una lista de todas la sintaxis cargado para el archivo actual. No sé nada de lo que dará el análisis sintáctico del buffer actual.

Tenga en cuenta que :syntax solo define los elementos de sintaxis, sus usos del comando :highlight que dan el color para un elemento de sintaxis.

Una vez que haya decidido qué cambios desea realizar, colóquelos en ~/.vim/after/syntax/<filetype>.vim. Estos aplicarán sus cambios después de que se carguen los archivos de sintaxis predeterminados.

+0

Los documentos de ayuda para Vim son excepcionales, pero no podría haber encontrado la información en synID sin su ayuda. Gracias. Además, la sugerencia de anular los archivos de sintaxis al ponerlos en el directorio 'after' es muy apreciada. – nelstrom

+0

@nelstrom - a través de "help vimfiles" puede ver qué directorios tienen preferencias sobre cuál (la parte \ after). – Rook

+0

@nelstrom: una forma rápida de ver lo que podría ser un tema de ayuda relevante es utilizar la tecla CTRL-D para ver posibles terminaciones al escribir ': help syn'; le mostrará todos los temas de ayuda que coinciden con la cadena" syn ", que es como encontré' synID() '. – rampion

12

Otra forma de obtener gran cantidad de información sobre el resaltado:

map <F3> :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" . " FG:" . synIDattr(synIDtrans(synID(line("."),col("."),1)),"fg#")<CR> 

Si muevo en un comentario en un archivo de C y pulse F3, me sale:

hi<cCommentStart> trans<cCommentStart> lo<Comment> FG:#00ff00 

que muestra que está en el grupo resaltado cCommentStart, que está vinculado a Comment y coloreado en verde (#00ff00). Esto es (modificado) desde here, consulte esa página para obtener más información.

+0

Esto es asombroso. Encuentro esto mucho más útil que el simple identificador 'hi'. – mybuddymichael

Cuestiones relacionadas