在vim中,如何删除文件中除最后100行之外的所有行?
在vim中,当光标位于第一行时,我可以按下: 100日 删除前100行 但是如何删除除最后100行之外的所有行?在正常模式下:在vim中,如何删除文件中除最后100行之外的所有行?,vim,Vim,在vim中,当光标位于第一行时,我可以按下: 100日 删除前100行 但是如何删除除最后100行之外的所有行?在正常模式下: G100kdgg 换言之: G -> go to last line 100k -> go up 100 lines dgg -> delete to top of file 在ex模式下: :1,$-100d 说明:“:”将编辑器置于“ex模式”。ex mode的d命令删除指定为一个行号或一系列行的行。$是最后一行,算术可应用于行
G100kdgg
换言之:
G -> go to last line
100k -> go up 100 lines
dgg -> delete to top of file
在ex模式下:
:1,$-100d
说明:“:”将编辑器置于“ex模式”。ex mode的d命令删除指定为一个行号或一系列行的行。$是最后一行,算术可应用于行号。另一种通用解决方案:
:%!tail -100
您可以在
之后使用任何shell命令
可任意修改当前缓冲区。Vim启动命令并将当前文件提供给stdin
,并从stdout
读取新的缓冲区。我喜欢!如果缓冲区的行数少于100行,则此操作不起作用。它将不正确地删除所有行,因为100k
部分无效。@DonCruickshank错误,如果少于100行,100k
将转到第一行,dgg
将删除该单行k
被重复100次,因此即使只有5行,它也会“撞击”缓冲区的顶部,然后停止。在执行所有操作之前,它不会预先检查。也就是说,是的,如果缓冲区中有100行或更少的行,它将错误地删除1行。但在我看来,这是一个比另一个被高估的答案更惯用的vim用法:它是一个由多个命令组成的“句子”,而不是一个更神秘的句子。@Izkata确实,你对vim的看法是正确的!由于某种原因,我的思维回到了Vi,在这种情况下,100k
没有任何效果。@DonCruickshank啊,我不知道。。我只是偶尔被迫在vim不可用时使用vi,而且非常不喜欢它。这是一个更好的答案,伊姆霍