Regex VIM搜索/替换2个括号或列之间的空格
给出以下行:Regex VIM搜索/替换2个括号或列之间的空格,regex,vim,replace,Regex,Vim,Replace,给出以下行: [aaaa bbbb cccc dddd] [decimal](18, 0) NULL, 如何仅替换Vim中第一组支架之间的空格?/s命令是什么样子的 更新: 这是预期的结果 [aaaa_bbbb_cccc_dddd] [decimal](18, 0) NULL, 使用“魔法”的正常设置,您会想要执行 :s/] \[/][/ 或者更夸张地说 :s/]\zs\s\+\ze\[// 或者使用正则表达式中显式设置的魔法级别 :s/\V]\zs\s\+\ze[// \zs
[aaaa bbbb cccc dddd] [decimal](18, 0) NULL,
如何仅替换Vim中第一组支架之间的空格?/s命令是什么样子的
更新:
这是预期的结果
[aaaa_bbbb_cccc_dddd] [decimal](18, 0) NULL,
使用“魔法”的正常设置,您会想要执行
:s/] \[/][/
或者更夸张地说
:s/]\zs\s\+\ze\[//
或者使用正则表达式中显式设置的魔法级别
:s/\V]\zs\s\+\ze[//
\zs和\ze将替换限制在它们所包围的区域内
\M完全关闭了魔法,所以每个没有前缀\
的字符或字符组合都是按字面理解的
“magic”(
:help“magic”
)是一个全局选项,用于确定正则表达式中潜在特殊字符的解释方式。最简单的方法是直观地选择[]
ed字符串的内容,并仅对该选择执行替换:
vi]:s/\%V \%V/_/g
但是,如果您试图以编程方式来做事情,那么这种方法不会很好地工作。在这种情况下,您可以匹配整个[]
ed字符串,并使用a来构造结果
:s/\[[^\]]*\]/\=substitute(submatch(0), ' ', '_', 'g')/g
您可以随时进行交互式查找和替换,这可以通过标记
c
完成,因为您忘记了“向后看”和“向前看”(s/]\@正是\V
使\
以外的一切都能被逐字解释。\M
是\V
和默认设置之间的一步。更改'magic'
的值只是自找麻烦。@jamessan oops,谢谢。修复了。@ZyX\zs&\ze更容易记住,我想得更快,所以我更喜欢在可能的情况下使用它们。阅读更新后,我发现我的答案完全不是问题的答案。替换表达式很酷。我最好的方法是替换第一个空格块,然后按下&直到它告诉你找不到模式。我需要的是=替换(子匹配(0)…。谢谢!