*gitgutter.txt* A Vim plugin which shows a git diff in the gutter.
Vim Git Gutter
Author: Andy Stewart
Plugin Homepage:
===============================================================================
CONTENTS *GitGutterContents*
1. Introduction ................. |GitGutterIntroduction|
2. Installation ................. |GitGutterInstallation|
3. Usage ........................ |GitGutterUsage|
4. Commands ..................... |GitGutterCommands|
5. Autocommand .................. |GitGutterAutocmd|
6. CUSTOMISATION................. |GitGutterCustomisation|
7. FAQ .......................... |GitGutterFAQ|
===============================================================================
1. INTRODUCTION *GitGutterIntroduction*
*GitGutter*
Vim Git Gutter is a Vim plugin which shows a git diff in the 'gutter' (sign
column). It shows whether each line has been added, modified, and where lines
have been removed.
This is a port of the Git Gutter plugin for Sublime Text 2.
===============================================================================
2. INSTALLATION *GitGutterInstallation*
* Pathogen:
>
cd ~/.vim/bundle
git clone git://github.com/airblade/vim-gitgutter.git
<
* Voom:
Edit your plugin manifest (`voom edit`) and add:
>
airblade/vim-gitgutter
<
* VimPlug:
Place this in your .vimrc:
>
Plug 'airblade/vim-gitgutter'
<
Then run the following in Vim:
>
:source %
:PlugInstall
<
* NeoBundle:
Place this in your .vimrc:
>
NeoBundle 'airblade/vim-gitgutter'
<
Then run the following in Vim:
>
:source %
:NeoBundleInstall
<
* No plugin manager:
Copy vim-gitgutter's subdirectories into your vim configuration directory:
>
cd tmp && git clone git://github.com/airblade/vim-gitgutter.git
cp vim-gitgutter/* ~/.vim/
<
See |add-global-plugin|.
===============================================================================
3. USAGE *GitGutterUsage*
You don't have to do anything: it just works.
===============================================================================
4. COMMANDS *GitGutterCommands*
Commands for turning Git Gutter on and off:
:GitGutterDisable *:GitGutterDisable*
Explicitly turn Git Gutter off.
:GitGutterEnable *:GitGutterEnable*
Explicitly turn Git Gutter on.
:GitGutterToggle *:GitGutterToggle*
Explicitly turn Git Gutter on if it was off and vice versa.
:GitGutter *:GitGutter*
Update signs for the current buffer.
:GitGutterAll *:GitGutterAll*
Update signs across all buffers.
Commands for turning signs on and off (defaults to on):
:GitGutterSignsEnable *:GitGutterSignsEnable*
Explicitly turn line signs on.
:GitGutterSignsDisable *:GitGutterSignsDisable*
Explicitly turn line signs off.
:GitGutterSignsToggle *:GitGutterSignsToggle*
Explicitly turn line signs on if it was off and vice versa.
Commands for turning line highlighting on and off (defaults to off):
:GitGutterLineHighlightsEnable *:GitGutterLineHighlightsEnable*
Explicitly turn line highlighting on.
:GitGutterLineHighlightsDisable *:GitGutterLineHighlightsDisable*
Explicitly turn line highlighting off.
:GitGutterLineHighlightsToggle *:GitGutterLineHighlightsToggle*
Explicitly turn line highlighting on if it was off and vice versa.
Commands for jumping between marked hunks:
:GitGutterNextHunk *:GitGutterNextHunk*
Jump to the next marked hunk. Takes a count.
:GitGutterPrevHunk *:GitGutterPrevHunk*
Jump to the previous marked hunk. Takes a count.
Commands for staging or undoing individual hunks:
:GitGutterStageHunk *:GitGutterStageHunk*
Stage the hunk the cursor is in.
:GitGutterUndoHunk *:GitGutterUndoHunk*
Undo the hunk the cursor is in.
:GitGutterPreviewHunk *:GitGutterPreviewHunk*
Preview the hunk the cursor is in.
Use |:pclose| or |CTRL-W_CTRL-Z| to close the preview window.
===============================================================================
5. AUTOCOMMAND *GitGutterAutocmd*
After updating a buffer's signs vim-gitgutter fires a |User| |autocmd| with the
event GitGutter. You can listen for this event, for example:
>
autocmd User GitGutter call updateMyStatusLine()
<
===============================================================================
6. CUSTOMISATION *GitGutterCustomisation*
You can customise:
- The sign column's colours
- The signs' colours and symbols
- Line highlights
- The base of the diff
- Extra arguments for git-diff
- Key mappings
- The grep executable used
- Whether or not vim-gitgutter is on initially (defaults to on)
- Whether or not signs are shown (defaults to yes)
- Whether or not line highlighting is on initially (defaults to off)
- Whether or not vim-gitgutter runs in realtime (defaults to yes)
- Whether or not vim-gitgutter runs eagerly (defaults to yes)
- Whether or not vim-gitgutter runs asynchronously (defaults to yes)
Please note that vim-gitgutter won't override any colours or highlights you've
set in your colorscheme.
SIGN COLUMN
By default vim-gitgutter will make the sign column look like the line number
column (i.e. the |hl-LineNr| highlight group).
To customise your sign column's background color, first tell vim-gitgutter to
leave it alone:
>
let g:gitgutter_override_sign_column_highlight = 0
<
And then either update your colorscheme's |hlSignColumn| highlight group or set
it in your |vimrc|:
Desired appearance Command ~
Same as line number column highlight clear SignColumn
User-defined (terminal Vim) highlight SignColumn ctermbg={whatever}
User-defined (graphical Vim) highlight SignColumn guibg={whatever}
SIGNS' COLOURS AND SYMBOLS
To customise the colours, set up the following highlight groups in your
colorscheme or |vimrc|:
>
GitGutterAdd " an added line
GitGutterChange " a changed line
GitGutterDelete " at least one removed line
GitGutterChangeDelete " a changed line followed by at least one removed line
<
You can either set these with `highlight GitGutterAdd {key}={arg}...` or link
them to existing highlight groups with, say:
>
highlight link GitGutterAdd DiffAdd
<
To customise the symbols, add the following to your |vimrc|:
>
let g:gitgutter_sign_added = 'xx'
let g:gitgutter_sign_modified = 'yy'
let g:gitgutter_sign_removed = 'zz'
let g:gitgutter_sign_modified_removed = 'ww'
<
LINE HIGHLIGHTS
Similarly to the signs' colours, set up the following highlight groups in your
colorscheme or |vimrc|:
>
GitGutterAddLine " default: links to DiffAdd
GitGutterChangeLine " default: links to DiffChange
GitGutterDeleteLine " default: links to DiffDelete
GitGutterChangeDeleteLine " default: links to GitGutterChangeLineDefault
<
THE BASE OF THE DIFF
By default buffers are diffed against the index. To diff against a commit
instead:
>
let g:gitgutter_diff_base = ''
<
EXTRA ARGUMENTS FOR GIT-DIFF
To pass extra arguments to git-diff, add this to your |vimrc|:
>
let g:gitgutter_diff_args = '-w'
<
KEY MAPPINGS
To disable all key maps:
>
let g:gitgutter_map_keys = 0
<
To change the hunk-jumping maps (defaults shown):
>
nmap [c GitGutterPrevHunk
nmap ]c GitGutterNextHunk
<
To change the hunk-staging/undoing/previewing maps (defaults shown):
>
nmap hs GitGutterStageHunk
nmap hu GitGutterUndoHunk
nmap hp GitGutterPreviewHunk
<
To change the hunk text object maps (defaults shown):
>
omap ic GitGutterTextObjectInnerPending
omap ac GitGutterTextObjectOuterPending
xmap ic GitGutterTextObjectInnerVisual
xmap ac GitGutterTextObjectOuterVisual
<
TO USE A CUSTOM GREP COMMAND
To use a custom invocation for grep, use this:
>
let g:gitgutter_grep_command = 'grep --color=never -e'
<
TO TURN OFF VIM-GITGUTTER BY DEFAULT
Add to your |vimrc|
>
let g:gitgutter_enabled = 0
<
TO TURN OFF SIGNS BY DEFAULT
Add to your |vimrc|
>
let g:gitgutter_signs = 0
<
Note that the sign column will still be present if you have line highlighting
switched on.
TO TURN ON LINE HIGHLIGHTING BY DEFAULT
Add to your |vimrc|
>
let g:gitgutter_highlight_lines = 1
<
TO STOP VIM-GITGUTTER RUNNING IN REALTIME
Add to your |vimrc|
>
let g:gitgutter_realtime = 0
<
TO STOP VIM-GITGUTTER RUNNING EAGERLY
Add to your |vimrc|
>
let g:gitgutter_eager = 0
<
TO TURN OFF ASYNCHRONOUS UPDATES
By default diffs are run asynchronously. To run diffs synchronously
instead:
Add to your |vimrc|
>
let g:gitgutter_async = 0
<
===============================================================================
7. FAQ *GitGutterFAQ*
a. Why are the colours in the sign column weird?
Your colorscheme is configuring the |hl-SignColumn| highlight group weirdly.
Please see |GitGutterCustomisation| on customising the sign column.
b. What happens if I also use another plugin which uses signs (e.g. Syntastic)?
Vim only allows one sign per line. Before adding a sign to a line,
vim-gitgutter checks whether a sign has already been added by somebody else.
If so it doesn't do anything. In other words vim-gitgutter won't overwrite
another plugin's signs. It also won't remove another plugin's signs.