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

use*_*549 29 vim regex perl

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

:s/(\w+)/\u$1/g
Run Code Online (Sandbox Code Playgroud)

fra*_*ous 20

您可以通过 vim 中的外部命令使用 ! 过滤任何行或行范围。例如,你可以这样做:

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

这将通过该 perl 命令过滤当前行。(这里:进入命令行模式,.后面的表示当前行;也可以指定行范围或%整个文件等)

如果你想使用 vim 的内置替换模式,你最接近的是使用 vim 的“非常神奇”的选项,\v,如下所示:

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

查看:help pattern:help substitute了解更多详情。我不认为“非常神奇”与 perl 的模式完全相同,但非常接近。不管怎样,如果你对 perl 感觉更舒服,你总是可以使用 perl 本身,如上所述。


gar*_*ohn 11

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

:help perl-patterns
Run Code Online (Sandbox Code Playgroud)

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

:help if_perl.txt
Run Code Online (Sandbox Code Playgroud)

  • +1,`:help perl-patterns` 解决了我以前讨厌 vim 的一件事 (2认同)

小智 10

您还可以使用:

/\v"your regex"
Run Code Online (Sandbox Code Playgroud)

代替:

/"your regex"
Run Code Online (Sandbox Code Playgroud)

  • 你也可以通过在你的 .vimrc 中添加 `nnoremap / /\v` 和 `vnoremap / /\v` 来帮助你自己,这样当你输入 `/` 时它就可以正常工作。 (3认同)
  • 古老的答案,但你能解释一下 `\v` 在做什么吗? (2认同)
  • 喔好吧。 `\v` 表示“非常神奇”:所有正则表达式特殊字符 `|(){}.*?^$` (我错过了什么吗?)按原样运行,并且需要反斜杠才能获得等效的文字,情况就是这样与 Perl。您可以通过环视等方式完成 Perl 所做的大部分操作,但使用不同的语法:请参阅 http://vimdoc.sourceforge.net/htmldoc/pattern.html#perl-patterns (2认同)

小智 6

这是来自http://vim.wikia.com/wiki/Perl_known_regular_expressions的解决方案

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

(用:ver+perl进行+perl/dyn验证。)