Vim Fugitive

edit ✏️

: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