Могу ли я использовать регулярные выражения perl в командной строке vim?
27
Я хочу использовать регулярные выражения perl в командной строке vim. Например, чтобы использовать слова с заглавной буквы в текущей строке, вы можете набрать:
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, если вам удобнее, как указано выше.
также, с очень волшебством, вам не нужно запоминать то, что (обрабатывается специально, пока {нет: «все символы ASCII, кроме« 0 »-« 9 »,« a »-« z »,« A »-« Z »и «_» имеют особое значение ». Благодарность!
Ayrat
10
Нет, вы не можете использовать регулярные выражения Perl таким образом. Для получения справки по изучению эквивалентов Vim для компонентов регулярных выражений Perl см.
:help perl-patterns
Однако вы можете использовать Perl в качестве внешнего фильтра, как объяснено в frabjous. Вы также можете выполнять команды Perl в Vim, используя интерфейс Perl, если ваш Vim был скомпилирован с этой +perlфункцией. Видеть
Ответы:
Вы можете отфильтровать любую строку или диапазон строк с помощью внешней команды в vim, используя!. Например, вы можете сделать:
:.!perl -pe "s/(\w+)/\u\1/g"
который отфильтрует текущую строку через эту команду perl. (Здесь,
:
чтобы перейти в режим командной строки, а.
следующее означает текущую строку; вы также можете указать диапазон строк или%
для всего файла и т. Д.)Если вы хотите использовать встроенные шаблоны подстановки в vim, вам лучше всего использовать опцию vim «очень волшебная», \ v, вот так:
:s/\v(\w+)/\u\1/g
смотрите
:help pattern
и:help substitute
для более подробной информации. Я не думаю, что «очень волшебство» вполне идентично шаблонам Perl, но очень близко. В любом случае, вы всегда можете использовать сам Perl, если вам удобнее, как указано выше.источник
(
обрабатывается специально, пока{
нет: «все символы ASCII, кроме« 0 »-« 9 »,« a »-« z »,« A »-« Z »и «_» имеют особое значение ». Благодарность!Нет, вы не можете использовать регулярные выражения Perl таким образом. Для получения справки по изучению эквивалентов Vim для компонентов регулярных выражений Perl см.
Однако вы можете использовать Perl в качестве внешнего фильтра, как объяснено в frabjous. Вы также можете выполнять команды Perl в Vim, используя интерфейс Perl, если ваш Vim был скомпилирован с этой
+perl
функцией. Видетьисточник
:help perl-patterns
решил одну вещь, которую я раньше ненавидел в vimВы также можете использовать:
вместо того:
источник
nnoremap / /\v
иvnoremap / /\v
.vimrc, чтобы при вводе/
он просто работал.Вот решение от http://vim.wikia.com/wiki/Perl_compatible_regular_expressions
:perldo s/(\w+)/\u$1/g
(Подтвердите с
:ver
этим+perl
или+perl/dyn
скомпилировано в.)источник
Используйте плагин eregex.vim . Это очень полезно, и у меня не было проблем с этим.
источник