Vim Fugitive


:G
:G status
:G commit
:G add %
:Gdiff
:G push
:Glog

Add current file and commit with diff in a split


function! s:GitAdd()
    exe "G add %"
    exe "G diff --staged"
    exe "only"
    exe "G commit"
endfunction
:command! GitAdd :call s:GitAdd()
nnoremap gic :GitAdd<CR>

:on[ly]

C-W o

:on[ly] will make the current buffer the only one on the screen. This is super helpful as many of fugitive commands will open in a split by default.

C-I C-O

cycle through the jumplist

This one has nothing to do with fugitive, but is a native vim feature that makes fugitive glorious. Before I realized how to utilize C-i and C-o, I would get completely lost when using fugitive. Digging deep into the log, opening a file from a specific commit, then no way to get back where I was in the log.

C-i jump

:jump[s]

show the jumplist

The jumplist is sorted Oldest to newest

:Telescope jumplist

When navigating the jumplist with :Telescope jumplist, it will add a new entry to the jumplist and let you get back to where you were with a C-O.

:Telescope jumplist adds to the jumplist

C-W J / C-W L

:G log


:G log
:G log -p
:Glog

Ggrep


:Ggrep python **/*md

Unlike :vim[grep] you don't need to specify a file glob.


:Ggrep python

Staging Hunks

In the file you want to stage hunks of run :Gdiff. Then use vim's diff commands (dp, do, :diffput, :diffget) to move the hunk between the stage/index. Then write the file to stage.


:Gdiff
dp
:w
:Gcommit