ファイル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]
配列は0から始まり、行番号は1から始まるため、行番号から1をデクリメントする必要があることに注意してください。
短所:この解決策は、受け入れられた回答より7文字長く、他のファイルのサイズに比べて一時的にメモリを消費します。
{範囲}は、ソースファイルの行の範囲ではなく、現在のファイルの宛先を指します。
いくつかの実験の後、それはようです
:147,227r /path/to/foo/foo.c
このファイルの227行目の後に/path/to/foo/foo.c
の内容を挿入しますつまり、147を無視します。
掲載されている他のソリューションは、特定の行番号に最適です。別のファイルの上部または下部から読み取る場合がよくあります。その場合、ヘッドまたはテールの出力の読み取りは非常に高速です。例えば -
:r !head -20 xyz.xml
最初の20行をxyz.xmlからカーソルがある現在のバッファに読み込みます
:r !tail -10 xyz.xml
Xyz.xmlの最後の10行をカーソルがある現在のバッファに読み込みます
Headコマンドとtailコマンドは非常に高速であるため、これらのコマンドを組み合わせても、非常に大きなファイルに対する他のアプローチよりもはるかに高速です。
:r !head -700030 xyz.xml| tail -30
ファイルxyz.xmlから現在のバッファーに700000から700030までの行番号を読み取ります
この操作は、かなり大きなファイルでも即座に完了します。
私は私のコードプロジェクトでこれを実行する必要があり、次のようにしました。
/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つのステップ、しかしそれはそれを成し遂げるでしょう...