vi / vim,如何将许多行写到一个新文件中


Answers:


44

你可以做

:100,200w filename

当然100,200是您要写入的行范围。


地址是包含性还是排他性?
Marcin

3
包括的。如果使用模式,则也包括在内::/ ^ something /,/ ^ else / w文件名或标记:'a,'bw文件名包括标有'a'和'b'的行。
Bruce Ediger

@Bernhard,您好,如果我想从当前文件中剪掉线条怎么办。
拉维·塞夫塔

19

最一般的:

  1. 将光标移到要写入的组的第一行。点击ma顺序。那是“设置标记名为'a'”。

  2. 将光标移到该组的最后一行,按“ m”和“ b”。

  3. 切换到命令模式命中:按顺序执行,:'a,'b w filename然后命中回车。

这将在vi,nvi和vim中起作用。

另一种方法在更现代的vim中起作用:

  1. 将光标放在要写出的一组线的第一行上。点击V“开始可视行”。

  2. 将光标移到该行组的底部。Vim会在每行上用反向视频突出显示。

  3. 写出。点击:进入命令行模式。这将在屏幕底部提供一个提示,如下所示::'<,'> 这意味着从可视块的开始到结尾。键入w和文件名,然后按回车键。

您可以根据需要将单行添加到文件的末尾,方法是将光标放在要写出的行上,然后键入::.w >> filename并按回车键。

“编写一组行”命令还可以与“ >>文件名”一起使用,而不仅仅是“文件名”。“ >>”导致vi或vim追加到文件中,而不仅仅是将其写入。


8

要添加到Bernhard的答案中,您还可以使用可视模式选择一个区域,然后输入:w filename


8

如果知道要编写的行号,则可以从命令行执行:

vim -c "100,200w new_file.txt" -c wq original_file.txt

1

一个小技巧是使用相对行号。例如::+ 0,+ 99w filename将接下来的100行写入filename。


那不会覆盖原始文件吗?OP希望写出到另一个文件。
SabreWolfy

1
@SabreWolfy否;也许您错过了行号后的“文件名”。我刚刚测试了他的版本,它奏效了。
felwithe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.