2010-11-04 13 views
32

En vim, FIXME y TODO están resaltados, pero no puedo obtener FIXME: y TODO: (tenga en cuenta los dos puntos después de la palabra clave) para resaltar? ¿Qué debo poner en mi .vimrc para que esto suceda?En vim, ¿cómo puedo resaltar TODO: y FIXME :?

+1

Eso es extraño; la mía destacada con o sin los dos puntos. Ese resaltado de sintaxis se define en sintaxis individuales, creo, ¿esto está sucediendo en algún tipo de archivo específico? – Cascabel

+0

@Jefromi: creo que sucede en todos los tipos de archivos. –

+2

¿Qué dice ': verbose set iskeyword?' Tell? – Benoit

Respuesta

46

Bueno, ya has encontrado el problema, pero este es el por qué.

Hay tres tipos básicos de concordancia de sintaxis: palabras clave, coincidencias y regiones. Las palabras clave son cadenas fijas, generalmente usadas para palabras clave de lenguaje básico (int, double, ...) y también, en su caso, para FIXME y TODO. Realmente quiero decir cadenas fijas; tienen que ser palabras exactas y completas, a diferencia de las coincidencias y las regiones, que usan expresiones regulares. Por ejemplo, la sintaxis de C:

syn keyword cTodo contained TODO FIXME XXX 

Parece que en casi todos los incorporados en las definiciones de sintaxis, sólo que con diferentes nombres de grupo (cTodo).

iskeyword le dice a vim si un personaje dado puede formar parte de la palabra clave. De forma predeterminada, no incluye dos puntos, por lo que cuando busca palabras clave, vim ve "FIXME:" como "FIXME" e ignora los dos puntos. Si virar en el colon (set iskeyword+=:), ahora se puede definir un poco más de relieve:

syn keyword myTodo contained TODO: FIXME: 

Todo depende de cómo se quiere trabajar en los grupos de sintaxis/resaltar existentes. Si es solo para un tipo de archivo, puede agregarlo al grupo de tareas de la sintaxis (por ejemplo, cTodo). Si lo desea en todas partes, puede hacer "myTodo" como sugerí, y luego vincularlo directamente al grupo de resaltado Todo (hi def link myTodo Todo).

Alternativamente, puede dejar solos iskeyword (probablemente lo recomendaría esto), y sólo tiene que utilizar un fósforo:

syn match myTodo contained "\<\(TODO\|FIXME\):" 
hi def link myTodo Todo 
+0

+1 @Jefromi, sin embargo, no creo que este syn match funcione. Lo puse en mi .vimrc y si cambio FIXME a otra cosa, no está resaltado. – g33kz0r

+2

@ G33kx0r: No es culpa de este partido; funciona si todavía existe. Sospecho que está habilitando la sintaxis (de una manera u otra) * después de * las líneas en su ejecución vimrc, y cuando la sintaxis está habilitada, primero borra la sintaxis antigua y luego carga la apropiada. Puede verificar si esa coincidencia aún está en su sitio usando ': syn list myTodo'. Ver también ': help syntax-loading'. – Cascabel

+0

Estableciendo la primera 'sintaxis en' y luego' syn coincide con myTodo contenía "\ <\ (TODO \ | FIXME \):" 'en mi archivo' vimrc' y 'hola! def link myTodo Todo' no funciona para mí. Por otro lado, si lo hago, por ejemplo, 'au BufNewFile, BufRead * .tex syn match texTodo" \ <\ (TODO \ | FIXME \): "' el archivo 'tex' resultante se resalta correctamente. ¿Hay una solución general? – petobens

1

Si usted hace su propio entorno, make syntax file (not .vimrc)

  • sintaxis mundial el archivo se encuentra en el directorio vim (por ejemplo, /usr/share/vim/vim72/syntax/c.vim)

  • y si Haga ~/.vim/syntax/c.vim, luego puede agregar la sintaxis para su propio . (Anulación)

Apenas añada la sintaxis adicional en ese archivo. (La forma en que lo hace @ Jefromi)

8
augroup vimrc_todo 
    au! 
    au Syntax * syn match MyTodo /\v<(FIXME|NOTE|TODO|OPTIMIZE|XXX):/ 
      \ containedin=.*Comment,vimCommentTitle 
augroup END 
hi def link MyTodo Todo 

El containedin lo añadiremos a todos los grupos que terminan en "Comentario", además de vimCommentTitle, donde " TODO: foo no conseguiría destacado como myToDo lo contrario.

+0

Notas de uso: puede agregar esto a su .vimrc, y eliminar los dos puntos (':') si solo desea resaltar la palabra, y no los dos puntos que la siguen. Prefiero el resaltado para leer _NOTE_ :, no _NOTA: _. También a veces escribo NOTE o TODO no seguido por dos puntos. – Ari

Cuestiones relacionadas