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

时间:2014-04-21 21:46:24

标签: vim

我正在使用类似于以下内容的行编辑文件:

{"a_function", a_function},
{"a_second_function", a_second_function},

我想将下划线转换为空格,但仅限于引号内。有没有办法只使用:substitute命令执行此操作?我知道我可以通过录制宏来做到这一点,并且可能有插件可以做到这一点,但为了聪明起见,我想用:substitute命令一次性完成这个。

4 个答案:

答案 0 :(得分:6)

这个命令可以做你想要的:

:%s/\v(".{-}")/\=substitute(submatch(1), "_", " ", "g")

我在每一行捕获第一对引号,然后将其用作替换,删除所有下划线。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我的PatternsOnText plugin提供:SubstituteInSearch命令。有了它,您首先搜索引用的字符串,然后仅在匹配项中执行:substitute

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

答案 3 :(得分:1)

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

:'<,'>s/\%V_/ /g,只能替代视觉区域。

这虽然不够灵活,但并不总是可行,但是简单快捷。


然而,有时候精心设计的正则表达式也是一种选择。

在您的简单示例中,这就足够了:s/\v_(\S*")@=/ /g