所以我有这个字符串
fruit banana
fruit apple
fruit grape
planet jupiter
planet mars
planet saturn
我想把这些字符串改成这样
fruit
fruit
fruit
planet jupiter
planet mars
planet saturn
问题是,我如何使用 vim 来做到这一点?
答案1
至少有 5 种方法可以做到:
替换
使用替换,你可以做很多事情(参见:help substitute
)。其中之一是,你可以用捕获组记住第一个单词,方法是用 和 将该部分括起来\(
,\)
匹配行的其余部分(但不记住它),然后使用 用记住的组替换行\1
:
:%s/\(fruit\).*$/\1/
将常规命令应用于一系列行
您可以指定想要影响的行,并提供要应用于每一行的正常模式命令(参见:help :normal
):
:1,3norm Sfruit
这意味着,对于第 1 至 3 行,应用正常模式命令Sfruit
,其中S
表示“删除行并开始插入”,然后您只需在该行上键入所需内容(参见:help S
)。
使用全局命令
您还可以将普通命令应用于与某些模式匹配的行(请参阅:help global
):
:g/^fruit/norm wd$
这仅适用于开头出现单词“fruit”的行(您可以想象其他场景中更复杂的模式)。正常模式命令wd$
意味着:
w " move cursor forward one word
d$ " delete until end of line
(尽管我们可以Sfruit
再次使用)
使用宏
另一种方法是录制宏(参见:help macro
),例如qa0wd$jq
(注意它使用的方法与上面相同)。然后,您可以使用重放宏,
@a
并使用重复多次@@
,或者使用将其应用于所有行:%norm @a
(或者您可以使用范围/模式来指定行,如上所示)。分解如下:
qa " start recording macro into the 'a' register
0 " move cursor to the beginning of the line
w " move cursor forward one word
d$ " delete until end of line
j " move cursor down to the next line
q " finish recording the macro
具有块选择功能
Ctrl
您还可以通过使用+切换到可视块模式来选择您想要的单词
v
(参见:help visual-block
),使用常规 vim 动作突出显示您不想要的文件部分(您可以按将o
光标放在选择块的另一个/对角),最后按d
删除选定的内容。