我想知道在VIM中是否有办法只保留一定范围内的行,即我想在文件中仅保留1:20行,并丢弃其他所有内容。更好的是,我想保留1-20和40-60行是否有办法做到这一点?
有没有办法在不手动删除内容的情况下执行此操作?
答案 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)