Vim.在每个单词后面的斜杠之间加上*

  • 本文关键字:之间 单词 Vim regex vim vi
  • 更新时间 :
  • 英文 :


我有文字:

alpha/beta/gamma
alpbeta/gamma
alpha/beta/gamma
This is an example.  Test1,Test2,Test3
alpha/beta/gamma
This is an example.
Test1,Test2,Test3

我想在每个单词的斜杠(/)之间添加*,但是我没有找到我的模式…

我命令:

:%s//(.*?)//*/g

result I want:

alpha/beta*/gamma
alpbeta/gamma
alpha/beta*/gamma
This is an example.  Test1,Test2,Test3
alpha/beta*/gamma
This is an example.
Test1,Test2,Test3

可以使用

:%s//[[:alpha:]]+ze//&*/g

或者

:%s//[^/]*ze//&*/g

这里,模式是/[[:alpha:]]+ze/:

  • /[[:alpha:]]+-消费部分:/然后一个或多个字母
  • [^/]*-/以外的零个或多个字符
  • ze/-被消耗的文本结束,然后必须跟随/字符(就好像它是普通NFA正则表达式中的(?=/)正向向前看)。

替换为代表整个匹配值的&*字符。

g标志替换所有出现的标记。

根据您的示例,看起来您希望*/最后出现在该行之前。

我会去记录一个宏,做$F/i*^VESCj(其中^VCTRL+VESCESC

这意味着转到行尾,向后找到/,进入插入模式,输入*,返回正常模式,顺行。

您可以将其记录为宏,并使用:%normal @x(如果您在x上录制)等内容回放整个文件

Vim使用自己的正则表达式方言,其中:

  • .*?中的*?没有意义,
  • 分组括号必须用反斜杠转义,
  • 和其他方言的各种不同之处…

现在,你的模式应该匹配:

  • a斜杠,/
  • 后接左括号(
  • 后接0个或多个字符,.*
  • 后加问号,?
  • 后接右括号)
  • 后面跟着另一个斜杠,/

在你的样品中找不到。

参见:help perl-patterns

最新更新