我想删除符合此正则表达式的所有方括号:\[.*\].*{
,但我只想删除括号,而不是后面的内容 - 即,我想删除括号及其中的内容,只有当它们后面跟着一个开口大括号时。
如何使用Vim的搜索/替换?
答案 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