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

vim使用先前匹配的模式搜索和替换表达式,vim,Vim,我的数据文件中有多行,如下所示 <some-text>:<fixed-string> : 我想在冒号周围增加一些空间,以提供给其他一些需要这样做的工具。我希望在vim中执行此操作(而不是sed或其他工具) 我试着做一些类似的事情 %s/[a-z]*:<fixed-string>/\1 : <fixed-string>/gc %s/[a-z]*:/\1:/gc 这似乎不起作用。有人能帮忙吗?为了处理大写和小写,我尝试使用(\a)*这是下一步。

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

<some-text>:<fixed-string>
我想在冒号周围增加一些空间,以提供给其他一些需要这样做的工具。我希望在vim中执行此操作(而不是sed或其他工具)

我试着做一些类似的事情

%s/[a-z]*:<fixed-string>/\1 : <fixed-string>/gc
%s/[a-z]*:/\1:/gc
这似乎不起作用。有人能帮忙吗?为了处理大写和小写,我尝试使用(\a)*这是下一步。

请尝试以下操作:

%s/\(.*\):固定字符串$/\1:固定字符串/g

或者这个:

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

请尝试以下操作:

%s/\(.*\):固定字符串$/\1:固定字符串/g

或者这个:


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

您没有任何捕获组,因此无法使用
\1
。您要么需要使用捕获组,
\zs
&
\ze
,要么向后看,向前看

使用捕获组:

:%s/\(\l*\):fixed/\1 : fixed/gc
使用
\zs
\ze
设置匹配的开始和结束

:%s/\l*\zs:\zefixed/ : /gc
向前看,
\@=
,向后看,
\@=

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

您没有任何捕获组,因此无法使用
\1
。您要么需要使用捕获组,
\zs
&
\ze
,要么向后看,向前看

使用捕获组:

:%s/\(\l*\):fixed/\1 : fixed/gc
使用
\zs
\ze
设置匹配的开始和结束

:%s/\l*\zs:\zefixed/ : /gc
向前看,
\@=
,向后看,
\@=

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

您的文本实际上是否在
标记中?
%s/\([^::\+\):fixed/\1:fixed/gc
您的文本实际上是否在
标记中?
%s/\([^::\+\):fixed/\1:fixed/gc