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