如何删除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
,如果有必要的话。