vim-users.jp

Hack #194: Vim でマージを行う

Posted at 2011/01/11
このエントリーをはてなブックマークに追加

Hack #18: 複数のファイルの差分を眺めるで差分を見る方法を紹介しましたが、Vim ではこの状態からマージを行うことも可能です。

do dp

マージを行うには、差分の行か差分の直下の行にカーソルを持っていき、dodp を実行します。 do で反対側のバッファの状態を現在のバッファへ適用します。dp で現在のバッファの状態を反対側のバッファへ適用します。それぞれ diff obtain/diff put の略です。get ではなく obtain なのは、dgdgg と混同するため使えなかったからです。

差分の直下の行、というのは、反対側のバッファで追加されている行の場合、現在のバッファには行が存在せずカーソルを置くことができないためです。その場合差分の直下の行で操作を実行します。 バッファの最終行の下にこのような差分があった場合は、特別にカーソルが最終行にあった場合にその下の差分を操作できます。

:diffget :diffput

高機能なコマンド版の操作もあります。実際、dodp はそれぞれ :diffget:diffput を引数なしで呼び出した場合と同じ動作になります。

コマンド版では範囲(range)を与えることができ、これによりチャンクを分割したマージが可能です。

" Visual-mode で範囲を選択した後に、その範囲を反対側のバッファへ適用する
:'<,'>diffput

また、Vim では 3 ファイル以上の差分の比較も可能になっていますが、その場合引数でバッファを指定することで差分をやりとりするバッファを指定することができます。バッファはバッファ番号かバッファ名のパターンや一部で指定します。

" バッファ名に "BASE" を含むバッファを対象にする
:diffget BASE

:diffupdate

バッファを更新していると、差分のハイライトが徐々におかしくなることもあります。その場合は、:diffupdate コマンドを実行すれば差分情報を更新することができます。

thinca

もどる
blog comments powered by Disqus