2011-04-28 121 views
10

我想删除所有符合此正则表达式的方括号:\[.*\].*{,但我只想删除括号,而不是后面的内容 - 即,我想删除括号以及它们内部的内容,只有当他们跟着一个开放的大括号。在Vim中搜索/替换

我该如何做到这一点与Vim的搜索/替换?

回答

13

您可以使用\zs\ze来设置开始和比赛结束。

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

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

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

欲了解更多信息,请参阅:help /\zs:help pattern

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

+0

我不知道这个存在!优秀的提示! – 2011-04-28 15:33:30

0

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

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

+0

这正是我的问题,我想保持大括号,只有删除方括号里面有什么他们。 – 2011-04-28 14:47:23

+0

哦,我不确定你是否需要在vim中使用正则表达式的语法。我用另一个可能的解决方案编辑了我的答案,尽管现在已经发布了几个工作答案。 – 2011-04-28 14:53:08

2

如何:

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

注意,\ze项目标志着比赛结束,所以任何如下不会被替换。

3

如果您环绕你的正则表达式的最后一位在括号中你可以再次使用您的更换:

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

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

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

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

这将突出你会更换什么都occurrances 。
然后没有一个搜索词运行%s命令来让它重新使用过去的搜索词

:%s//\1/g