ファイル foo.c から行 n1->n2 を現在のバッファに読み込みたいとします。
私は試した:147,227r /path/to/foo/foo.c
しかし、「E16: 範囲が無効です」と表示されますが、foo.c に 1000 行を超える行が含まれていることは確かです。
ファイル foo.c から行 n1->n2 を現在のバッファに読み込みたいとします。
私は試した:147,227r /path/to/foo/foo.c
しかし、「E16: 範囲が無効です」と表示されますが、foo.c に 1000 行を超える行が含まれていることは確かです。
:r! sed -n 147,227p /path/to/foo/foo.c
sed のような外部ツールを使用せずに、純粋な Vimscript で実行できます。
:put =readfile('/path/to/foo/foo.c')[146:226]
行番号は 1から始まるのに対し、配列は 0 から始まるため、行番号から1を減らす必要があることに注意してください。
短所: この解決策は、受け入れられている回答よりも 7 文字長くなります。ファイル全体を一時的にメモリに読み込むため、そのファイルが巨大な場合は問題になる可能性があります。
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.
私のコードプロジェクトでこれを行う必要があり、次のようにしました。
/path/to/foo/foo.c
開いているバッファ内:
:147,227w export.txt
バッファで私は働いています:
:r export.txt
私の本でははるかに簡単です...両方のファイルを開く必要がありますが、一連の行をインポートする場合は、通常は両方とも開いています。g/<search_criteria/:.w >> export.txt
この方法はより一般的で覚えやすいです。特に、行を選択するためのより複雑な方法を使用して、より複雑な行のセットをエクスポート/インポートしようとしている場合は特にそうです。
範囲を使用すると、現在のバッファー内の行のグループにコマンドを適用できます。
したがって、読み取り命令の範囲は、現在のファイルのコンテンツを挿入する場所を意味しますが、読み取りたいファイルの範囲ではありません。
次のことを行う必要があります。
:r /path/to/foo/foo.c
:d 228,$
:d 1,146
3つのステップですが、それは完了します...