如何在VIM中删除当前行到文件末尾的所有文本?

262

我有非常大的文件(超过10Gb),只需要文件顶部的一些行。是否可能(在vim中)删除文件的其余部分(从当前行到文件末尾)?

可以使用Vim的删除命令来删除当前行到文件末尾的所有内容,该命令为" :., $d "。其中 "." 表示当前行,"$" 表示文件结尾,"d" 表示删除。因此,在 Vim 中执行 ":., $d" 命令即可删除当前行到文件末尾的所有内容。

16
我知道你想使用 Vim,但我会用类似于 shell 命令的方式:head -n <行数> <文件名> > <截断后的文件名>在这里,“-n” 是你想要从文件顶部获取的行数的参数。 - EhevuTov
5个回答

441

dG将会从当前行删除到文件末尾。

dCtrl+End将会从光标处删除到文件末尾。

但是,如果这个文件像你所说的那样大,你最好使用 head 命令读取前几行而不是编辑和保存整个文件。

head hugefile > firstlines

(如果您使用的是Windows,您可以使用head的Win32版本)


20
你可以使用head -n20命令来指定head命令提供多少行内容,例如:head -n20 hugefile表示获取一个名为hugefile的文件的前20行内容。默认情况下,n的值是10。 - drevicko
4
需要一个关于“head”的动机吗?在大文件(1G+)上使用dG需要很长时间(例如5分钟)。 - BurninLeo
4
若想要相反操作,使用 dgg 可以将当前行至文件开头的内容删除。 - stevesliva
Ctrl+End对我不起作用。但是Shift+End可以从光标处删除到行尾。 - lightwing
谢谢!顺便问一下,有没有键盘替代<END>按键的方法? - undefined

90

前往您想要删除的第一行,并按下键盘上的 dG 按钮。


46
输入 dG 前不要按“:”。 - James Mathew

42

:.,$d

此指令将删除当前行至文件结尾的所有内容。当您需要进行测试向量生成或去除操作时,此指令非常有用。


3
为了获得更多的起始线控制权,我使用命令::<行号>,$d,例如::3,$d 将会删除从第三行到文件结尾的所有内容。 - emont01

6
我使用以下步骤来完成相同的操作——
  1. 通过按下Esc键确保您处于普通模式。
  2. 按下V键进入可视化模式。
  3. 按下GShift + g来选择从光标到文件结尾的文本。
  4. 现在按下x键来删除所选文本。

1
在正常模式下,只需添加另一种方法,输入ctrl+v然后G,选择其余部分,然后D,但我认为这并不有效,你应该像@Ed Guiness那样在Linux中使用head -n 20 > filename。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接