rcmdnk's blog

20140129_ddv_200_200

この記事はVim Advent Calendar 2013 の60日目の記事です。 前回59日目は@deton_kihさんによる GNU screenからVimへのペーストを、インデント崩れを回避しつつ簡潔な操作で行う でした。

Vimには色々な便利な機能がありますが、その中でも結構重宝するのが diff機能だと思います。

通常、二つのファイルを比較するものですが、 似たような二つのディレクトリの中にある(前にコピーして作った、とか) 違いのファイルを順次比較していける様なスクリプトを作りました。

二つのディレクトリのdiffをvimで順にチェック/較正していく

vim -dはファイル差分を表示させて編集も出来てしまう機能ですが、 二つの似たようなディレクトリを比較して編集したい場合、

  1. 二つのディレクトリをdiffで比較して差分があるファイルを探しだして
  2. 該当ファイルを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みたく/で検索モードに入って、文字を打ちこむことで絞込も出来ます。

sentakuに検索機能追加

まとめ

昨年はAdventカレンダーにVimその物を使わずに 他でVimっぽく作業すると言うエントリで参加しましたが 1、 今回はVim自体を実際に使ってるので、一歩進んだ?(戻った?)感じ。

次辺り書く機会があればVimの中だけの話が出来れば、 とは思っていたり居なかったり。

後、この記事はVim Advent Calendar 2013の1月29日用、60日目なんですが、1月29日がすでに@tyruさんによって書かれてる。。。 (61日目分にはなっていますが。。。)

Sponsored Links
Sponsored Links

« sentakuに検索機能追加 Gitでブランチをリモートに送る時の注意点 »

}