はじめに

こんにちは!今回はvimdiffコマンドについて解説します。

vimdiffは、2つ以上のファイルを並べて比較できるコマンドです。vim エディタの比較機能を使ったもの。「このファイル、何が違うんだろう?」という時に、ビジュアルに差分を確認できます。

プログラム開発やコンフィグ変更時の差分確認に超便利。バージョン管理の前にもよく使いますよ。

vimdiffコマンドとは

vimdiffは、複数のファイルをVimエディタで並べて比較表示する外部コマンドです。diffコマンドのテキスト出力と違って、ビジュアルに差分がハイライトされます。

Vimの強力な編集機能を使いながら差分確認ができるので、単なる比較にとどまらず、その場で修正することも可能です。

基本構文

1
vimdiff [オプション] ファイル1 ファイル2 [ファイル3 ファイル4 ...]

複数のファイルを比較することも可能です(最大4個まで推奨)。

主なオプション

オプション 説明
-d diffモード(vimdiffと同じ)
-R 読み取り専用モード
-u vimrc ファイルを指定
+[コマンド] 起動時にVimコマンドを実行

使用例

例1: 2つのファイルを比較

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
cat << 'EOF' > /tmp/file1.txt
line 1
line 2
line 3
EOF

cat << 'EOF' > /tmp/file2.txt
line 1
line 2 modified
line 3
line 4
EOF

vimdiff /tmp/file1.txt /tmp/file2.txt

実行結果:

1
(Vimが起動し、2つのファイルが左右に表示される)

異なる行がハイライトされます。

例2: 設定ファイルを比較

1
vimdiff /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

実行結果:

1
(現在の設定と バックアップの違いが表示)

変更内容をビジュアルに確認。

例3: プログラムのバージョン比較

1
vimdiff app_v1.py app_v2.py

実行結果:

1
(2つのバージョンの差分をハイライト)

コード変更を視覚的に確認。

例4: 3つのファイルを比較

1
vimdiff file1.txt file2.txt file3.txt

実行結果:

1
(3つのファイルが並べて表示される)

複数ファイルの同時比較。

例5: 読み取り専用モード

1
vimdiff -R /tmp/file1.txt /tmp/file2.txt

実行結果:

1
(比較表示のみ、編集不可)

誤った修正を防ぐために読み取り専用に。

例6: 特定行に移動して開く

1
vimdiff +10 /tmp/file1.txt /tmp/file2.txt

実行結果:

1
(10行目から開始)

大きなファイルの特定部分を比較。

例7: パッチを適用した場合の確認

1
2
3
cp original.c backup.c
patch original.c < changes.patch
vimdiff backup.c original.c

実行結果:

1
(パッチ適用前後の変更を確認)

パッチが正しく適用されたか確認。

例8: 設定ファイルのマージ

1
vimdiff config.json config.production.json

実行結果:

1
(2つの設定ファイルを比較しながらマージ)

設定値の違いを確認して統合。

例9: ログファイルの変更追跡

1
vimdiff /var/log/app.log.1 /var/log/app.log

実行結果:

1
(新しいログとバックアップログの違いを表示)

ログの変更内容を確認。

例10: スクリプト出力の比較

1
2
3
4
./script.sh > output1.txt
# スクリプトを修正
./script.sh > output2.txt
vimdiff output1.txt output2.txt

実行結果:

1
(修正前後のスクリプト出力を比較)

スクリプト修正の効果を確認。

Tips・注意点

Vim内での操作

1
2
3
4
5
6
7
8
9
# 差分間をジャンプ
]c  # 次の差分へ
[c  # 前の差分へ

# ウィンドウを切り替え
Ctrl+W Ctrl+W  # ウィンドウ切り替え

# 終了
:qa!  # 両方のウィンドウを閉じる

Vimのキーバインディングが有効。

diffコマンドとの違い

1
2
3
4
5
# diff: テキスト形式で差分を表示
diff file1.txt file2.txt

# vimdiff: ビジュアルに差分を表示(編集も可能)
vimdiff file1.txt file2.txt

ビジュアルで複雑な差分も理解しやすい。

ファイルの同期

1
2
3
4
5
# 左ウィンドウの内容を右ウィンドウにコピー
:diffput  # または do

# 右ウィンドウの内容を左ウィンドウにコピー
:diffget  # または dp

差分を確認しながら修正可能。

ハイライト色の設定

vimdiffは自動的に色を設定しますが、テーマによっては読みにくい場合があります。

1
2
# カラースキームをデフォルトに戻す
vimdiff -u NONE file1.txt file2.txt

実践的な使い方

バージョン管理前の確認

1
2
3
# 変更を確認してからコミット
git diff config.json
vimdiff config.json config.json.new

変更内容を完全に把握してからコミット。

デプロイ前の設定確認

1
2
# 本番環境の設定と確認
vimdiff nginx.conf /etc/nginx/nginx.conf

本番とステージングの設定差を確認。

Mergeコンフリクト解決

1
2
# Gitのマージコンフリクト解決時
vimdiff file.txt

Vimで両方のバージョンを並べて確認しながら解決。

バックアップ検証

1
2
# 定期バックアップが正しく機能しているか
vimdiff /etc/passwd /var/backups/passwd.bak

バックアップの内容が正確か確認。

まとめ

vimdiffコマンドのポイント:

  • 複数ファイルを並べてビジュアルに比較
  • diffコマンドより読みやすい
  • Vim編集機能で その場修正も可能
  • -R: 読み取り専用モード
  • ]c, [c: 差分ジャンプ
  • do, dp: 差分を同期
  • 設定ファイル、コード、ログの比較に最適
  • よく使う組み合わせ: vimdiff file1 file2, vimdiff -R file1 file2

diffコマンドのテキスト出力では理解しにくい複雑な差分も、vimdiffならビジュアルに確認できます。開発やシステム管理の効率が大幅に上がりますよ!