2015-09-07 3 views
11

Согласно this page вы можете использовать Perl совместимые регулярные выражения сВИМ: Интерактивный поиск и замена с Perl Compatible регулярных выражений

:perldo s/pattern/insert/g.

Это прекрасно работает.

Но как я могу получить interactive поиск и замена синтаксисом PCRE в vim?

Поскольку это не работает с perldo Я ищу другое решение.

+2

vim regex предлагает больше возможностей, чем регулярное выражение Perl в vim. стоит изучать – Kent

+0

Вы имеете в виду, что пользователь смотрит и подтверждает каждую замену? Насколько мне известно, таких встроенных функций нет. – melpomene

+1

Кстати, это не PCRE; это реальный код Perl с реальными регулярными выражениями Perl. – melpomene

ответ

5

До текущей версии в Vim, нет никакого способа сделать :s/[perlRegex]/bar/c

Так вы просите особенность, которая не существует ,

Вы можете сделать сопоставление с verymagic, однако это не совместимый флаг Perl Regex. Он по-прежнему использует движок vimregex, просто изменил способ избежать шаблонов регулярных выражений.

Например, в Perl, вы можете сделать предпросмотр/за (?<=foo)..., (?=foo), (?!foo).., вы можете использовать удобный \K: som.*ing\Kwhatever и т.д., вы не можете использовать этот синтаксис в Vim непосредственно, независимо от того, который «волшебного» уровня вы установили. Vim имеет ту же функцию, но другой синтаксис:

\@= 
\@! 
\@<= 

и также \zs \ze очень удобно, даже более мощным, чем в Perl \K.

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

Если вам действительно нужно выполнить сложное сопоставление образцов и действительно нужно сделать их в vim, изучите регулярное выражение vim! Это не сложно для вас, если вы «хорошо знаете ПК»

+0

': help perl-patterns' является хорошим для поиска эквивалентного шаблона perl для vim. – FDinoff

0

В вашем примере s/pattern/insert/g - это команда perl, а не команда Vim, использующая синтаксис регулярных выражений, совместимый с perl.

Если у perl нет эквивалента флага Vim /c, вам нужно будет найти альтернативный метод, например ... написание реального скрипта perl.

+0

Я предпочитаю интерактивное решение. – guettli

+2

Вы не можете иметь это с ': perldo' в одиночку. – romainl

+0

Я добавил примечание к вопросу: Поскольку это не работает с 'perldo', я ищу другое решение. – guettli

1

Вероятно, ближе вы можете получить:

:s/\vfoo/bar/gc 
+0

Я не знаю '\ v'. Где я могу найти документы для этого? – guettli

+0

Прочитайте разные магические режимы Вима: http://vimdoc.sourceforge.net/htmldoc/pattern.html#/magic –

+0

В общем, если вы хотите, чтобы регулярное выражение, подобное Perl, вы можете использовать очень волшебный режим (\ v) в ваши выражения. Я уверен, что это не точный матч 1-1 с Perl, но он очень мощный, и я еще не получил его. –

0

Предлагаю попробовать eregex plugin. Он сопоставляет регулярные выражения, совместимые с perl, с синтаксисом regex VIM.

Смежные вопросы