如何删除vim中当前行下面的行?

是否有命令删除当前行下方的一行(或几行)? 目前我做的是: dd然后 根据需要重复。 有没有可以把所有这些结合起来的命令?

更新:我想要这样的命令的原因是,我不喜欢离开现在的位置,但可以删除下面的行。

删除ex命令将很好地工作。

:+,$d 

这将删除当前+1的所有行直到结束($)

要删除接下来的两行,关注范围将起作用, +1,+2或简写+,+2

 :+,+2d 

正如@ib提到的那样:delete或者:d命令会将光标移动到被删除文本旁边的行的开头。 (即使与nostartofline设置)。 为了克服这个问题,我们可以发出``正常模式”命令。 ``会跳回到最后一次跳转之前的确切位置,在这种情况下是:d命令。 我们的命令是现在

+ + 2 d 进入 ` `

或作为一个前命令

 :+,+2d|norm! `` 

为了使这一点更容易,我们把这一切都包装在一个命令中:

 command! -count=1 -register D :+,+<count>d <reg><bar>norm! `` 

现在删除接下来的3行:

 :3D 

这个命令也可以像{reg}这样:delete:yank do。 所以删除接下来的4行将是:

 :4D a 

了解更多信息

 :h :d :h :command :h :command-register :h :command-count :h `` 

“dG”应该工作。 这意味着从当前游标删除所有行直到文件结束。

这将删除当前的所有行:

 jdG 

不幸的是,在删除之后,会将光标移动到当前行的开头。

其他的解决scheme是提供信息的,但是我觉得使用这个macros会更简单一些:

qq (开始录制)

jddk (往下走,删除线,然后回去 – 即你想要做的事情)

q (结束录音)

现在您可以执行@q来执行此操作,将光标保持在当前位置。 你也可以像5@q删除光标下面的5行。

最后,如果你不止一次地重复这个动作,你可以在第一次运行@q之后input@@ (这个重复上次使用的macros – 在这个例子中是q

那么,只要你可以使用xxdd命令。 大部分时间我知道(至less有一个想法)我正在编辑的脚本的大小。 所以,下面的命令通常绰绰有余:

  • 99dd
  • 999dd从光标位置开始移除999lines。
  • 9999dd
  • 99999dd非常长的脚本;)

这是标记的工作!

试试maj20dd`a

ma设置特定于文件的标记“a”, j20dd做你想要的删除(在这种情况下为20行),并且`a将你恢复到标记的位置(行和列)。

显然这种模式可以扩展到做任何你想要的,然后再回到标记。 如果您使用mA (或任何其他大写字母),则标记在文件中实际上是唯一的,所以您甚至可以在返回之前编辑其他地方。 如果你有一个非常频繁的用法,你可以把它变成一个macros,如上所述。

您可以input要删除的行数: j 2 0 d d k

您可以定义一个与您所描述的完全相同的小函数:删除当前行下面的下n行,并恢复初始光标位置。

 function! DeleteNextLines(n, reg) let l = line('.') let m = min([a:n, line('$')-l]) if m > 0 let c = col('.') exe '+,+'.m 'd' a:reg call cursor(l, c) endif endfunction 

另外,您可以定义一个命令,接受下面要删除的行的数量(默认情况下为一个),以及用作可选参数(如:delete命令)的寄存器名称。

 :command! -range=1 -register -bar D call DeleteNextLines(<count>, <q-reg>) 

另外你可以定义一个映射来运行:D ,如果有必要的话。