Comparing two files in Vim

Is it possible to view two files side-by-side in Vim? If so, how can I set up my editor to do this, and is there a way to diff between the two files within Vim?

I am aware of the :next and :prev commands, but this is not what I’m after. It would really be nice to view the two files in tandem.

Asked By: Zaid

||

Open the side by side view:

Ctrl+w v

Change between them:

Ctrl+w h or l

You can then open another file for comparison in one side by entering a command such as:

:e file2.txt

Checkout the vimdiff command, part of the vim package, if you want a diff-like view, e.g.:

vimdiff file1.txt file2.txt
Answered By: maxschlepzig

You can also open vim in split-screen mode, with the -O option:-

vim -O file1 [file2 ...]

To then turn on diff mode, you need to run the :diffthis command in each pane.

Another use-case scenario, is if you’ve already got one file open in vim, and you want to open and compare it against another. Then you can use the following vim commands:-

:vs otherfile (open otherfile in vertical split screen)
:diffthis (turn on diff mode in original file)
Ctrl+w l  (swap to newly opened file)
:diffthis (turn on diff mode in opened file)

You can then turn off diff mode in each pane with the vim command :diffoff.

EDIT
And the other standard one that hasn’t been mentioned:-

vim -d file1 [file2 ...]

This is equivalent to calling vimdiff directly.

Answered By: Alex Leach

Or just open the first file in VIM, then :vert diffsplit file2
:vert
makes it split the screen vertically.

diffsplit does a diff, and splits the files and scrolls locks them.

Answered By: Dustin

While it has already been answered how to start the diff, it’s also important how to stop it in all windows. For completeness, I repeat the comment from @Bernhard.

Start and Stop Diff of two files opened in 2 Windows (works in both, vertical and horizontal split):

:windo diffthis
:windo diffoff

this can be shortened to either

:windo difft
:windo diffo

or

:windo difft
:diffo!

Be aware that opened windows for showing plugin content lead to issues. So close stuff like NERDtree, minibufexplorer++ etc before.

Custom commands:
To ease up things you can add custom commands to your ~/.vimrc:

command! Difft [ClosePluginWindow |] windo diffthis
command! Diffo windo diffoff

with [ClosePluginWindow |] being optional to close plugin windows you usually use. For NERDtree e.g. this would be NERDTreeClose |.

Credits go to @cxw and @Jordi Freixa.

Answered By: Wolfson

For those of you using neovim:

nvim -d file1 file2 [file3 [file4]]

Reference: https://neovim.io/doc/user/diff.html

Answered By: Rob Bar
Categories: Answers Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.