In VimScript qual è la tecnica migliore per modificare il testo quando il cursore si allontana?

Aug 19 2020

Sono nuovo di vimscript. Sto cercando di capire come i plugin come vimwiki o vim-note riformattano il testo visibile.

So come utilizzare l'evidenziatore di sintassi per evidenziare, grassetto, sottolineato, barrato, ecc.

Tuttavia questi plugin modificano il testo visibile quando il cursore si allontana dalla riga. Quando il cursore viene riportato sulla riga, il testo viene nuovamente visualizzato per mostrare ciò che è stato digitato.

Ecco un esempio (vimwiki), posso digitare *bold*quando sposto il cursore viene trasformato in grassetto , quando riporto il cursore sulla riga viene nuovamente reso come *bold*.

Come si ottiene questa tecnica. Ho esaminato la fonte di vimwiki (che è molto complicata), ho guardato anche vim-note ma non sono riuscito a capire dove fanno il passaggio (avrei pensato che ci sarebbe stata una mappatura per <CR>).

Mantengono 2 buffer, uno visibile, uno nascosto?

In vim-note , stanno usando vimscript undo per ottenere questa tecnica? Se si come funziona?

Risposte

3 Rich Aug 19 2020 at 22:12

Questi plugin utilizzano la funzione di occultamento della sintassi di Vim .

L'evidenziazione della sintassi di Vim viene normalmente utilizzata per cambiare il colore (o una manciata di altri attributi, come la sottolineatura o l'incoraggiamento) del testo, ma la funzione di occultamento consente invece di nascondere completamente gli elementi corrispondenti o di sostituirli con un singolo carattere .

A seconda delle 'concealcursor'impostazioni, il testo reale verrà visualizzato per intero quando sposti il ​​cursore sulla riga che contiene l'elemento. L' 'conceallevel'impostazione può anche essere utilizzata per disabilitare concealcompletamente o per modificare se gli elementi sono nascosti o sostituiti.

Per il tuo esempio specifico, è probabile che vimwiki utilizzi l' concealendsargomento to :syntaxper nascondere *a ciascuna estremità della regione della sintassi in grassetto.