在vim中,有时我会替换行中前几次匹配项,但是并不是每个人都愿意替换g。例如:
a a a a a
至
b b b a a
我知道我可以使用:s/a/b/[enter]:[up][enter]:[up][enter],但是在三个重复中就很乏味了,我的行可能有10个以上的替换。
我试过了:
:s/a/b/3g:vim抱怨尾随字符。:s/a/b/3:更改此行以及随后两行中的第一个匹配项。3:s/a/b:与以前相同。:s/a/b/g3:更改此行以及随后两行的所有匹配项。:3s/a/b:更改第3行上的第一个匹配项。:/a/,3/a/s/a/b:更改文件中a包含的下一行和第三行之间的每一行的第一个匹配项a(如有必要,提示反转)。:/a/,/\([^a]*a\)\{3\}/s/a/b/:更改此行与第二行之间每行的第一个匹配项,并在其上加上3as(而且对于多字符搜索而言,这很难扩展)。
还有其他各种寻址模式,没有一种有效。我必须说,关于:s尝试找到该问题答案的命令,我已经学到了很多东西,但是我仍然没有解决。
有人知道怎么做吗?
(特定范围的奖励点,例如第二到第四次出现)
2
我敢肯定,您不能在vim中做到这一点,但是为了使它不那么乏味,您知道“ n”和“”吗。在视觉模式下?也就是说,您使用/ pattern /查找要更改的内容,使用“ cw”或其他方式进行更改,然后使用“ n”(仅n,不带引号)查找下一个模式并单击“”。(只是句号,没有引号)以执行最后的编辑。
—
Bruce Ediger
@BruceEdiger我也知道
—
凯文
n和.,虽然我没想到在这里使用它们。当然可以改善,谢谢。
s/a/=something/应该做的把戏(:help sub-replace-=)。我对Vim的流利程度不足以立即完成写作something。
注意:
—
科夫(Kowh)2011年
:[up][enter]可以替换为&,这仍然不是理想选择,但至少减轻了痛苦。