在vim中删除一行的方法

时间:2015-11-05 19:33:52

标签: vim

我需要删除vim中的几行(第42行,第424行和第4242行)。我找到了两种可能的解决方案:

  • 将光标移动到该行的开头,然后按“dd”或

  • 输入':42d'等......

然而,要完成任务,我必须删除所有3行。我应该这样做吗? :42d :423d :4240d

还是这个?

:4242d :424d :42d

一旦我这样做,我需要用另一个单词替换第42个单词(用“Vader(父亲形象)”替换“Vader”)。我通过键入42 / Vader来查找“Vader”,然后进入“INSERT”模式并替换了该单词。我在这里遇到的问题是检查器告诉我原始文件不包含正确的信息。我认为线删除存在问题。或者我没有用“Vader(父亲形象)”取代“Vader”?

2 个答案:

答案 0 :(得分:2)

如果你真的从行号开始,我会从头到尾删除,以避免偏移计算。您可以在一个命令行中连接所有:delete命令:

:4242d|424d|42d

顺便说一句,你不需要Vim;脚本化解决方案可以使用sed -i -e 4242d -e 424d -e 42d等但更常见的是,您不是从行号开始,而是导航到行,例如通过搜索。然后,通常的顺序是dd(删除当前行),n(转到下一个匹配),.(重复)。

答案 1 :(得分:1)

第一项任务可以通过以下方式完成:

:4242dd|424d|42d<CR>

或:

4242Gdd424G.42G.

请注意相反的顺序,这是维护整个任务中行号的必要条件。

gg42/Vader<CR>

是一种更安全的搜索Vader第42次的方法,因为它从缓冲区的顶部开始。

光标位于右侧Vader后,您可以执行以下操作:

cgnVader(father figure)<Esc>

替换它。

您可以使用未命名的寄存器来避免重新输入Vader

cgn<C-r>"(father figure)<Esc>

但最好让你的搜索落在比赛的最后一个角色:

/Vader/e<CR>
a(father figure)<Esc>