Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex VIM搜索/替换2个括号或列之间的空格_Regex_Vim_Replace - Fatal编程技术网

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)…。谢谢!