92

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.

5 Answers 5

75

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
9
  • 3
    Is there a way to lock scrolling between the two windows?
    – Zaid
    Commented Aug 30, 2010 at 9:37
  • 1
    Yes, check out vimdoc.sourceforge.net/htmldoc/options.html#%27scrollbind%27 - with vimdiff it is the default. Commented Aug 30, 2010 at 10:17
  • 1
    I usually use "diff file1 file2" on the command line.
    – djangofan
    Commented Oct 24, 2012 at 21:01
  • 3
    @Zaid Use vimdiff file1.txt file2.txt (see below) Commented Jun 19, 2017 at 18:22
  • 1
    This does not answer the question. The question was how to compare two different files in vim. This answer describes how to split the view of a single file vertically. Which shows two views of the same file. This answer also suggests using vimdiff, which DOES provide a solution to comparing two files in a vim-like environment, however again, not what op was asking for. Question was "Is it possible to view two files side-by-side in Vim", not in vimdiff.
    – Dave
    Commented Feb 16, 2022 at 21:11
70

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.

3
  • 20
    :windo :diffthis can be used instead of the last three commands.
    – Bernhard
    Commented Oct 24, 2012 at 11:12
  • This should be the correct answer. :vs otherfile literally compares two files in vim, not vimdiff.
    – Dave
    Commented Feb 16, 2022 at 21:13
  • Thank you for vim.exe -d file1 file2 that works very well! Commented Aug 2, 2022 at 4:02
22

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.

2
  • Quick and simple! And works without issues when you already have vim opened. Should be the accepted answer!
    – Sheharyar
    Commented Jul 22, 2020 at 14:34
  • diffsplit can be abbreviated, so :vert diffs file2 is sufficient.
    – Wolfson
    Commented Oct 5, 2020 at 12:36
7

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.

0

For those of you using neovim:

nvim -d file1 file2 [file3 [file4]]

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .