是否有一种命令可以删除当前行下方的一行或多行? 目前我是这样做的: jdd,然后用.重复需要的次数。 有没有一种命令可以将所有这些命令结合起来呢?
更新:我想有这样一个命令的原因是,我不喜欢离开当前位置,但又希望能够删除下方的行。
是否有一种命令可以删除当前行下方的一行或多行? 目前我是这样做的: jdd,然后用.重复需要的次数。 有没有一种命令可以将所有这些命令结合起来呢?
更新:我想有这样一个命令的原因是,我不喜欢离开当前位置,但又希望能够删除下方的行。
删除ex命令将起作用。
:+,$d
这将删除当前行加1直到结尾($)的所有行。
要删除接下来的两行,可以使用以下范围:+1,+2
或更简单的+,+2
:+,+2d
正如@ib提到的那样,:delete
或:d
命令将把光标移动到删除文本旁边行的开头。(即使设置了nostartofline
)。为了解决这个问题,我们可以输入``
normal模式命令。``
会跳回到上次跳转之前的确切位置,在这种情况下是:d
命令。我们的命令现在是:
:+,+2denter``
或者作为一个ex命令
:+,+2d|norm! ``
为了使这更加容易,我们将其全部包装在一个命令中:command! -count=1 -register D :+,+<count>d <reg><bar>norm! ``
现在要删除接下来的三行:
:3D
此命令还可以像:delete
和:yank
一样,使用{reg}
参数。因此,将下面的4行删除到寄存器a
中,命令为:
:4D a
更多信息请参考
:h :d
:h :command
:h :command-register
:h :command-count
:h ``
: +1,+5s!a!b!g
将在光标后的4行中将a替换为b)。有关更多示例,请参见 :help command-ranges。 - David Winslow:+,$d|norm!\
``。顺便说一下,正如问题中所述,问题的提出者想要删除当前行下面的几行,而不一定是一直删到文件结尾。 - ib.set sol
?如何使用 ``` 标记? - Peter Rinckersol
并不能解决问题:当使用:+,+3d
删除三行时,光标会移动到已删除行的下一行。 - ib.:.,$d
包括当前行(而不是从下一行开始)。 - Trevor Boyd SmithdG 应该可以使用。
这意味着从当前光标删除所有行,直到文件结尾。
这将删除当前行以下的所有行:
jdG
不幸的是,这将在删除完成后将光标移动到当前行的开头。
简单来说,您可以使用xxdd命令来完成。大多数情况下,我知道(至少有一个想法)我正在编辑的脚本的大小。因此,以下命令通常已经足够:
这是一个适合使用标记的任务!
尝试maj20dd`a
ma
设置文件特定的标记'a',j20dd
执行您想要的删除操作(在本例中为20行),`a
将您恢复到标记的位置(行和列)。
显然,此模式可以扩展以在返回标记之前执行任何您想要的操作。如果使用mA
(或任何其他大写字母),则标记实际上将在文件之间唯一,因此您甚至可以在返回之前编辑其他地方。如果您经常使用它,可以像上面建议的那样将其制作为宏。
k
命令将光标移动到初始行之上。此外,由于 dd
命令,光标列位置将会丢失。 - ib.你也可以使用:Shift + V、Shift + G 和 Shift + X
只是为了好玩,您可以定义一个小函数,它可以执行您所描述的操作:删除当前行下面的下一个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>
- Kevin Lee