Description
^^^^^^^^^^^

When specifying `--tool=vimdiff` in `git mergetool` Git will open Vim with a 4
windows layout distributed in the following way:
....
------------------------------------------
|             |           |              |
|   LOCAL     |   BASE    |   REMOTE     |
|             |           |              |
------------------------------------------
|                                        |
|                MERGED                  |
|                                        |
------------------------------------------
....
`LOCAL`, `BASE` and `REMOTE` are read-only buffers showing the contents of the
conflicting file in specific commits ("commit you are merging into", "common
ancestor commit" and "commit you are merging from" respectively)

`MERGED` is a writable buffer where you have to resolve the conflicts (using the
other read-only buffers as a reference). Once you are done, save and exit Vim as
usual (`:wq`) or, if you want to abort, exit using `:cq`.

Layout configuration
^^^^^^^^^^^^^^^^^^^^

You can change the windows layout used by Vim by setting configuration variable
`mergetool.vimdiff.layout` which accepts a string where the following separators
have special meaning:

  - `+` is used to "open a new tab"
  - `,` is used to "open a new vertical split"
  - `/` is used to "open a new horizontal split"
  - `@` is used to indicate which is the file containing the final version after
    solving the conflicts. If not present, `MERGED` will be used by default.

The precedence of the operators is this one (you can use parentheses to change
it):

    `@` > `+` > `/` > `,`

Let's see some examples to understand how it works:

* `layout = "(LOCAL,BASE,REMOTE)/MERGED"`
+
--
This is exactly the same as the default layout we have already seen.

Note that `/` has precedence over `,` and thus the parenthesis are not
needed in this case. The next layout definition is equivalent:

    layout = "LOCAL,BASE,REMOTE / MERGED"
--
* `layout = "LOCAL,MERGED,REMOTE"`
+
--
If, for some reason, we are not interested in the `BASE` buffer.
....
------------------------------------------
|             |           |              |
|             |           |              |
|   LOCAL     |   MERGED  |   REMOTE     |
|             |           |              |
|             |           |              |
------------------------------------------
....
--
* `layout = "MERGED"`
+
--
Only the `MERGED` buffer will be shown. Note, however, that all the other
ones are still loaded in vim, and you can access them with the "buffers"
command.
....
------------------------------------------
|                                        |
|                                        |
|                 MERGED                 |
|                                        |
|                                        |
------------------------------------------
....
--
* `layout = "@LOCAL,REMOTE"`
+
--
When `MERGED` is not present in the layout, you must "mark" one of the
buffers with an asterisk. That will become the buffer you need to edit and
save after resolving the conflicts.
....
------------------------------------------
|                   |                    |
|                   |                    |
|                   |                    |
|     LOCAL         |    REMOTE          |
|                   |                    |
|                   |                    |
|                   |                    |
------------------------------------------
....
--
* `layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE"`
+
--
Three tabs will open: the first one is a copy of the default layout, while
the other two only show the differences between (`BASE` and `LOCAL`) and
(`BASE` and `REMOTE`) respectively.
....
------------------------------------------
| <TAB #1> |  TAB #2  |  TAB #3  |       |
------------------------------------------
|             |           |              |
|   LOCAL     |   BASE    |   REMOTE     |
|             |           |              |
------------------------------------------
|                                        |
|                MERGED                  |
|                                        |
------------------------------------------
....
....
------------------------------------------
|  TAB #1  | <TAB #2> |  TAB #3  |       |
------------------------------------------
|                   |                    |
|                   |                    |
|                   |                    |
|     BASE          |    LOCAL           |
|                   |                    |
|                   |                    |
|                   |                    |
------------------------------------------
....
....
------------------------------------------
|  TAB #1  |  TAB #2  | <TAB #3> |       |
------------------------------------------
|                   |                    |
|                   |                    |
|                   |                    |
|     BASE          |    REMOTE          |
|                   |                    |
|                   |                    |
|                   |                    |
------------------------------------------
....
--
* `layout = "LOCAL,BASE,REMOTE / MERGED + BASE,LOCAL + BASE,REMOTE + (LOCAL/BASE/REMOTE),MERGED"`
+
--
Same as the previous example, but adds a fourth tab with the same
information as the first tab, with a different layout.
....
---------------------------------------------
|  TAB #1  |  TAB #2  |  TAB #3  | <TAB #4> |
---------------------------------------------
|       LOCAL         |                     |
|---------------------|                     |
|       BASE          |        MERGED       |
|---------------------|                     |
|       REMOTE        |                     |
---------------------------------------------
....
Note how in the third tab definition we need to use parenthesis to make `,`
have precedence over `/`.
--

Variants
^^^^^^^^

Instead of `--tool=vimdiff`, you can also use one of these other variants:

  * `--tool=gvimdiff`, to open gVim instead of Vim.

  * `--tool=nvimdiff`, to open Neovim instead of Vim.

When using these variants, in order to specify a custom layout you will have to
set configuration variables `mergetool.gvimdiff.layout` and
`mergetool.nvimdiff.layout` instead of `mergetool.vimdiff.layout`

In addition, for backwards compatibility with previous Git versions, you can
also append `1`, `2` or `3` to either `vimdiff` or any of the variants (ex:
`vimdiff3`, `nvimdiff1`, etc...) to use a predefined layout.
In other words, using `--tool=[g,n,]vimdiffx` is the same as using
`--tool=[g,n,]vimdiff` and setting configuration variable
`mergetool.[g,n,]vimdiff.layout` to...

  * `x=1`: `"@LOCAL, REMOTE"`
  * `x=2`: `"LOCAL, MERGED, REMOTE"`
  * `x=3`: `"MERGED"`

Example: using `--tool=gvimdiff2` will open `gvim` with three columns (LOCAL,
MERGED and REMOTE).
