En VimScript, ¿cuál es la mejor técnica para cambiar el texto cuando el cursor se aleja?

Aug 19 2020

Soy nuevo en vimscript. Estoy tratando de averiguar cómo los complementos como vimwiki o vim-note reformatean el texto visible.

Sé cómo usar el resaltador de sintaxis para resaltar, negrita, subrayar, tachar, etc.

Sin embargo, estos complementos cambian el texto visible cuando el cursor se aleja de la línea. Cuando el cursor regresa a la línea, el texto se vuelve a representar para mostrar lo que se escribió.

Aquí hay un ejemplo (vimwiki), puedo escribir *bold*cuando alejo el cursor, se vuelve negrita , cuando regreso el cursor a la línea, se vuelve a representar como *bold*.

Cómo se logra esta técnica. Miré a través de la fuente vimwiki (que es muy complicada), también miré vim-note pero no pude averiguar dónde hacen el cambio (me hubiera imaginado que habría un mapeo para <CR>).

¿Mantienen 2 búferes, uno visible y otro oculto?

En vim-note , ¿usan vimscript undo para lograr esta técnica? ¿Si es así, cómo funciona?

Respuestas

3 Rich Aug 19 2020 at 22:12

Estos complementos utilizan la función de ocultación de sintaxis de Vim .

El resaltado de sintaxis de Vim se usa normalmente para cambiar el color (o un puñado de otros atributos, como subrayado o en negrita) del texto, pero la función de ocultación permite que los elementos coincidentes se oculten por completo o se reemplacen con un solo carácter .

Dependiendo de su 'concealcursor'configuración, el texto real se mostrará completo cuando mueva el cursor a la línea que contiene el elemento. La 'conceallevel'configuración también se puede usar para deshabilitar por concealcompleto o para modificar si los elementos se ocultan o reemplazan.

Para su ejemplo específico, es probable que vimwiki use el concealendsargumento :syntaxpara ocultar el *en cada extremo de la región de sintaxis en negrita.