是否有命令删除当前行正下方的一行(或几行)? 目前我这样做: j dd 然后。根据需要重复。 是否有一个将所有这些结合起来的命令?
更新:我希望获得此类命令的原因是我不想离开当前位置,但能够删除下面的行。
答案 0 :(得分:129)
delete 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
一样。因此,将接下来的4行删除到寄存器a
中将是:
:4D a
了解更多信息
:h :d
:h :command
:h :command-register
:h :command-count
:h ``
答案 1 :(得分:63)
d G 应该有效。
这意味着删除所有行,直到当前光标的文件末尾。
答案 2 :(得分:25)
这将删除当前行以下的所有行:
jdG
不幸的是,在删除后会将光标移动到当前行的开头。
答案 3 :(得分:7)
好吧,只需你可以使用xxdd命令。大多数时候我都知道(至少有一个想法)我正在编辑的脚本的大小。所以,下面的命令通常绰绰有余:
答案 4 :(得分:4)
其他解决方案是提供信息的,但我觉得使用宏更简单:
qq
(开始录制)
jddk
(向下,删除该行,然后返回 - 即您要做的事情)
q
(结束录音)
现在你可以执行@q
来执行此操作,将光标保持在当前位置。您还可以执行5@q
之类的操作来删除光标下方的5行。
最后,如果你不止一次重复这个动作,你可以在第一次运行@@
后输入@q
(这会重复上一次使用的宏 - 在这种情况下q
1}})
答案 5 :(得分:2)
这是商标的工作!
尝试maj20dd`a
ma
设置文件特定标记'a',j20dd
执行您想要的删除(在这种情况下为20行),`a
将您恢复到标记的位置(行和专栏)。
显然,在返回标记之前,可以将此模式扩展为执行任何操作。如果您使用mA
(或任何其他大写字母),该标记实际上在文件中是唯一的,因此您甚至可以在返回之前在其他位置进行编辑。如果您经常使用,可以将其设为上面建议的宏。
答案 6 :(得分:1)
您可以输入要删除的行数: j 2 0 d d < / kbd> k 。
答案 7 :(得分:-1)
您可以定义一个完全符合您所描述内容的小功能:
删除当前行下面的下一行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
的映射,如果是的话
必要的。