LoginSignup
7
7

More than 5 years have passed since last update.

[自分メモ]vim 差分を目視しながらファイル間コピペ

Last updated at Posted at 2016-02-12

違うファイルから内容を一部コピーして持ってきたいメモ

設定

 今いる階層: /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行なのふえぇ……:pig2::sweat_drops:ということになっていました。

もっとわかりやすく作業したい

 隣で並べながら作業できたらいいなという願いと、差分を見られたらいいなという願いがありました。そこで、:vsplitのようなコマンドが便利だとわかりました。
 まずコピペ元を開きます。
vim ../../geho/piyo/file.txt
image
 それから、画面を分割した上で、コピペ先のファイルを開きます。
:vsplit file.txt
image
 このぐらい短い内容ならそのままでもコピペ作業して大丈夫そうですが、diffthisで差分にマークもできます。既存の記事に、vsplitの機能と共に紹介されています:Qiita - vimですでに開いているファイルと別ファイルとの差分を表示する方法
 差分表示から抜けるときは、:windo diffoffです。
 私は、前項のような複数ファイルを開く方法を覚えても、中身が長かったり部分的にコピペするとき、似たようなコンポーネントの記述が続いていたりすると、進んで戻ってしているときにどこからどこまでをコピペしたらよいのかの判断がつきにくくなり、テキスト/コードエディタから2つのファイルを開いて手作業でやった方が早いんじゃないの!?:thought_balloon: となってしまいました。

基礎的なところ:how to ヤンク

 ノーマルモードの状態で、コピりたい最初の行にカーソルを合わせてms、最後の行でmeとタイプ後、:'s,'eyでコピーができます。それからペーストしたい場所にカーソルを合わせてノーマルモードでpです。なお、範囲指定で削除の時は、:'s,'edです。

基礎的なところ:how to 切替、同期

 ファイルの内容が長くなるとスクロールして見比べていく必要がありますが、通常は選択中のファイルの方だけがスクロール対象となります。スクロールを同期させるためには、分割して開いているファイルのすべてに対してスクロール同期のためのコマンドを与える必要があります。まず、現在選択されているファイルに対して、
:set scb
 それから、次のファイルを選択(Ctrl+w, w ※)してもう一度:set scbします。同期させたいファイルすべてでこのコマンドを打つことで完了です。同期をやめるときは:set noscbです。参考:Qiita - vimの分割ウインドウのスクロールを同期させる
 ※コントロールwをタイプ後にもう一度wをタイプの2STEP
 

7
7
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7