Каков наилучший способ изменения текста в VimScript при перемещении курсора?
Я новичок в vimscript. Я пытаюсь понять, как плагины, такие как vimwiki или vim-note, переформатируют видимый текст.
Я знаю, как использовать подсветку синтаксиса для выделения, полужирного, подчеркивания, зачеркивания и т. Д.
Однако эти плагины изменяют видимый текст, когда курсор удаляется от строки. Когда курсор возвращается в строку, текст повторно отображается, чтобы показать, что было введено.
Вот пример (vimwiki), я могу печатать, *bold*
когда я перемещаю курсор, он выделяется жирным шрифтом , когда я возвращаю курсор к строке, в которую он перерисовывается *bold*
.
Как достигается эта техника. Я просмотрел исходный код vimwiki (что очень сложно), я также посмотрел на vim-note, но не мог понять, где они делают переключатель (я бы подумал, что там будет сопоставление <CR>
).
Они хранят 2 буфера, один видимый, один скрытый?
В vim-note они используют отмену vimscript для достижения этой техники? Если да, то как это работает?
Ответы
Эти плагины используют функцию скрытия синтаксиса Vim .
Подсветка синтаксиса Vim обычно используется для изменения цвета (или нескольких других атрибутов, таких как подчеркивание или придание яркости) текста, но функция скрытия вместо этого позволяет либо полностью скрыть совпадающие элементы, либо заменить их одним символом .
В зависимости от ваших 'concealcursor'настроек реальный текст будет отображаться полностью, когда вы переместите курсор на строку, содержащую элемент. Этот 'conceallevel'параметр также можно использовать для conceal
полного отключения или для изменения того, будут ли элементы скрыты или заменены.
В вашем конкретном примере vimwiki, вероятно, использует concealendsаргумент to, :syntax
чтобы скрыть *
на каждом конце выделенной жирным шрифтом области синтаксиса.