この記事はVim Advent Calendar 2013 の60日目の記事です。 前回59日目は@deton_kihさんによる GNU screenからVimへのペーストを、インデント崩れを回避しつつ簡潔な操作で行う でした。
Vimには色々な便利な機能がありますが、その中でも結構重宝するのが diff機能だと思います。
通常、二つのファイルを比較するものですが、 似たような二つのディレクトリの中にある(前にコピーして作った、とか) 違いのファイルを順次比較していける様なスクリプトを作りました。
二つのディレクトリのdiffをvimで順にチェック/較正していく
vim -d
はファイル差分を表示させて編集も出来てしまう機能ですが、
二つの似たようなディレクトリを比較して編集したい場合、
- 二つのディレクトリを
diff
で比較して差分があるファイルを探しだして - 該当ファイルを
vim -d
で呼び出して
みたいなことをすると思います。
この作業をスクリプトにして、まずリストを作り、 そのリストにあるファイルを順次開きながら OKであればリストから消して他を編集、 ということが出来る様なスクリプトを作りました。
Vimのプラグインだと思ってた方は申し訳ありませんが、 外部コマンドで、シェルスクリプトになります。
先日このブログで紹介したsentaku と言うスクリプトを使います。
上のレポジトリにbin/ddv
というスクリプトを追加しました。
これをbin/sentaku
とともに、パスの通った入ったディレクトリに手動で入れるか、
READMEにあるようにCurlかHomebrewを使った方法で入れてみてください。
使い方はddv
コマンドに比較したいディレクトリを二つ渡します。
$ ddv dir1 dir2
そうすると、diff -r
の結果で両方のディレクトリにあって、かつ
違いのあるファイルの一覧リストを表示します。
ここで、選んでEnter
/Space
を押すと、二つのディレクトリにあるファイルを
vim -d
で開きます。
後は普通に編集。直しても直さなくてもOK。
終了後、元の画面に戻りますが、もう編集しなくても良いと思ったらd
を押して
リストから削除。
また、最初から編集しなくて良い物もd
を押せば消していけるので、
違いがあるファイルを順にチェックしながら必要なら直して
リストから消して。。。という事が出来ます。
以下、簡単なデモ(以下ではddv
のスクリプトだけ作業ディレクトリに置いていますが
上のREADMEにある通り入れてそこにパスが通ってれば直接ddv
で)。
ちなみに、Vimみたく/
で検索モードに入って、文字を打ちこむことで絞込も出来ます。
まとめ
昨年はAdventカレンダーにVimその物を使わずに 他でVimっぽく作業すると言うエントリで参加しましたが 1、 今回はVim自体を実際に使ってるので、一歩進んだ?(戻った?)感じ。
次辺り書く機会があればVimの中だけの話が出来れば、 とは思っていたり居なかったり。
後、この記事はVim Advent Calendar 2013の1月29日用、60日目なんですが、1月29日がすでに@tyruさんによって書かれてる。。。 (61日目分にはなっていますが。。。)