私は2つのファイルで作業しています。あるファイルから数行をコピーして、別のファイルに貼り付ける必要があります。同じファイルにコピー(yy)と貼り付け(p)する方法を知っています。しかし、それは異なるファイルに対しては機能しません。これはどのように行われますか?
また、切り貼りする方法はありますか?私はグーグルで試しましたが、ほとんどのリソースはコピーと貼り付けについてのみ話します。
私は2つのファイルで作業しています。あるファイルから数行をコピーして、別のファイルに貼り付ける必要があります。同じファイルにコピー(yy)と貼り付け(p)する方法を知っています。しかし、それは異なるファイルに対しては機能しません。これはどのように行われますか?
また、切り貼りする方法はありますか?私はグーグルで試しましたが、ほとんどのリソースはコピーと貼り付けについてのみ話します。
回答:
テキストをカット/ヤンクする方法はすでに知っているので、テキストを別のファイルに貼り付けるためのアイデアをいくつか紹介します。
:e /path/to/other/file
)内から2番目のファイルを開いて貼り付けます両方のファイルを分割ウィンドウで一緒に開き、次のようにCtrl+ w、Up/のDownいずれかを使用してファイル間を移動します。
vi -o /path/to/file1 /path/to/file2
Ctrl
+ w
、s
。
:sp myfile
水平に分割して指定されたファイルを開くコマンドを見ましたが、ウィンドウを垂直に分割したい場合はどうすればよいですか?
WindowsでVimを使用している場合は、次を使用してクリップボード(MSコピー/貼り付け)にアクセスできます。
"*dd -行をカットします(または3ddで3行をカットします)
"*yy -1行をコピーします(3行をコピーするには3yy)
"*p -カーソルの後の行に行を貼り付けます
"*P -カーソルの前の行に行を貼り付けます
を使用すると、別々のVimウィンドウ間、またはVimとPCアプリケーション(メモ帳、Microsoft Wordなど)の間に貼り付けることができます。
+
クロスプラットフォームシステムクリップボードレジスタとして使用(WindowsおよびLinux)と*
、Windowsのみです(+
Windowsでもと同じように機能します*
)。
d
好きなもののバリエーションを使っdd
てカットします。
ある範囲の行を別のファイルに書き込むには、以下を使用できます。
:<n>,<m> w filename
ここで、<n>
と<m>
行の範囲を指定する数字(又はシンボル)です。
デスクトップクリップボードを使用する場合は、+g
コマンドを確認してください。
ma
、最後の行に移動しますmb
。その後、先頭に追加'
あなたは上記のコマンドを使用しているとき、マークの手紙には::'a,'b w filename
これを行う1つの方法を次に示します。
両方のファイルを表示することもできます。Ctrl+で画面を分割しますw s。
裁断に関してはd、裁断したものを裁断し、ヤンクバッファーに入れます。dd行を「カット」します。
これらはすべて素晴らしい提案ですが、別のファイル内のテキストの場所がわかっている場合は、sedを簡単に使用できます。:r! sed -n '1,10 p' < input_file.txt
これにより、既に開いているファイルのカーソルの現在位置に10行挿入されます。
:r ! head -n2 file.py
2017-05更新:
次の行をvimrcファイルに追加すると、
set clipboard = unnamed
その後、Vimはシステムクリップボードを使用しています。
異なるVimインスタンスウィンドウ間でコンテンツをコピーする方法では、ヤンクの方法が機能しないことがわかりました。(少なくとも、それは私のVimの知識に基づいて動作しません。動作させるための別の方法があるかどうかはわかりません)。
私のテストによれば、ヤンク方法は、複数のファイルが同じウィンドウで開かれる方法でのみ機能します。
それをしたい場合は、Ctrl+ x、Ctrl+ c(Windowsの場合)などのOSの切り取り、コピー、貼り付けを使用することをお勧めします。
これらのリマップは私にとって魅力のように機能します:
vmap <C-c> "*y " Yank current selection into system clipboard
nmap <C-c> "*Y " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p " Paste from system clipboard
だから、私はビジュアルモードでだとき、私は私が欲しいのラインキーを押し選択Ctrl+ c当時とCtrl+をv受信ファイルにテキストを挿入します。「* y」も使用できますが、覚えにくいことがあります。
これは、Vimからクリップボードにテキストをコピーする場合にも役立ちます。
Vimの同じインスタンスで開かれている2つのバッファー(==ファイル)間でテキストをコピーしても問題ありません。
y(前にビジュアルモードでコピー先領域をマークしたと仮定して)で1つのバッファーをヤンクし、で他のバッファーに貼り付けpます。Vimの同じインスタンス内にある限り、異なるタブでも機能します。
Vimの同じインスタンスで2つのファイルを開く方法は、システムによって異なります。
vim file1 file2
--remote-silent
すべてのファイルが同じインスタンスで開かれるようにオプションを指定してくださいVimの2つの異なるインスタンスで2つのファイルを開いた場合は、システムクリップボードを使用する必要があります。最初のVimインスタンスで、"+y
(もう一度、前にビジュアルモードでヤンクする領域をマークして、システムクリップボードにテキストをヤンクします。)、2番目のVimに移動して、そこにクリップボードを貼り付けます"+p
。
PS:
以下のオプションはほとんどの場合に機能し、後で貼り付けることもできます。
"xnyy
x - buffer name
n - number of line to Yank - optional
ヤンクした行はバッファに保存され'x'
ます。編集のどこでも使用できます。
他のファイルに行を貼り付けるには、
:e filename&location
例:現在の編集で以下のコマンドを入力します
:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor
完全な操作
ファイル1を開く:
vi Test1.sh
a10yy
-Yanked 10 lines
-現在の編集から2番目のファイルを開く
*:e /u/test/Test2.sh*
-貼り付けが必要な行にカーソルを移動します
*"ap*
-バッファーからの行は'*a*'
、現在のカーソル位置の後にコピーされます
ファイルの一部をコピーして、その内容を別のファイルの中央に貼り付ける場合は、この方法を使用できます。
:linenumber,linenumber write newfile
例:
:2,34 write temp1
または
:'mark, 'mark write newfile
例:
:'a,'b write temp1
これで、行が別のファイルにコピーされました。コピー後にこれらの行を削除したい場合は、
:linenumber1,linenumber2 d
または
:'mark1,'mark2 d
次に、他のファイルに移動します。次に、貼り付けたい行にカーソルを置きます。
タイプ
:r!cat temp1
これで、一時ファイルの内容がここに貼り付けられます。内容を貼り付けた後、コマンドライン自体から一時ファイルを削除できます。
:!rm temp1
これは、コピーと貼り付けを複数回行う場合に役立ちます。
コマンドモードに入り、実行します
:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from
たとえば、現在開いているファイル20-30
から行を抽出filename
する
:r! sed -n '20, 30p' filename