我正在使用类似于以下内容的行编辑文件:
{"a_function", a_function},
{"a_second_function", a_second_function},
我想将下划线转换为空格,但仅限于引号内。有没有办法只使用:substitute
命令执行此操作?我知道我可以通过录制宏来做到这一点,并且可能有插件可以做到这一点,但为了聪明起见,我想用:substitute
命令一次性完成这个。
答案 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
。