Это не встроенный
Вероятно, вы могли бы написать что-нибудь самостоятельно, используя коварные комбинации `formatexpr`
и synID()
. Я предлагаю вам сначала посмотреть на помощь последнего, потому что он содержит вдохновляющие образцы:
for id in synstack(line("."), col("."))
echo synIDattr(id, "name")
endfor
взято из :he synstack
formatexpr
обычно устанавливается на что-то вроде
:set formatexpr=mylang#Format()
, таким образом, делегируя плагину типа файла. Вы можете реализовать эту функцию, чтобы использовать разные поля для разных контекстов синтаксиса.
Помните
- значение по умолчанию formatexpr (если оно отсутствует, formatprg ), вероятно, не подходит для исходного файла (по моему опыту он имеет тенденцию связывать строки, как если бы они были текстовыми параграфами ). Но опять же, вы можете реализовать это любым способом, каким захотите
что подсветка синтаксиса может быть не синхронизирована. Я не уверен, что происходит, когда курсор находится, скажем, на 70% большого документа, и вы выдаете ggVGgq . Он может не полностью обновлять подсветку синтаксиса (это означает, что ваша formatexpr
функция получит «неправильные» значения synID()
. Вы можете обойти это, сказав что-то вроде
:syntax sync fromstart
это снова может повлиять на производительность выделения в зависимости от размера / сложности источника и сценариев выделения