使用vim仅保留范围内的行

时间:2013-08-02 11:04:26

标签: vim

我想知道在VIM中是否有办法只保留一定范围内的行,即我想在文件中仅保留1:20行,并丢弃其他所有内容。更好的是,我想保留1-20和40-60行是否有办法做到这一点?

有没有办法在不手动删除内容的情况下执行此操作?

4 个答案:

答案 0 :(得分:5)

如果你用“行”表示整行,只需使用反转范围的:delete命令:

:21,$delete

删除除1-20之外的所有行。

如果范围是非连续的,则替代是:vglobal命令,其中正则表达式原子仅在某些行中匹配。例如,仅保留第3行和第7行:

:g!/\%3l\|\%7l/delete

还有“少于/大于行”的原子,因此您也可以用它们构建范围。

答案 1 :(得分:3)

为了保留第1行到第20行和第40行到第60行,以下结构应该:

:v/\%>0l\%<21l\|\%>39l\%<61l/d

答案 2 :(得分:3)

如果你想(正如我现在从你的评论中理解的那样)将缓冲区的(不同的)部分保存为新文件,最好不要修改原始文件,而是将片段写为单独的文件。实际上,Vi(m)很好地支持了这一点,因为你可以将范围传递给:write命令:

:1,20w newfile1
:40,60w newfile2

附加作品:

:40,60w >> newfile1

答案 3 :(得分:1)

不仅有一种方法可以达到你想要的目的:

  • 如果这个问题确实是关于文件中的第一行:
    head -20 <filename> > newfile

  • 如果是vim解决方案:
    :21 输入
    dG

  • 但是,您希望将大文件拆分为较小的文件mention。用于此的工具是split:它允许您将文件拆分为偶数行甚至大小的块。