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

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


当前回答

回到起跑线,输入ma(标记“a”)。然后转到最后一行,输入d'a(删除以标记“a”)。

这将删除从当前到标记的所有行(包括)。它还兼容vi和vim,如果您的环境不支持后者的话。

其他回答

您可以将光标放在块的开头或结尾,并进入可视模式(shift-v)。然后简单地向上或向下移动,直到所需的块突出显示。最后,通过按y复制文本或按d剪切文本。

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

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

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

:24,39d

您还可以使用

:24,39y

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

:24,39s/find/replace/g

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

您也可以输入一个非常大的数字,然后按dd,如果您希望删除光标下面的所有行。