読者です 読者をやめる 読者になる 読者になる

Vimのタブで開いているバッファのdiffを簡単に表示するpluginを書いた

Vim

この記事はVim Advent Calendar 2013の57日目の記事です。
56日目はmanga_osyoさんによる:substitute をプレビューする over.vim にスクロール機能を実装したでした。

本記事では、Vimのタブで開いているバッファのdiffを簡単に表示するpluginを書いたのでご紹介します。

※ちなみに本日1/26は、私derisの誕生日だったりします。いわゆる誕生日VACです。わーい、めでたいですね(棒

vim-diffbuf

vim-diffbufはタブで 開いているバッファ同士のdiffをとるのが面倒で作ったpluginです。
(同一タブ内で開いていればwindo diffthisで一発なんですけどね…)

diffの対象にしたい1つ目のバッファをカレントバッファとした状態でDiffBufコマンドを 実行し、diff対象にしたいもう1つのバッファでも同様にDiffBufコマンドを実行すると、 新規タブ上で垂直分割した2つのdiff対象のバッファのdiffを開きます。

実際の動作は以下のGIFアニメを見てください。

screenshot

上記GIFアニメの例では、別タブで2つの無名バッファが開かれており、 それぞれのバッファをカレントバッファとした状態でDiffBufコマンドを 実行することで2つのバッファのdiffを新規タブで開いています。

vim-diffbufでは、1つ目のdiff対象でDiffBufコマンドを実行すると 内部で、diff対象を保存します。2つめのdiffでDiffBufコマンドを 実行した時に、2つのdiffを表示します。この際内部で保存したdiff対象 はクリアするため、再度、DiffBufコマンドを実行することで、別の diff対象同士のdiffをとることが可能です。

future work

まだ作りたてなので、インターフェースは、引数なしのDiffBufコマンド (と同様の関数diffbuf#diffbuf)のみと非常に単純なpluginです。 また、diffを開く際も、新規タブ&垂直分割と固定です。 そのうち機能拡張しようと思いますが、とりあえず使いながら使いづらいところを 拡張していこうと思っています。

今のところ思いつくのは以下のような拡張です。

  • バッファ番号指定のdiff
  • 開くウィンドウの指定(新規タブか既存タブか、垂直分割か水平分割か)

もし、要望があればフィードバックしていだけるとうれしいです。

まとめ

以上が、Vimで既存バッファをvimdiffしたいときに便利なpluginについてのご紹介でした。

本題とはそれますが、Vimレベルが上がるのでvimrc読書会に参加することをおすすめします。毎週土曜日23時からやってます。

それではVim Advent Calendar 2013の57日目を終わります。

明日のVim Advent Calendar 2013はhaya14busaさんです。