仅在 Vim 中的匹配搜索中替换字符串
Replace string only in matched search in Vim
我知道您可以使用 Vim:
替换文件中的某些模式
:%s/<pattern>/<replacement>/g
我想做的是仅在辅助搜索匹配的情况下执行模式替换,例如:如果我的文件中有以下行:
00_sub_5_train
01_sub_6_train
02_sub_5_train
03_sub_9_train
04_sub_8_train
05_sub_5_train
06_sub_5_train
我想执行::%s/train/not_train/g
仅在找到字符串 'sub_5' 的行上,这样剩下的就是:
00_sub_5_not_train
01_sub_6_train
02_sub_5_not_train
03_sub_9_train
04_sub_8_train
05_sub_5_not_train
06_sub_5_not_train
这可能吗?
您可以直接应用下面的图案。您可以使用 sub_5_train
完全应用该模式
:%s/sub_5_train/sub_5_not_train/g
根据评论,如果您有不同的内容 post sub_5,您可以进行条件替换,如下所示:
:g/sub_5/ s/train/not_train
在这里,如果我们找到 sub_5,我们将只对该行进行替换。
基本上,我正在尝试使用如下所示的 g 命令。在这里,对于 cmd
,我使用替代命令。 more on vim g command
:[range]g/pattern/cmd
我们也可以使用正后视正则表达式,像这样:
:%s/\v(_sub_5)@<=_train/no_train/g
\v ......................... very magic (avoiding escapes)
() ......................... we are grouping the pattern where subs should occur
@<= ........................ if the preceding group matchas substitute what follows
当然,我们可以改变范围; '<,'>
而不是 %
对所选区域进行替换。
我在这里引用的是外部 link 但您也可以研究正面和负面的外观断言。
如果您使用 neovim,另一件有趣的事情是启用 inccommand
选项,它允许您在键入命令时选择替换。
我知道您可以使用 Vim:
替换文件中的某些模式:%s/<pattern>/<replacement>/g
我想做的是仅在辅助搜索匹配的情况下执行模式替换,例如:如果我的文件中有以下行:
00_sub_5_train
01_sub_6_train
02_sub_5_train
03_sub_9_train
04_sub_8_train
05_sub_5_train
06_sub_5_train
我想执行::%s/train/not_train/g
仅在找到字符串 'sub_5' 的行上,这样剩下的就是:
00_sub_5_not_train
01_sub_6_train
02_sub_5_not_train
03_sub_9_train
04_sub_8_train
05_sub_5_not_train
06_sub_5_not_train
这可能吗?
您可以直接应用下面的图案。您可以使用 sub_5_train
完全应用该模式:%s/sub_5_train/sub_5_not_train/g
根据评论,如果您有不同的内容 post sub_5,您可以进行条件替换,如下所示:
:g/sub_5/ s/train/not_train
在这里,如果我们找到 sub_5,我们将只对该行进行替换。
基本上,我正在尝试使用如下所示的 g 命令。在这里,对于 cmd
,我使用替代命令。 more on vim g command
:[range]g/pattern/cmd
我们也可以使用正后视正则表达式,像这样:
:%s/\v(_sub_5)@<=_train/no_train/g
\v ......................... very magic (avoiding escapes)
() ......................... we are grouping the pattern where subs should occur
@<= ........................ if the preceding group matchas substitute what follows
当然,我们可以改变范围; '<,'>
而不是 %
对所选区域进行替换。
我在这里引用的是外部 link 但您也可以研究正面和负面的外观断言。
如果您使用 neovim,另一件有趣的事情是启用 inccommand
选项,它允许您在键入命令时选择替换。