在vim中,我经常发现自己删除(或复制)大块的文本。人们可以数一数文本的行数,并说(例如)50dd来删除50行。

但是如何在不知道要删除多少行的情况下删除这么大的文本块呢?


当前回答

这取决于那个大的方块是什么。也许你只是想删掉一段话,在这种情况下删减一下就可以了。

其他回答

删除一个文本块

假设你的光标位于块的开头:

V/^$<CR>d (where <CR> is the enter/return key)

解释

进入“直线-视觉”模式:V 高亮直到下一个空行:/^$<CR> 删除:d

密钥绑定

一个更健壮的解决方案:

:set nowrapscan
:nnoremap D V/^\s*$\\|\%$<CR>d

解释

禁用搜索换行::set nowrapscan 重新映射D键(到以下命令) 进入“直线-视觉”模式:V 高亮直到下一个空/空白行或EOF: /^\s*$\\|\%$<CR> 删除:d

如果你通过set number打开行号,你可以简单地dNNG,它将从当前位置删除到行NN。因此,您可以导航到您希望删除的行开头,并简单地d50G,假设这是您希望删除的最后一行。

如果整个块在屏幕上可见,您可以使用相对编号设置。参见:help relativenumber。7.3版提供

除了这里已经提到的其他运动,还有/{pattern}<CR>运动,所以如果你知道你想删除包含foo的行,你可以做dV/foo<CR>。V在这里强制按行移动,因为默认情况下/是按字符移动。

这里有很多更好的答案,但为了完整起见,我将在阅读上面提到的一些很棒的答案之前,先介绍一下我曾经使用的方法。

假设您想从第24-39行删除。可以使用ex命令

:24,39d

您还可以使用

:24,39y

查找并替换第24-39行的使用

:24,39s/find/replace/g