1

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

有没有办法在不手动删除东西的情况下做到这一点?

4

4 回答 4

5

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

:21,$delete

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

如果范围不连续,则另一种选择是:vglobal具有仅在某些行中匹配的正则表达式原子的命令。例如,只保留第 3 行和第 7 行:

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

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

于 2013-08-02T11:16:15.793 回答
3

为了保持第 1 到 20 行和第 40 到 60 行,应该使用以下构造:

:v/\%>0l\%<21l\|\%>39l\%<61l/d
于 2013-08-02T12:19:38.730 回答
3

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

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

附加作品,太:

:40,60w >> newfile1
于 2013-08-02T12:55:24.283 回答
1

不仅有一种方法可以实现您想要的:

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

  • 如果它应该是一个 vim 解决方案:
    :21ENTER
    dG

  • 但是,您提到要将大文件拆分为较小的部分。用于此的工具是split:它可以让您将文件分成偶数行数或偶数大小的块。

于 2013-08-02T11:19:04.020 回答