在Vim中搜索/替换

Ami*_*hum 11 regex vi vim replace

我想删除符合此正则表达式的所有方括号:\[.*\].*{但我只想删除括号,而不是后面的内容 - 即,我想删除括号及其内部的内容,只有当它们后跟一个开口时大括号.

我如何使用Vim的搜索/替换来做到这一点?

Xav*_* T. 14

您可以使用\zs\ze设置匹配的开头和结尾.

:%s/\zs\[.*\]\ze.*{//g 应该管用.

你告诉Vim来替换一下之间\zs,并\ze通过一个空字符串.

(注意,您需要在Vim二进制文件中编译的+语法选项)

有关更多信息,请参阅:help /\zs:help pattern

编辑:实际上\ zs在这种情况下没有必要,但我把它留给教育目的.:)


Sam*_*nck 5

如果您将正则表达式的最后一点括在括号中,您可以在替换中重新使用它:

:%s/\[.*\]\(.*{\)/\1/g
Run Code Online (Sandbox Code Playgroud)

\1 引用括号中的正则表达式部分。

我喜欢在搜索和替换之前构建我的搜索字符串,以确保它在我更改文档之前是正确的:

/\[.*\]\(.*{\)
Run Code Online (Sandbox Code Playgroud)

这将突出显示您将替换的所有事件。
然后在没有搜索词的情况下运行 %s 命令以使其重新使用最后一个搜索词

:%s//\1/g
Run Code Online (Sandbox Code Playgroud)