在Vim中搜索/替换

时间:2011-04-28 14:39:58

标签: regex vim vi replace

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

如何使用Vim的搜索/替换?

4 个答案:

答案 0 :(得分:13)

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

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

您告诉Vim用空字符串替换\zs\ze之间的内容。

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

有关详细信息,请参阅:help /\zs:help pattern

编辑:在这种情况下,实际上没有必要使用\ zs,但我将其留作教育用途。 :)

答案 1 :(得分:3)

如果在括号中包围正则表达式的最后一位,可以在替换中重复使用它:

:%s/\[.*\]\(.*{\)/\1/g

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

我喜欢在我在搜索中使用它之前构建我的搜索字符串,并在我更改文档之前确保它是正确的:

/\[.*\]\(.*{\)

这将突出显示您将要替换的所有事件 然后运行%s命令而不使用搜索词,以使其重新使用上一个搜索词

:%s//\1/g

答案 2 :(得分:2)

怎么样:

:%s#\[.*\]\ze.*{##g

请注意,\ze项标记了匹配的结尾,因此不会替换任何后续内容。

答案 3 :(得分:0)

这将在当前文件上运行你的正则表达式:

:%s/\[.*\]\(.*{\)/\1/g