VIM搜索/替换2个括号或列之间的空格

时间:2010-03-24 19:40:10

标签: regex vim replace

给出以下一行:

[aaaa bbbb cccc dddd] [decimal](18, 0) NULL,

如何仅在Vim的第一组括号之间替换空格? / s命令会是什么样的?

更新

这是打算结果

    [aaaa_bbbb_cccc_dddd] [decimal](18, 0) NULL,

3 个答案:

答案 0 :(得分:7)

最简单的方法是直观地选择[] ed字符串的内容,然后根据该选择执行替换:

vi]:s/\%V \%V/_/g

但是,如果您尝试以编程方式执行操作,则效果不佳。在这种情况下,您可以匹配整个[] ed字符串,并使用replacement expression来构建结果。

:s/\[[^\]]*\]/\=substitute(submatch(0), ' ', '_', 'g')/g

答案 1 :(得分:1)

正常设置'魔术'你想做的事

:s/] \[/][/

或更加狂热

:s/]\zs\s\+\ze\[//

或使用正则表达式中明确设置的魔术等级

:s/\V]\zs\s\+\ze[//

\ zs和\ ze将替换限制为它们所包含的区域。

\ M完全关闭魔法,所以每个字符或字符组合都没有前缀\

'magic'(:help 'magic')是一个全局选项,用于确定如何解释正则表达式中特殊字符的潜在特征。

答案 2 :(得分:-1)

您可以随时进行交互式查找和替换,这可以使用标记c

来完成