Регулярное выражение для выделения маркеров с отступом в Vim - PullRequest
2 голосов
/ 14 августа 2010

Я пытаюсь написать несколько правил соответствия в файле синтаксиса Vim, чтобы выделить отступы.Моя проблема заключается в том, что в подсветке синтаксиса используется цвет фона, поэтому я хотел бы сопоставлять только символу маркера, а не предыдущему пробелу.

Как я могу сказать "match \ d., +, - и * только если ему предшествует ^ \ s \ {0,1} (но не не соответствует пробелу)"

При следующих правилах сопоставления

syn match notesBullet /^\s*\*/
hi def link notesBullet String 
syn match notesNumber /^\s*\d*\./
hi def link notesNumber String
syn match notesMinus /^\s*\-/
hi def link notesMinus Todo 
syn match notesPlus /^\s*+/
hi def link notesPlus Plus

я получаю следующий результат:

http://a.imageshack.us/img155/933/screenshot20100813at100.png

Есть ли способ сказать "еслипредшествует, но не включает "в регулярное выражение Vim?

Ответы [ 2 ]

3 голосов
/ 14 августа 2010

В дополнение к обходным путям, упомянутым Алексом, шаблоны Vim также имеют концепцию «начало матча» и «конец матча», которые обозначаются \zs и \ze соответственно.Vim будет совпадать только тогда, когда будет весь шаблон, но исключит все до \zs и \ или после \ze (вам не нужно указывать оба) из соответствия.

Так что в вашем случае, вы можете добавить \zs после вашего шаблона пробела и перед шаблоном маркера / числа.Например: /^\s*\zs\d*\./

2 голосов
/ 14 августа 2010

Есть ли какой-нибудь способ сказать "если ему предшествует" в регулярном выражении Vim?

Да, это называется соответствием "нулевой ширины", \@<= (известно как«отстающий» в подъязыке RE в Perl и Python).См. здесь для всех деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...