|  | 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 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 as follows (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 arobase (`@`). 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 parentheses 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` (though the | 
|  | latter will be used as fallback if the variant-specific one is not set). | 
|  |  | 
|  | 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]vimdiff<x>` 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`). |