是否有命令删除当前行正下方的一行(或几行)?目前,我的操作是: jdd然后.根据需要重复。是否有将所有这些结合在一起的命令?
更新:我想拥有这样的命令的原因是,我不想离开当前位置,但是能够删除下面的行。
是否有命令删除当前行正下方的一行(或几行)?目前,我的操作是: jdd然后.根据需要重复。是否有将所有这些结合在一起的命令?
更新:我想拥有这样的命令的原因是,我不想离开当前位置,但是能够删除下面的行。
Answers:
delete ex命令将很好地工作。
:+,$d
这将从当前+1到末尾($)的所有行删除
要删除接下来的2行,请遵循以下范围,+1,+2
或者简称+,+2
:+,+2d
如@ib所述,:delete
or:d
命令将光标移至已删除文本旁边的行首。(即使已nostartofline
设置)。为了克服这个问题,我们可以发出``
普通模式命令。``
会跳回到最后一次跳转之前的确切位置,在这种情况下为:d
命令。现在我们的命令
:+,+2denter``
或者作为一个命令
:+,+2d|norm! ``
为了简化操作,我们将所有内容包装在一个命令中:
command! -count=1 -register D :+,+<count>d <reg><bar>norm! ``
现在删除下面的三行:
:3D
该命令还可以采取{reg}
像:delete
和:yank
做。因此,将接下来的4行删除到寄存器a
中将是:
:4D a
想要查询更多的信息
:h :d
:h :command
:h :command-register
:h :command-count
:h ``
:+1,+5s!a!b!g
在光标后的第4行将a替换为b)。有关更多示例,请参见:help命令范围。
:+,$d|norm!``
。顺便说一句,如问题所述,问题的作者希望删除当前行下方的几行,而不必一直删除到文件末尾。
set sol
吧?如何使用`
商标?
sol
单独关闭并不能解决问题:当使用删除三:+,+3d
行时,光标将移动到已删除行的下一行。
dG应该管用。
这意味着从当前光标删除所有行,直到文件末尾。
这将删除当前行以下的所有行:
jdG
不幸的是,删除后会将光标移动到当前行的开头。
您可以输入要删除的行数: j 20 dd k。
k
将光标移到初始行上方。另外,由于会丢失光标列的位置dd
。
dd
(我相信已删除行旁边的行的第一个非空白字符)。
只是为了好玩,您可以定义一个与您描述的功能完全相同的小功能:删除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
命令的映射
。
let mapleader = ","
2:nmap <leader>d :D<CR>