この記事では、Vimでプラグインを使わずに「ファイル間の差分を表示する」ためのコマンドについて、ご紹介します。
[解答] diff 機能を活用する
外部コマンドを使用する必要はありません。標準機能で十分実現することができます。
コマンド vimdiff
(コマンドプロンプト/シェル) vimdiff ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4) gvimdiff ファイルパス1 ファイルパス2 (ファイルパス3 ファイルパス4)
コマンドプロンプトまたはシェルから直接ファイルを開いて、最大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)
Vimコマンド1. diffsplit でファイル間の差分を比較する
(ノーマルモード) :diffsplit 比較対象ファイルパス または :diffs 比較対象ファイルパス
このコマンドを使うと、今開いているファイル(バッファ)と指定したファイルを比較することができます。
ただ、ファイルの比較というと、先に紹介したように垂直分割した状態で比較する方が視認しやすいと思います。これは次のように実行すると、上手くファイルの比較ができます。
(ノーマルモード) :vertical diffsplit 比較対象ファイルパス または :vertical diffs 比較対象ファイルパス または :vert diffs 比較対象ファイルパス
Kaoriya版Vimでは、次のコマンドが実装されています。このコマンドによって、より短いコマンドで実行できます。
(ノーマルモード) :VDsplit 比較対象ファイルパス
なお、差分箇所を移動するには次のキー操作を使うことができます。
キー操作 | 移動 |
[c | 前(上)の差分箇所へ移動する |
]c | 次(下)の差分箇所へ移動する |
また次のようにすると、diffモードを終了できます。
:diffoff
このVimコマンドの補足情報
- 利用頻度
- 便利さ
- 覚え易さ
関連するVimヘルプ
Vimからは、下記のコマンドでヘルプを確認できます。
:help diff :help vimdiff :help gvimdiff :help diff-mode
ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。
Vim力を上げる参考書籍
Vim力を上げるにはこれらの書籍が欠かせませんね。
Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。
こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。
Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。