[Vim問題] ファイル間の差分をマージする方法は?

この記事では、Vimでプラグインを使わずに「ファイル間の差分をマージする」ためのコマンドやキー操作について、ご紹介します。

[解答] diff 機能でマージする

こちらの前提として、次の記事をご覧ください。

https://vim.blue/?p=1340

複数のファイルを diff 機能で比較している状態にした上で、以降のキー操作やコマンドを実行していく必要があります。

Vimコマンド1. :diffget

(ノーマルモード)
:diffget
または
:diffg

diff機能で表示している現在のバッファについて、カーソルのある個所をもう一方のバッファから差分をマージ(上書き)します。

:diffgetで差分をマージ
:diffgetで差分をマージ

上のアニメーションを見てわかる通り、連続した行だと一括でマージできます。

diff で今のバッファに get (取得)すると覚えるとよいでしょう。

Vimキーバインド1. do

(ノーマルモード)
do
doで差分をマージ
doで差分をマージ

先の :diffget と同じ機能を実現するキーバインドです。

“diff obtain” の略だそうです。get ではなく obtain (得る)ですね。 dg ではない点には要注意です。

Vimコマンド2. :diffput

(ノーマルモード)
:diffput
または
:diffpu

diff機能で表示している現在のバッファから、 カーソルのある個所をもう一方のバッファへ差分を全てマージ(上書き)します。

:diffputで差分をマージ
:diffputで差分をマージ

上のアニメーションを見てわかる通り、連続した行だと一括でマージできます。

Vimキーバインド2. dp

(ノーマルモード)
dp
dpで差分をマージ
dpで差分をマージ

先の :diffput と同じ機能を実現するキーバインドです。

“diff put” の略で、こちらは先の :diffput と共通なので覚えやすいですよね。

これらは、次の差分箇所を移動するキー操作と合わせて使うことで、より便利に使うことができます。

キー操作移動
[c前(上)の差分箇所へ移動する
]c次(下)の差分箇所へ移動する

必ず一緒に覚えてしまいましょう。

応用:パッチファイルをマージする

次のコマンドでパッチファイルを、現在のバッファにマージすることができます。

(ノーマルモード)
:diffpatch パッチファイルのファイルパス
または
:diffp パッチファイルのファイルパス

この機能はあまり利用機会が多くはないと思いますが、このような便利な機能があるのも Vim の魅力ですね。

このVimコマンドの補足情報

  • 利用頻度[star rate=3]
  • 便利さ[star rate=4]
  • 覚え易さ[star rate=3]

関連するVimヘルプ

Vimからは、下記のコマンドでヘルプを確認できます。

:help :diffpu
:help :diffput
:help do
:help :diffgu
:help :diffput
:help dp

ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。

Vim力を上げてくれる参考書籍

こちらの書籍を読めば、Vim力を上げること間違いありません。

[temp id=3]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Vim力アップして、そろそろ上級 Vimmer の仲間入りしたいIT系エンジニアの端くれです。読んでくる訪問者の皆様と一緒に、Vim力を上げていくことができる記事が書ければと考えています。