62

ファイル foo.c から行 n1->n2 を現在のバッファに読み込みたいとします。

私は試した:147,227r /path/to/foo/foo.c

しかし、「E16: 範囲が無効です」と表示されますが、foo.c に 1000 行を超える行が含まれていることは確かです。

4

7 に答える 7

97
:r! sed -n 147,227p /path/to/foo/foo.c
于 2008-10-27T15:19:43.900 に答える
31

sed のような外部ツールを使用せずに、純粋な Vimscript で実行できます。

:put =readfile('/path/to/foo/foo.c')[146:226]

行番号は 1から始まるのに対し、配列は 0 から始まるため、行番号から1を減らす必要があることに注意してください。

短所: この解決策は、受け入れられている回答よりも 7 文字長くなります。ファイル全体を一時的にメモリに読み込むため、そのファイルが巨大な場合は問題になる可能性があります。

于 2014-01-22T08:24:52.270 に答える
22

The {range} refers to the destination in the current file, not the range of lines in the source file.

After some experimentation, it seems

:147,227r /path/to/foo/foo.c

means insert the contents of /path/to/foo/foo.c after line 227 in this file. i.e.: it ignores the 147.

于 2008-10-27T15:16:56.947 に答える
4

私のコードプロジェクトでこれを行う必要があり、次のようにしました。

/path/to/foo/foo.c開いているバッファ内:

:147,227w export.txt

バッファで私は働いています:

:r export.txt

私の本でははるかに簡単です...両方のファイルを開く必要がありますが、一連の行をインポートする場合は、通常は両方とも開いています。g/<search_criteria/:.w >> export.txtこの方法はより一般的で覚えやすいです。特に、行を選択するためのより複雑な方法を使用して、より複雑な行のセットをエクスポート/インポートしようとしている場合は特にそうです。

于 2014-01-15T06:13:04.047 に答える
2

範囲を使用すると、現在のバッファー内の行のグループにコマンドを適用できます。

したがって、読み取り命令の範囲は、現在のファイルのコンテンツを挿入する場所を意味しますが、読み取りたいファイルの範囲ではありません。

于 2013-06-18T09:56:38.853 に答える
2

次のことを行う必要があります。

:r /path/to/foo/foo.c
:d 228,$
:d 1,146

3つのステップですが、それは完了します...

于 2008-10-27T15:23:28.557 に答える