vim: использование matchadd «глобально» (т.е. выделение группы строк) - PullRequest
2 голосов
/ 30 декабря 2011

У меня есть файл, который выглядит примерно так

def foo bar {{
   // some stuff in here that shouldn't have }}; in it
}};

И я хотел бы синтаксически выделить некоторые типы этих блоков.Мое первое приближение порядка было таким:

highlight DefFoo ctermfg=darkgreen                  
let defFoo = 'def foo .* {{.*}};'             
call matchadd('DefFoo', defFoo)     

Однако, единственное, что выделяется, это первая строка def foo bar {{.Я пытался найти способ выполнить matchadd, который выполняет поиск по всему миру, но мне не удалось.Есть ли способ сделать это?

1 Ответ

2 голосов
/ 30 декабря 2011

. не соответствует новым строкам. \_. делает с другой стороны. Таким образом, ваш шаблон будет:

def foo \_.* {{\_.*}};

Я считаю, что одноразовые матчи, использующие что-то вроде следующего, хороши:

:match Error /foo-pattern-here/

Может быть очищено с помощью

:match

Обратите внимание, что :match с дорогим шаблоном может привести к тому, что сопоставленный текст не будет выделен должным образом на некоторых перерисовках экрана. Либо скорректируйте свой рисунок, либо увеличьте 'redrawtime'

Для получения дополнительной информации:

:h :match
:h /\_.
...