Dans VimScript, quelle est la meilleure technique pour modifier le texte lorsque le curseur s'éloigne ?
Je suis nouveau sur vimscript. J'essaie de comprendre comment des plugins comme vimwiki ou vim-note reformatent le texte visible.
Je sais utiliser le surligneur de syntaxe pour surligner, mettre en gras, souligner, barrer, etc.
Cependant, ces plugins modifient le texte visible lorsque le curseur s'éloigne de la ligne. Lorsque le curseur revient sur la ligne, le texte est restitué pour montrer ce qui a été saisi.
Voici un exemple (vimwiki), je peux taper *bold*
lorsque je déplace le curseur, il est transformé en gras , lorsque je ramène le curseur sur la ligne, il est re-rendu en *bold*
.
Comment cette technique est-elle réalisée. J'ai regardé dans la source vimwiki (ce qui est très compliqué), j'ai aussi regardé vim-note mais je n'ai pas pu comprendre où ils faisaient le changement (j'aurais pensé qu'il y aurait un mappage pour <CR>
).
Est-ce qu'ils gardent 2 tampons, un visible, un caché ?
Dans vim-note , utilisent-ils vimscript undo pour réaliser cette technique ? Si oui comment ça marche ?
Réponses
Ces plugins utilisent la fonctionnalité de masquage de syntaxe de Vim .
La coloration syntaxique de Vim est normalement utilisée pour changer la couleur (ou une poignée d'autres attributs, tels que le soulignement ou l'enhardissement) du texte, mais la fonction de masquage permet à la place de masquer entièrement les éléments correspondants ou de les remplacer par un seul caractère .
Selon votre 'concealcursor'réglage, le vrai texte s'affichera en entier lorsque vous déplacerez votre curseur sur la ligne qui contient l'élément. Le 'conceallevel'paramètre peut également être utilisé pour désactiver conceal
entièrement ou pour modifier si des éléments sont masqués ou remplacés.
Pour votre exemple spécifique, vimwiki utilise probablement l' concealendsargument to :syntax
pour masquer le *
à chaque extrémité de la région de syntaxe en gras.