vim使用先前匹配的模式搜索和替换表达式

时间:2018-03-28 19:27:06

标签: vim

我的数据文件中有多行,如下所示

<some-text>:<fixed-string>

我希望在冒号周围添加空格以提供给其他期望的工具。我想在vim(不是sed或其他工具)中这样做。

我试图做像

这样的事情
%s/[a-z]*:<fixed-string>/\1 : <fixed-string>/gc

这似乎不起作用。有人可以帮忙吗?照顾上层和上层小写我尝试使用(\ a)*即下一步。

2 个答案:

答案 0 :(得分:3)

您没有任何捕获组,因此无法使用\1。您需要使用捕获组,\zs\ze,或者后视和前瞻。

使用捕获组:

:%s/\(\l*\):fixed/\1 : fixed/gc

使用\zs\ze设置匹配的开始和结束

:%s/\l*\zs:\zefixed/ : /gc

前瞻,\@=和后瞻,\@=

:%s/\(\l*\)\@<=:\(fixed\)\@=/ : /gc

就个人而言,我使用\zs\ze,因为它们最容易推理和使用。我也在使用\l这是[a-z]的简写。

如需更多帮助,请参阅:

:h /\(
:h /\zs
:h /\@<=
:h /\@=
:h /\l

答案 1 :(得分:1)

请试试这个:

%s / \(。* \):fixed-string $ / \ 1:fixed-string / g

或者这个:

%s /:fixed-string $ /:fixed-string / g