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
: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
Bring up an enhanced version of
git status with
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
output. Press enter on a line to edit the commit where the line
o to open it in a split. When you're done, use
in the historic buffer to go back to the work tree version.
:Gmove does a
git mv on a file and simultaneously renames the
:Gdelete does a
git rm on a file and simultaneously deletes
: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.
: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
'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,
Git! to open the output of a command in a temp file.
- A complement to command line git
- Working with the git index
- Resolving merge conflicts with vimdiff
- Browsing the git object database
- Exploring the history of a git repository
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
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
:tabedit over commands like
Here's a patch that automatically opens the quickfix window after
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
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
Copyright (c) Tim Pope. Distributed under the same terms as Vim itself.