Как иметь в Vim одну подсветку синтаксиса и два цвета с двумя разными начальными / конечными наборами? - PullRequest
2 голосов
/ 11 августа 2011

Допустим, у меня есть файл: memovi.txt (для изучения vi ...), в котором каждая строка имеет одинаковую структуру (объяснение двоеточия команды); например:

dw: удаляет из текущей позиции курсора следующее слово

(примечание: текст белый, фон черный)

Теперь я хочу сделать 2 вещи:

1) выделите команду зеленым цветом Я сделал это, определив регион с начала и конца, что я сделал с start = ≈ и end = ≈

Итак, в моем .vimrc у меня есть:

:command Tran :source syntax.vim

и в моем синтаксисе. Vim у меня есть:

syn region cTran conceal start='≈' end='≈'
hi cTran ctermbg=Black ctermfg=DarkGreen

2) но я хотел бы, конечно, вставить пример (например, d4w) и выделить его другим цветом (пурпурный), и я хотел бы выделить его, поместив его между start = • и end = • принести такой результат, как:

≈dw≈ (таким образом, зеленым цветом): удаляет из текущей позиции курсора в следующее слово • d4w • (таким образом, в пурпурном цвете): удалить 4 слова

Но, похоже, я не могу определить одну подсветку синтаксиса с двумя разными "раскрасками" в зависимости от двух разных начальных / конечных наборов. Или я могу?

Заранее спасибо

1 Ответ

2 голосов
/ 11 августа 2011

Синтаксис файла справки vim (help.vim) является хорошим шаблоном для такого поведения.Он использует бар "|"разграничить справочные гиперссылки.Затем строка скрывается.

Вот синтаксис.vim, который должен достичь того, что вы хотите для разделителей ASCII | и =.Я не проверял это с вашими персонажами Юникода, но я не понимаю, почему что-то должно измениться (хотя я не обучен в капризах Юникода).

syn match cTransA "|.*|" contains=delimA
syn match cTransB "=.*=" contains=delimB
syn match delimA contained '|' conceal
syn match delimB contained '=' conceal
hi cTransA ctermfg=DarkGreen
hi cTransB ctermfg=Magenta

Надеюсь, это поможет.

...