20

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

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

5 ответов5

15

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

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

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

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

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

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

7

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

:help perl-patterns

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

:help if_perl.txt
4

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

/\v"your regex"

вместо:

/"your regex"
2

Вот решение от http://vim.wikia.com/wiki/Perl_compatible_regular_expressions

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

(Проверьте с помощью :ver что +perl или +perl/dyn скомпилированы в.)

2

Используйте плагин eregex.vim . Это очень полезно, и у меня не было проблем с этим.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .