fugitive.vim: A Git wrapper so awesome, it should be illegal
Branch: master
Clone or download
Latest commit ad32eae Feb 23, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
autoload Override color.ui=always Feb 23, 2019
doc Provide "i" Feb 21, 2019
ftdetect Extract ftdetect file Jun 14, 2018
plugin Remove comment Feb 11, 2019
syntax Support expanding inline diffs in :Gstatus Jan 3, 2019
.gitattributes Add .gitattributes Apr 22, 2018
.gitignore Ignore tags file that Vim generates. Jul 18, 2010
CONTRIBUTING.markdown Add a note about options Mar 14, 2018
README.markdown Trailing whitespace Feb 12, 2019

README.markdown

fugitive.vim

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 an enhanced version of git status with :Gstatus. Press - to add/reset a file's changes, or = to expand an inline diff and operate on individual hunks. Use :Gcommit % to commit the current file, editing the commit message inside the currently running Vim.

:Gblame brings up an interactive vertical split with git blame output. Press enter on a line to edit the commit where the line changed, or o to open it in a split. When you're done, use :Gedit in the historic buffer to go back to the work tree version.

:Gmove does a git mv on a file and simultaneously renames the buffer. :Gdelete 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.

Use :Gbrowse to open the current file on the web front-end of your favorite hosting provider, with optional line range (try it in visual mode!). Plugins are available for popular providers such as GitHub, GitLab, Bitbucket, and Gitee.

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

Last but not least, there's :Git for running any arbitrary command, and Git! to open the output of a command in a temp file.

Screencasts

Installation

If you don't have a preferred installation method, one option is to install pathogen.vim, and then copy and paste:

cd ~/.vim/bundle
git clone https://github.com/tpope/vim-fugitive.git
vim -u NONE -c "helptags vim-fugitive/doc" -c q

FAQ

Why don't any of the commands exist?

Fugitive cares about the current file, not the current working directory. Edit a file from the repository. To avoid the blank window problem, favor commands like :split and :tabedit over commands like :new and :tabnew.

Here's a patch that automatically opens the quickfix window after :Ggrep.

This is a great example of why I recommend asking before patching. There are valid arguments to be made both for and against automatically opening the quickfix window. Whenever I have to make an arbitrary decision like this, I ask what Vim would do. And Vim does not open a quickfix window after :grep.

Luckily, it's easy to implement the desired behavior without changing fugitive.vim. The following autocommand will cause the quickfix window to open after any grep invocation:

autocmd QuickFixCmdPost *grep* cwindow

Self-Promotion

Like fugitive.vim? Follow the repository on GitHub and vote for it on vim.org. And if you're feeling especially charitable, follow tpope on Twitter and GitHub.

License

Copyright (c) Tim Pope. Distributed under the same terms as Vim itself. See :help license.