違うファイルから内容を一部コピーして持ってきたいメモ
設定
今いる階層: /common/hoge/piyo
コピペ元ファイルがある階層: /common/geho/piyo
ファイル名: file.txt (適当)
普通に複数のファイルを開く方法
vimではファイルを開くときに、引数を後ろに追加していくことが可能とのこと。vim file.txt file2.txt file3.txt
普通にfile.txtだけを開いたときと見た目が変わらないが、:nで次の引数、:prevで前の引数にと、vimを起動し直さずにファイルを移動することができます。設定の状況だとこう:vim ../../geho/piyo/file.txt file.txt
vimは起動し直すと、ヤンク(コピー)が50行までしか保持されないので、広範囲をコピペしたいときはこのようにファイルを開くのがよさげです。参考:teratail - Vimでヤンクした内容がファイルをまたぐと50行までしか保持されていない。
私は色々なことを知らなかったので、いちいちコピペ元を:e file.txt
してからヤンクして、:q!
とかで終わらせて、それからコピペ先を:e file.txt
して挿入したいところにp
で貼り付けようとしては、200行ぐらいコピったのになんで50行なのふえぇ……ということになっていました。
もっとわかりやすく作業したい
隣で並べながら作業できたらいいなという願いと、差分を見られたらいいなという願いがありました。そこで、:vsplit
のようなコマンドが便利だとわかりました。
まずコピペ元を開きます。vim ../../geho/piyo/file.txt
それから、画面を分割した上で、コピペ先のファイルを開きます。:vsplit file.txt
このぐらい短い内容ならそのままでもコピペ作業して大丈夫そうですが、diffthisで差分にマークもできます。既存の記事に、vsplitの機能と共に紹介されています:Qiita - vimですでに開いているファイルと別ファイルとの差分を表示する方法
私は、前項のような複数ファイルを開く方法を覚えても、中身が長かったり部分的にコピペするとき、似たようなコンポーネントの記述が続いていたりすると、進んで戻ってしているときにどこからどこまでをコピペしたらよいのかの判断がつきにくくなり、テキスト/コードエディタから2つのファイルを開いて手作業でやった方が早いんじゃないの!? となってしまいました。
基礎的なところ:how to ヤンク
ノーマルモードの状態で、コピりたい最初の行にカーソルを合わせてms
、最後の行でme
とタイプ後、:'s,'ey
でコピーができます。それからペーストしたい場所にカーソルを合わせてノーマルモードでp
です。なお、範囲指定で削除の時は、:'s,'ed
です。