Vim regex пропускают разделители

Я пытаюсь создать синтаксический файл vim, и я хотел бы сопоставить следующий бит текста:

@[one two three four]

В принципе, я хочу совместить one и two как два отдельных совпадения, и я не забочусь о three и four code> (или что-нибудь после них). Я также не хочу включать разделитель @ [ в начале выражения.

Я пробовал делать это с регионами, например:

syn region langParamOne matchgroup=langListStart start=/@\[/ end=/\s\|\]/
syn region langParamTwo matchgroup=langListStart start=/@\[\S\+\s\+/ end=/\s\|\]/

К сожалению, это не только выглядит грязным, но и vim будет соответствовать только одному из регионов, так как один содержит другой.

Как я могу установить соответствие для этого синтаксиса, но не включать начальный @ [ в совпадение?

2
nl ja de

1 ответы

Как насчет этого:

syn region langParam matchgroup=langListStart start=/@\[/ end=/\]/ contains=langParamOne,langParamTwo
syn match langParamOne /\(@\[\)\@<=\S\+/ contained
syn match langParamTwo /\(@\[\S\+\s\)\@<=\S\+/ contained
1
добавлено
@JakeKing Не только это - стоит отметить, что он поддерживает переменную длину look-behind (как используется в langParamTwo ). Это то, что даже сегодня многие ароматы регулярных выражений по-прежнему не поддерживают.
добавлено автор Tomalak, источник
Ах, поэтому vim regexes do поддерживает look-ahead/look-behind. Думаю, я пропустил это. Большое спасибо, он отлично работает!
добавлено автор Alexis King, источник
pro.vim
pro.vim
296 участник(ов)

Содружество пользователей Vim Родственные чаты → @proDOT