我想知道VIM 中是否有办法只保留一定范围内的行,即说我只想在文件中保留1:20 的行,并丢弃其他所有内容。更好的是说我想保留第 1-20 和 40-60 行有没有办法做到这一点?
有没有办法在不手动删除东西的情况下做到这一点?
我想知道VIM 中是否有办法只保留一定范围内的行,即说我只想在文件中保留1:20 的行,并丢弃其他所有内容。更好的是说我想保留第 1-20 和 40-60 行有没有办法做到这一点?
有没有办法在不手动删除东西的情况下做到这一点?
如果您用“行”表示整行,只需使用:delete
带有反转范围的命令:
:21,$delete
删除除 1-20 之外的所有行。
如果范围不连续,则另一种选择是:vglobal
具有仅在某些行中匹配的正则表达式原子的命令。例如,只保留第 3 行和第 7 行:
:g!/\%3l\|\%7l/delete
还有用于“小于/大于线”的原子,因此您也可以使用它们构建范围。
为了保持第 1 到 20 行和第 40 到 60 行,应该使用以下构造:
:v/\%>0l\%<21l\|\%>39l\%<61l/d
如果您想(正如我现在从您的评论中了解到的那样)将缓冲区的(不同)部分保存为新文件,最好不要修改原始文件,而是将片段写入单独的文件。事实上,Vi(m) 很好地支持了这一点,因为您可以将一个范围传递给:write
命令:
:1,20w newfile1
:40,60w newfile2
附加作品,太:
:40,60w >> newfile1