所以我有这个字符串
fruit banana
fruit apple
fruit grape
planet jupiter
planet mars
planet saturn
Run Code Online (Sandbox Code Playgroud)
我想将这些字符串更改为这样
fruit
fruit
fruit
planet jupiter
planet mars
planet saturn
Run Code Online (Sandbox Code Playgroud)
问题是,我怎样才能用 vim 做到这一点?
至少有 5 种方法可以做到:
通过替换,您可以做很多事情(请参阅参考资料:help substitute)。\(一个是,您可以通过用和将该部分括起来\),匹配该行的其余部分(但不记住它),然后使用以下方法用记住的组替换该行,从而记住带有捕获组的第一个单词\1:
:%s/\(fruit\).*$/\1/
Run Code Online (Sandbox Code Playgroud)
您可以指定要影响的行并给出要应用于每行的正常模式命令(请参阅:help :normal):
:1,3norm Sfruit
Run Code Online (Sandbox Code Playgroud)
这意味着,对于第 1 行到第 3 行,应用正常模式命令Sfruit,其中S
表示“删除行并开始插入”,然后您只需在该行中键入您想要的内容(请参阅:help S)。
您还可以将普通命令应用于与某些模式匹配的行(请参阅:help global):
:g/^fruit/norm wd$
Run Code Online (Sandbox Code Playgroud)
这仅适用于开头出现“水果”一词的行(您可以想象在其他场景中更复杂的模式)。正常模式命令的wd$含义是:
w " move cursor forward one word
d$ " delete until end of line
Run Code Online (Sandbox Code Playgroud)
(虽然我们可以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
Run Code Online (Sandbox Code Playgroud)
Ctrl您还可以通过使用+切换到可视块模式来选择您想要的单词
v(请参阅:help visual-block),使用常规 vim 动作突出显示文件中您不需要的部分(您可以按 将o光标放在文件的另一个/对角上)选择块),最后按d删除所选内容。
| 归档时间: |
|
| 查看次数: |
10032 次 |
| 最近记录: |