我知道vim中的简单搜索和替换命令(:%s/apple/orange/g)
,我们找到所有'苹果'并用'orange'替换它们。
但是有可能在vim中做这样的事情吗? 在文件中找到所有'Wheat'并在跳过下一个单词后添加“store”(如果有的话)?
实施例: 原始文件内容:
Wheat flour
Wheat bread
Rice flour
Wheat
搜索并替换后:
Wheat flour store
Wheat bread store
Rice flour
Wheat store
答案 0 :(得分:5)
这是使用global
命令的最佳时机。它将命令应用于与给定正则表达式匹配的每一行。
*:g* *:global* *E147* *E148*
:[range]g[lobal]/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} matches.
在这种情况下,命令为norm A store
,正则表达式为wheat
。所以把它们放在一起,我们有
:g/Wheat/norm A store
现在,可以使用substitute命令执行此操作,但我发现global更方便,更易读。在这种情况下,你有:
:%s/Wheat.*/& store
这意味着:
:%s/ " On every line, replace...
Wheat " Wheat
.* " Followed by anything
/ " with...
& " The entire line we matched
store " Followed by 'store'