仅使用替换命令替换vim中的部分行

仅使用替换命令替换vim中的部分行,vim,Vim,我正在编辑一个文件,其行与以下内容类似: {"a_function", a_function}, {"a_second_function", a_second_function}, 我想将下划线转换为空格,但只能在引号内。是否有方法仅通过使用:substitute命令来完成此操作?我知道我可以通过录制宏来做到这一点,而且可能有一些插件可以做到这一点,但是为了聪明起见,我想用:substitute命令一次性完成这一点 :%s/\(".*\)_\(.*"\)/\1 \2/g 每次调用它时,它将替

我正在编辑一个文件,其行与以下内容类似:

{"a_function", a_function},
{"a_second_function", a_second_function},
我想将下划线转换为空格,但只能在引号内。是否有方法仅通过使用
:substitute
命令来完成此操作?我知道我可以通过录制宏来做到这一点,而且可能有一些插件可以做到这一点,但是为了聪明起见,我想用
:substitute
命令一次性完成这一点

:%s/\(".*\)_\(.*"\)/\1 \2/g

每次调用它时,它将替换所有文档中的一个下划线。因此,如果引号之间最多有5个下划线,只需调用5次即可设置。

此命令可以执行以下操作:

:%s/\v(".{-}")/\=substitute(submatch(1), "_", " ", "g")
我捕获每行的第一对引号,然后将其用作替换,删除所有下划线。

My提供了一个
:SubstituteInSearch
命令。使用它,您首先搜索带引号的字符串,然后仅在匹配项中执行
:substitute

/".\{-}"
:SubstituteInSearch/_/ /g

另一种方法是选择要在视觉块模式下操作的文本,然后执行以下操作:


:“文本总是这样重复吗<代码>{“x”,x},{“y”,y}
等等?在这种特殊情况下,文本可能以该模式重复。不过,我还有其他地方可能不是这样。看来我的问题实际上可能是另一个问题的重复。我得复习了。这主意不错。在我链接的问题中,您可能会喜欢使用子匹配的一些更简单的解决方案。基于我的链接问题:
%s/“\zs\(\w*\)\ze/\=submatch(1),“\u',”,“'g')/g
。爵士乐是我的vim曲目中缺少的。只是好奇而已。这种模式与
“[^”]*”
”有何不同?@RSahu,这只是达到相同目标的不同方式。