sponsor Vim development Vim logo Vim Book Ad

fugitive.vim : A Git wrapper so awesome, it should be illegal

 script karma  Rating 2966/859, Downloaded by 13799  Comments, bugs, improvements  Vim wiki

created by
Tim Pope
script type
I'm not going to lie to you; fugitive.vim may very well be the best Git wrapper of all time. Check out these features:

View any blob, tree, commit, or tag in the repository with :Gedit (and :Gsplit, :Gvsplit, :Gtabedit, ...). Edit a file in the index and write to it to stage the changes. Use :Gdiff to bring up the staged version of the file side by side with the working tree version and use Vim's diff handling capabilities to stage a subset of the file's changes.

Bring up the output of git-status with :Gstatus. Press `-` to add/reset a file's changes, or `p` to add/reset --patch. And guess what :Gcommit does!

:Gblame brings up an interactive vertical split with git-blame output. Press enter on a line to reblame the file as it stood in that commit, or`o` to open that commit in a split.

:Gmove does a git-mv on a file and simultaneously renames the buffer. :Gremove does a git-rm on a file and simultaneously deletes the buffer.

Use :Ggrep to search the work tree (or any arbitrary commit) with git-grep, skipping over that which is not tracked in the repository. :Glog loads all previous revisions of a file into the quickfix list so you can iterate over them and watch the file evolve!

:Gread is a variant of `git checkout -- filename` that operates on the buffer rather than the filename.  This means you can use `u` to undo it and you never get any warnings about the file changing outside Vim. :Gwrite writes to both the work tree and index versions of a file, making it like git-add when called from a work tree file and like git-checkout when called from the index or a blob in history.

