* <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'. * Respect $GIT_CEILING_DIRECTORIES. * Look for $GIT_DIR and $GIT_WORK_TREE. * Improve Windows support. * Assorted bug fixes.
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 the output of git status
with :Gstatus
. Press -
to
add
/reset
a file's changes, or p
to add
/reset
--patch
that
mofo. And guess what :Gcommit
does!
: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. :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.
Use :Gbrowse
to open the current file on GitHub, with optional line
range (try it in visual mode!). If your current repository isn't on
GitHub, git instaweb
will be spun up instead.
Add %{fugitive#statusline()}
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
- 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
Installation
If you don't have a preferred installation method, I recommend installing pathogen.vim, and then simply copy and paste:
cd ~/.vim/bundle
git clone git://github.com/tpope/vim-fugitive.git
Once help tags have been generated, you can view the manual with
:help fugitive
.
If your Vim version is below 7.2, I recommend also installing vim-git for syntax highlighting and other Git niceties.
FAQ
I installed the plugin and started Vim. 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.
I opened a new tab. 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.
Why is
:Gbrowse
not using the right browser?
:Gbrowse
delegates to git web--browse
, which is less than perfect
when it comes to finding the right browser. You can tell it the correct
browser to use with git config --global web.browser ...
. On OS X, for
example, you might want to set this to open
. See git web--browse --help
for details.
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
.