我可以在vim命令行中使用perl正则表达式吗?


27

我想在vim命令行上使用perl正则表达式。例如,要在当前行上大写单词,可以输入:

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

From :help perl-patterns ... 就可以做什么而言,Vim的正则表达式与Perl最相似。它们之间的区别主要是符号 uhhmm ...就好像您可以交流的内容一样,中文与希腊语相似。区别主要是符号。正则表达式只是符号!如果一种记号不如另一种记号更熟悉,则差异令人讨厌。这就是为什么人们首先问有关perl的原因!
dreftymac

Answers:


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
同样,非常神奇的是,您不必记住在不使用时(会被特殊对待{:“除'0'-'9','a'-'z','A'-'Z'和' “ _”具有特殊含义。” 谢谢!
Ayrat

10

不,您不能以这种方式使用Perl正则表达式。有关学习Perl正则表达式组件的Vim等效项的帮助,请参见

:help perl-patterns

但是,您可以将Perl用作外部过滤器,如frabjous所述。如果您的Vim是使用该+perl功能编译的,则还可以使用Perl接口在Vim中执行Perl命令。看到

:help if_perl.txt

2
+1,:help perl-patterns解决了我以前讨厌vim的一件事
Mark K Cowan 2014年

8

您还可以使用:

/\v"your regex"

代替:

/"your regex"

这是我一直在寻找的答案!
alextercete '16

您还可以通过在.vimrc中添加nnoremap / /\vvnoremap / /\v来帮助自己,以便在键入/时起作用。
mattmc3


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.