Hack #194: Vim でマージを行う
Posted at 2011/01/11ツイート
Hack #18: 複数のファイルの差分を眺めるで差分を見る方法を紹介しましたが、Vim ではこの状態からマージを行うことも可能です。
do dp
マージを行うには、差分の行か差分の直下の行にカーソルを持っていき、do か dp を実行します。 do で反対側のバッファの状態を現在のバッファへ適用します。dp で現在のバッファの状態を反対側のバッファへ適用します。それぞれ diff obtain/diff put の略です。get ではなく obtain なのは、dg は dgg と混同するため使えなかったからです。
差分の直下の行、というのは、反対側のバッファで追加されている行の場合、現在のバッファには行が存在せずカーソルを置くことができないためです。その場合差分の直下の行で操作を実行します。 バッファの最終行の下にこのような差分があった場合は、特別にカーソルが最終行にあった場合にその下の差分を操作できます。
:diffget
:diffput
高機能なコマンド版の操作もあります。実際、do と dp はそれぞれ :diffget
と :diffput
を引数なしで呼び出した場合と同じ動作になります。
コマンド版では範囲(range)を与えることができ、これによりチャンクを分割したマージが可能です。
" Visual-mode で範囲を選択した後に、その範囲を反対側のバッファへ適用する
:'<,'>diffput
また、Vim では 3 ファイル以上の差分の比較も可能になっていますが、その場合引数でバッファを指定することで差分をやりとりするバッファを指定することができます。バッファはバッファ番号かバッファ名のパターンや一部で指定します。
" バッファ名に "BASE" を含むバッファを対象にする
:diffget BASE
:diffupdate
バッファを更新していると、差分のハイライトが徐々におかしくなることもあります。その場合は、:diffupdate
コマンドを実行すれば差分情報を更新することができます。
もどる
blog comments powered by Disqus