[Vim問題] Vimでファイル間の差分を表示する方法は?

Vimでファイル間の差分を表示する方法は?

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

[解答] diff 機能を活用する

外部コマンドを使用する必要はありません。標準機能で十分実現することができます。

コマンド vimdiff

(コマンドプロンプト/シェル)
vimdiff ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4)
gvimdiff ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4) 

コマンドプロンプトまたはシェルから直接ファイルを開いて、最大4つまでファイルを比較することができます。

コマンドプロンプトで4ファイルを開いた vimdiff
コマンドプロンプトで4ファイルを開いた vimdiff
gvim で4ファイルを比較
gvim で4ファイルを比較

Linuxなどでは diff コマンドが有名ですが、vimのキー操作で扱え、よりグラフィカルなのが魅力ですね。

colorscheme などの配色によりますが、差分箇所の行には明示的には表示されます。とても分かりやすく使えます。

ちなみに、次のコマンドでも同じ動作をします。

(コマンドプロンプト/シェル)
vim -d ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4)
gvim -d ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4)
neovim -d ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4) 

neovim-qt.exe には -d オプションは実装されていないようです。

また次のように -o オプションを指定することで、水平分割することも可能です。

(コマンドプロンプト/シェル)
vim -o ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4)
gvim -o ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4)
neovim -o ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4) 
 gvim で2ファイルを水平分割して比較
gvim で2ファイルを水平分割して比較

Vimコマンド1. diffsplit でファイル間の差分を比較する

(ノーマルモード)
:diffsplit 比較対象ファイルパス
または
:diffs 比較対象ファイルパス

このコマンドを使うと、今開いているファイル(バッファ)と指定したファイルを比較することができます。

 gvim で2ファイルを水平分割して比較
diffsplit で水平分割してファイル比較

ただ、ファイルの比較というと、先に紹介したように垂直分割した状態で比較する方が視認しやすいと思います。これは次のように実行すると、上手くファイルの比較ができます。

(ノーマルモード)
:vertical diffsplit 比較対象ファイルパス
または
:vertical diffs 比較対象ファイルパス
 または
:vert diffs 比較対象ファイルパス
gvim で垂直分割してファイル比較
gvim で垂直分割してファイル比較

Kaoriya版Vimでは、次のコマンドが実装されています。このコマンドによって、より短いコマンドで実行できます。

(ノーマルモード)
:VDsplit 比較対象ファイルパス

なお、差分箇所を移動するには次のキー操作を使うことができます。

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

また次のようにすると、diffモードを終了できます。

:diffoff
目次

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

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

関連するVimヘルプ

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

:help diff
:help vimdiff
:help gvimdiff
:help diff-mode

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

Vim力を上げる参考書籍

Vim力を上げるにはこれらの書籍が欠かせませんね。

[temp id=3]

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

この記事を書いた人

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

目次