web-dev-qa-db-ja.com

vimdiffを使用して変更をマージする

私の場合、2つのファイルfile1とfile2があります。 vimdiffを使用して、次のように変更をマージします。

  1. 最初の違いは、file1の行をfile2の行の上に配置することです。これは、file2のListing 2List 2List 2であり、その後にマージされたファイルでListing 2が続くなどの違いを意味します。
  2. 別の変更で大文字と小文字を逆にします。

以下にスナップショットを示します。

enter image description here

Vimdiffを使用してこれをどのように達成できますか?

38
doptimusprime

2つのウィンドウ間で前後に切り替えることができます Ctrlww。 1つのウィンドウからコピーできます Ctrlww、そして他に貼り付けます。違いを解決すると、ハイライトが変わり、消えます。

vimdiff は実際にはマージツールではありません。ファイル間の違いが表示され、手動でマージを行います。

これを見てください ビデオ

19
David W.

次の基本的なコマンドを使用してマージできます。

do -他のウィンドウから現在のウィンドウへの変更を取得します。

dp -変更を現在のウィンドウから別のウィンドウに入れます。

]c -次の変更にジャンプします。

[c -前の変更にジャンプします。

zo -折れ線を開きます。

zc -折り線を閉じます。

Ctrlww -ウィンドウを変更します。

:only | wq-他のウィンドウを終了し、書き込み、終了します。

詳細は この記事 をご覧ください。

97
F Yaqoob

@David W.が答えで示唆しているように、ウィンドウを切り替えてコピーして貼り付けるだけで違いを解決できますが、Vimにはこれを簡素化する専用の:diffputおよび:diffgetコマンドもあります。これら(または対応する通常モードdoおよびdpコマンド)を使用すると、ウィンドウを切り替える必要はなく、範囲はデフォルトで現在の変更になります。

他のバッファの違いで上書きするのではなくaddが必要な場合(従来の双方向diffではかなり珍しいケースです)、まだyankである必要があります:diffgetの後の行とput.

1つの場所で作業が完了したら、]c[cコマンドを使用して次の違いにジャンプできます。

14
Ingo Karkat