Add %{fugitive#statusline()} to 'statusline' to get an indicator with the current branch in (surprise!) your statusline.

Oh, and of course there's :Git for running any arbitrary command.

The preferred submission method for bug reports, feature requests, and patches is GitHub issues: http://github.com/tpope/vim-fugitive. I also accept email.
install details
Extract in ~/.vim (~\vimfiles on Windows). I highly recommend grabbing directly from http://github.com/tpope/vim-fugitive as this version tends to fall out of date.
script versions (upload new version)

Click on the package to download.

package script version date Vim version user release notes
fugitive.zip 2.4 2018-07-10 7.0 Tim Pope Split into plugin, autoload, and ftdetect files.
Support mods like :vertical on :Gstatus and :Gedit family.
Provide :Grebase (no --interactive).
Bug fixes.
fugitive.zip 2.3 2018-05-29 7.0 Tim Pope Support worktrees.
Provide API for extensible :Gbrowse support.
Remove GitHub URL support in favor of rhubarb.vim.
Provide :Gdelete to delete both file and buffer.
Provide :Grename to move relative to file's parent directory.
Split to open file when :Gstatus is only window.
Provide U in :Gstatus to discard changes.
Provide additional :Gstatus commit maps.
Provide d2o and d3o to obtain diff during conflict.
Support :tab Gcommit.
Open :Gcommit tab before current.
Support :Gdiff +cmd.
Support gf in Git file types.
Add flagship.vim statusline indicator.
Use the Neovim terminal emulator for :Git.
Bug fixes.
fugitive.zip 2.2 2015-01-20 7.0 Tim Pope Provide :Gpush, :Gfetch, :Gmerge, and Gpull.
Use -L to handle :Glog range.
:Gcommit -v opens message in new tab.
API for custom :Gbrowse handlers.
Invoke :Browse if available to open URL.
Colorize hashes in :Gblame buffer.
Set cursorbind and nobuflisted in :Gblame buffers.
:Gblame in blame buffer toggles buffer.
fugitive.zip 2.1 2014-06-24 7.0 Tim Pope Fix :Gdiff horizontal/vertical disposition.
fugitive.zip 2.0 2014-06-23 7.0 Tim Pope <C-R><C-G> in :Gstatus recalls cursor line filename.
Map dp to show diff in :Gstatus.
Add ca and cA commit maps to :Gstatus.
Add cc alias for C in :Gstatus.
Disable swapfile in :Gstatus.
Replace :Gstatus cv with cva and cvc.
Add an `S` mapping for vertical splits from :Gstatus.
Close diffs when navigating from :Gstatus.
Enable folding in :Gstatus.
Accept a count with :Gstatus <C-N>/<C-P>.
Allow <C-p> pass through to ctrlp.vim in :Gstatus.
Add . in :Gstatus to prepopulate command line with revision.
Fix :Gstatus dp with external diff enabled.
Force displayCommentPrefix to fix :Gstatus on 1.8.5+.
Support localized `git status`.
Map g? and <F1> to show help in :Gstatus and :Gblame.
Kill relativenumber in blame buffer.
Fix jump to line on reblame.
Return to blamed buffer on q in blame.
Restore blamed window on gq in blame.
Fix :Gblame scrollbind with folds.
Jump from blame to commit focuses relevant diff.
:Gblame: Retain original alternate buffer.
Use - not <CR> for reblame.
Switch :Gblame <CR> to open commit.
Open fold when jumping to commit from blame.
Add maps for resizing blame window.
Conceal file names and line numbers in :Gblame.
Set winfixwidth in :Gblame buffers.
Press <CR> in :Gblame to open commit (reblame is now -).
Better csh support.
Work around "always" color option.
Fix trailing blank line when editing index files.
Use HTTPS for GitHub URLs in README.
:Gdiff split direction based on 'diffopt' and window size.
Focus diff window on :Gdiff.
Restore options when turning off diff mode.
Set bufhidden=delete in historical buffers.
Fix modeline errors in historical buffers.
Change cp to cP.
Add :Git! et al. for loading output into a buffer.
Tab complete Git aliases.
Enter on a +/- diff line jumps to that line.
Better Windows support.
Support core.autocrlf=false on Windows.
Work around slow \\ Windows network path.
Work around .git in 'wildignore'.
Fix garbage during :Gcommit with alternate screen.
Fix garbling on :Gcommit when nothing is staged.
Hack around broken :Gcommit with symlinked .git.
Use y<C-G> to yank the current object's path.
Preserve alternate file in :Gmove.
Support bare repositories that don't end in .git.
Support .git-file repositories (including submodules).
Support symlinked .git if core.worktree is set.
Fix redraw issue after :Gbrowse.
Support GitHub FI in :Gbrowse.
Support implicit GitHub username in remote for :Gbrowse.
Make fugitive commands available in nerdtree buffers.
Make fugitive commands available in command line window.
:Glgrep and :Gllog.
:.Glog jumps to same line in each file.
Map - to go up a directory.
Provide custom 'foldtext'.
Look for $GIT_DIR and $GIT_WORK_TREE.
Improve Windows support.
Assorted bug fixes.
fugitive.zip 1.2 2011-04-29 7.0 Tim Pope Support :Gmove in a directory.
Provide :Gbrowse to open code on GitHub or in git-instaweb.
Provide :Gwq to :quit after :Gwrite.
Provide :Gsdiff to do a horizontal diff.
Map ds in :Gstatus to do a horizontal diff.
Map <C-N> and <C-P> in :Gstatus to cycle between files.
Map `-` on headings in :Gstatus.
Map dp in stage conflict to do the right thing.
Point 'tags' at .git/tags.
Windows fixes. [Michael Geddes]
fugitive.zip 1.1 2010-03-21 7.0 Tim Pope Much better windows support ('shellslash' no longer required).
Delete blame buffers when closed.
Pass :Gblame flags along to git-blame.
Fix duplicate "Signed-off-by" lines.
Finish pending commit even if exiting Vim.
Allow double quotes in :Git and :Ggrep arguments.
`D` in :Gstatus shows a diff.
fugitive.zip 1.0 2010-02-15 7.0 Tim Pope Initial upload
ip used for rating:

If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to the maillist. Help Bram help Uganda.
SourceForge.net Logo