Destacado vim personalizado


12

Estoy editando algunos xml en este momento y me he dejado algunos comentarios sobre cosas a las que volver. Me gusta esto

<!-- Question: bla bla -->

Estoy editando con vim en este momento y me gustaría que vim resalte Pregunta en este momento para poder ver fácilmente mi código y encontrar todos los lugares que necesito mirar. Sé que necesito agregar algo en mi vimrc pero creo que podría estar buscando algo incorrecto.

Actualizar

Intenté poner esto en mi .vimrcpero no tuvo ningún efecto:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

Actualización 2

En realidad puedo ver que lo que hice antes tuvo algún efecto porque cuando hago esto:

:hi

Me muestra todas las cosas que está resaltando y una de las entradas es:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

( y el xxx está formateado correctamente )

Esto me lleva a creer que simplemente no estoy definiendo la pregunta correctamente. ¿Question necesita estar en una línea por sí mismo?

Actualización 3

Ok, para la publicación del usuario 22303, tengo esto funcionando:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/

Sin embargo, sospecho que solo se le permite tener una coincidencia por archivo. Porque cuando hago esto:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/
highlight MyRelook cterm=bold term=bold ctermbg=blue ctermfg=black
match MyRelook /Another look/

El primero deja de funcionar. (Pero el segundo funciona).

Respuestas:


9

Creo que te hemos estado dando algunas respuestas que no son del todo correctas. Aquí hay algo para probar que probé en mi máquina.

Primero, cree su propio nuevo grupo destacado:

:highlight MyQuestions guifg=red guibg=green

Ahora, especifique que el grupo resaltado existirá cada vez que coincida un patrón:

:syntax match MyQuestions /Question/

Eso debería comenzar a mostrar lo más destacado del texto 'Pregunta' en cada línea que tiene ese texto. Para expandir para mostrar la línea completa, cambiaría el texto de búsqueda para que los comodines coincidan con la línea completa, algo como esto:

:syntax match MyQuestions /.*Question.*/


En realidad, que sólo trabajó sortive ... sospecho que sólo se le permite tener un partido a la actualización de ver el tiempo # 3 ...
sixtyfootersdude

1
@sixtyfootersdude: Lo siento, una vez más hubo un error menor. Todos los comandos de coincidencia tienen que ser comandos de "coincidencia de sintaxis". Entonces, en lugar de [: match MyQuestions /.*Question.*/] desearía usar [: match sintaxis MyQuestions /.*Question.*/]. Eso te permite tener tantos partidos diferentes como quieras. De hecho, estos son uno de los tipos más comunes de comandos ubicados en archivos de sintaxis. Pero puede ejecutarlos en cualquier lugar que desee, ya sea línea de comando, vimrc o cualquier otro script.
user22303

La adición de syntaxenfrente de match...mis archivos vimrc marcas coincidir no tienen ningún efecto en absoluto. ¿Es aquí donde debería estar haciendo esto? Hacerlo en un archivo abierto tampoco tiene ningún efecto.
sixtyfootersdude

1
@sixtyfooters: no estoy seguro de lo que te está sucediendo, pero esa es definitivamente la forma de hacerlo. Pruebe en la línea de comando antes de colocarlo en un script (es posible que la configuración de sintaxis se borre en algún lugar de otros scripts que se cargan para su archivo). Una vez definido, verifique qué grupos existen y qué resaltado tienen emitiendo un comando ": resaltar" (o seleccionando "Sintaxis", "Prueba de resaltado" del menú de la interfaz gráfica de usuario en gvim). Recuerde que quiere usar el comando resaltar primero para crear un grupo, luego use 'sintaxis coincidente' para establecer el patrón de coincidencia.
user22303

@sixtyfooters: supongo que está ejecutando vim en una terminal (es decir, no gvim), por lo que establecer el término propiedades solo debería funcionar. Me parece que los comandos de sintaxis se borran cuando se carga un nuevo archivo y se ejecuta un archivo de sintaxis asociado y se borran todos los comandos de sintaxis anteriores. Entonces, para verificar dos veces, cuando usa la línea de comandos, ¿vuelve a ingresar estos comandos cada vez que carga un archivo? Creo que podría intentar probar con texto en un nuevo búfer que ni siquiera está guardado y que ni siquiera tiene asignado un nombre de archivo.
user22303

5

El archivo que está buscando es un archivo de "sintaxis". Intenta mirar en /usr/local/share/vim/syntax/o /usr/share/vim/syntax/. El archivo que desea es xml.vim.

Lo más simple es encontrar la línea que tiene

syn keyword xmlTodo         contained TODO FIXME XXX

y cámbielo a:

syn keyword xmlTodo         contained TODO FIXME XXX Question

Esto agregará el resaltado 'Todo' a cualquier comentario que contenga el texto Question.

Si va a usar esto para (alguna vez), sería mejor copiar xml.vim en su local ~/.vim/syntaxpara que los cambios en vim no sobrescriban su archivo de sintaxis personalizado.

Actualizar

Si desea una capacidad similar (sortof) en cualquier archivo, usaría el comando 'goto'. Admito que esto es como hlsearch, que dijiste que te molesta.

