Могу ли я использовать регулярные выражения perl в командной строке vim?


27

Я хочу использовать регулярные выражения perl в командной строке vim. Например, чтобы использовать слова с заглавной буквы в текущей строке, вы можете набрать:

:s/(\w+)/\u$1/g

From : help perl-pattern ... Регулярные выражения Vim больше всего похожи на Perl с точки зрения того, что вы можете сделать. Разница между ними в основном просто обозначение, хммм ... это все равно, что сказать, что китайский похож на греческий, с точки зрения того, что вы можете общаться. Разница в основном просто обозначения. регулярное выражение не что иное, как запись! Различия раздражают, если одна запись менее знакома, чем другая. Вот почему люди спрашивают о Perl в первую очередь!
dreftymac

Ответы:


19

Вы можете отфильтровать любую строку или диапазон строк с помощью внешней команды в vim, используя!. Например, вы можете сделать:

:.!perl -pe "s/(\w+)/\u\1/g"

который отфильтрует текущую строку через эту команду perl. (Здесь, :чтобы перейти в режим командной строки, а .следующее означает текущую строку; вы также можете указать диапазон строк или %для всего файла и т. Д.)

Если вы хотите использовать встроенные шаблоны подстановки в vim, вам лучше всего использовать опцию vim «очень волшебная», \ v, вот так:

:s/\v(\w+)/\u\1/g

смотрите :help patternи :help substituteдля более подробной информации. Я не думаю, что «очень волшебство» вполне идентично шаблонам Perl, но очень близко. В любом случае, вы всегда можете использовать сам Perl, если вам удобнее, как указано выше.


1
также, с очень волшебством, вам не нужно запоминать то, что (обрабатывается специально, пока {нет: «все символы ASCII, кроме« 0 »-« 9 »,« a »-« z »,« A »-« Z »и «_» имеют особое значение ». Благодарность!
Ayrat

10

Нет, вы не можете использовать регулярные выражения Perl таким образом. Для получения справки по изучению эквивалентов Vim для компонентов регулярных выражений Perl см.

:help perl-patterns

Однако вы можете использовать Perl в качестве внешнего фильтра, как объяснено в frabjous. Вы также можете выполнять команды Perl в Vim, используя интерфейс Perl, если ваш Vim был скомпилирован с этой +perlфункцией. Видеть

:help if_perl.txt

2
+1, :help perl-patternsрешил одну вещь, которую я раньше ненавидел в vim
Mark K Cowan

8

Вы также можете использовать:

/\v"your regex"

вместо того:

/"your regex"

Это ответ, который я искал!
alextercete

Вы также можете помочь себе, добавив nnoremap / /\vи vnoremap / /\v.vimrc, чтобы при вводе /он просто работал.
mattmc3


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.