Mientras edita, cuando el cursor está en una palabra, escriba gdpara buscar desde el punto actual en el archivo o gDpara buscar desde el principio. Se resalta cada palabra en su archivo que coincide con la palabra actual. Puede escribir npara saltar a la siguiente instancia de esa palabra.

Tiendo a hacer esto, porque obtienes resaltado y navegación con una escritura mínima. Apaga el resaltado de la forma habitual::noh[lsearch]


¡Guauu! Eso suena como lo que quiero hacer. Actualmente no tengo una ~/.vim/ folder. If I created it and create the file sintaxis` ¿necesito hacer referencia a ella en algún lugar (tal vez en .vimrc?) para decirle a vim que la use?
sixtyfootersdude

1
No Vim lo busca automáticamente (y algunos otros directorios, por ejemplo: complementos, color, compilador) y si existe un archivo de sintaxis en su área de inicio, prevalece sobre el valor predeterminado del sistema.
DaveParillo

1
Además, para ser claros, desea crear un directorio syntax y poner en él un archivo llamadoxml.vim
DaveParillo

¿Debo poner mi .vimrc en mi directorio .vim?
sixtyfootersdude

1
los archivos de sintaxis van en su directorio .vim. El resaltado de sintaxis está destinado a ser específico del idioma. Si desea una capacidad similar (sortof) en cualquier archivo, usaría el comando 'goto'. Lo agregaré a mi respuesta.
DaveParillo

2

Podrías simplemente hacer

:set hlsearch

Y luego busca la pregunta


Eso es lo que he estado haciendo, pero hlsearch me molesta. +1, gracias por la sugerencia.
sixtyfootersdude

2

Tienes varias opciones.
- uno, como mencionó Dominik ... puede buscarlos uno por uno (no es tan práctico)
- dos, puede hacer ": g / <- Pregunta" para obtener una "lista" de todos (un poco mejor , da una imagen general)
: tres, puede configurar un grupo de resaltado si solo está usando ese tipo de comentarios en archivos xml (no tengo idea de cómo se ve xml, así que no sé si hay algunos otro tipo de comentarios en ellos también). Esto sería bueno si lo configuró en vimrc, ya que cuando actualice vim con una versión más nueva, su archivo xlm.vim desaparecerá.


+1 Me gusta la :g/sugerencia, pero podría ser difícil de aplicar si 'Pregunta' no sigue inmediatamente la etiqueta del comentario.
DaveParillo

@DaveParillo - ah, sí. bueno, como dije, no sé nada sobre xml, así que supuse que siempre era así.
Torre

¿Cómo puedo configurar un grupo de resaltado?
sixtyfootersdude

1
@sixtyfootersdude - ver ": ayuda e410".
Torre

@Idigas: gracias por la referencia. Eché un vistazo pero aún no podía resolver mi problema. Agregué una actualización en la pregunta. Gracias.
sixtyfootersdude

1

No necesariamente necesita poner el comando en su vimrc. Siempre puede ingresarlo en la línea de comando y luego borrarlo cuando ya no desee el resaltado. Los comandos serían algo como esto:

: hola Pregunta guifg = guibg rojo = gui azul = negrita

En gvim (es decir, vim con una interfaz gráfica de usuario) que establecerá los ajustes de primer plano (guifg), fondo y carácter general.

si quieres deshacerte de esa iluminación, haz esto:

: hola Pregunta clara

Usando vim dentro de una terminal puede modificar para usar este comando:

: hola Pregunta ctermfg = rojo ctermbg = término azul = negrita

Por supuesto, puede poner cualquiera de esos en su vimrc, y también puede combinar los indicadores de interfaz gráfica de usuario y término en un solo comando hi.


[A continuación se agrega después de leer la respuesta de otro póster]

Lo sentimos, estaba asumiendo que la sintaxis de sus líneas de preguntas ya coincidía con la configuración de su archivo de sintaxis para la etiqueta de resaltado 'Pregunta' incorporada de Vim. Simplemente mire la otra respuesta que menciona el archivo de sintaxis xml para vim y luego puede emitir los comandos anteriores usando ToDo resaltar grupo en lugar de Pregunta.


Probado: hola Pregunta ctermfg = rojo ctermbg = término azul = negrita pero no tuvo efecto.
sixtyfootersdude

Lo sentimos, el comando: hola simplemente estableció cómo se resaltaría el grupo de Preguntas. Ahora debe especificar qué áreas del documento forman parte del grupo Pregunta. Puede hacer esto con un comando de coincidencia:: match Question / [patrón de búsqueda] / o, en su caso:: match Question / Question /
user22303

0

Llego tarde a la fiesta pero uso TODOy FIXMEpara exactamente esta situación.

La mayoría, si no todos, los esquemas de colores resaltarán TODOen el siguiente ejemplo con alguna combinación de color de fondo, subrayado y cursiva:

<tree>
  <!--TODO : do I have to add a trunk tag ?-->
  <branch>
    <leaf>caterpillar</leaf>
    <leaf>caterpillar</leaf>
  </branch>
</tree>

Realmente no encaja semánticamente, pero funciona muy bien desde un punto de vista puramente funcional.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.