sponsor Vim development Vim logo Vim Book Ad

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

 script karma  Rating 4203/1237, Downloaded by 18352  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: https://github.com/tpope/vim-fugitive. I also accept email.
install details
Extract in ~/.vim (~\vimfiles on Windows).

rate this script Life Changing Helpful Unfulfilling 
script versions (upload new version)

Click on the package to download.

package script version date Vim version user release notes
fugitive.zip 3.2 2020-01-21 7.0 Tim Pope Provide :Git mergetool to load conflicts into quickfix list.
Provide :Git difftool to load arbitrary changesets into quickfix list.
Call FugitiveBlob/FugitiveCommit/etc autocommands on Fugitive buffer load.
:Git --paginate display results in temp buffer.
:Git --no-pager no longer displays results in temp buffer.
Accomodate loading Fugitive buffers in popup window.
Better PowerShell support.
Bug fixes.
fugitive.zip 3.1 2019-10-11 7.0 Tim Pope Commands are now global, not buffer local.
Calling a command in an unnamed buffer uses the working directory.
Preserve line number on :Gedit to return to work tree buffer.
Better submodule support in :Gstatus.
Support git-blame revision ignoring features.
Show first parent diff in merge commit buffer.
Remove deprecated support for .git/tags.
Bug fixes.
fugitive.zip 3.0 2019-08-20 7.0 Tim Pope Use custom format for :Gstatus, not literal git status output.
Inline diffing in :Gstatus, with support for staging individual hunks.
List unpushed and unpulled commits in :Gstatus.
Show rebase status in :Gstatus.
Greatly expanded set of mappings in :Gstatus. Try g?, c?, and r?.
:Gstatus p (add --patch) is changed to P.
:Gstatus U (checkout/clean) is changed to X. New U behavior is global reset.
:Gstatus 2X/3X performs checkout --ours/--theirs.
:Gstatus gI ignores file.
Smarter :Gstatus automatic reload.
:Git subcommand calls :Gsubcommand when appropriate.
:Git add --patch and similar commands use :terminal.
:Git diff, :Git log, and :Git --no-pager display results in temp buffer.
:Git and subcommand wrappers use custom quoting rather than shell escaping.
:Git ... ./path is relative to working directory.
Add --option completion to :Git and git wrappers.
Provide :G as wrapper for both :Gstatus and :Git.
Support for :Grebase --interactive.
:Gblame accepts all arguments, including filenames and commits.
Support :Gblame --reverse to navigate forwards through history.
Support :Gblame with range to blame subset of current file.
Allow disabling dynamic blame colors with let g:fugitive_dynamic_colors = 0.
:Glog opens quickfix list instead of displaying raw log output.
Cleaner :Glog quickfix list leveraging Vim's new "module" format.
:Glog no longer defaults to current file.  Use :0Glog for that.
:0Glog follows file across renames.
:Glog name softly deprecated in favor of :Gclog (named after :cfile).
Provide :Grevert.
:Gdiff renamed to :Gdiffsplit.
:Gdiffsplit always opens one window.  Use :Gdiffsplit! for conflicts.
Support git grep --column.
Chdir with git -C rather than :cd for most commands. (Git 1.8.5 required).
Show all stderr hook output on :Gcommit.
Provide core.askPass default for Gpush and friends.
Require bang to :Gwrite from index.
Bug fixes.
fugitive.zip 2.5 2018-11-23 7.0 Tim Pope Support :source and :write on Fugitive URLs.
Support :Gedit +cmd ++opt.
Support :Gedit /absolute/path and ./relative/path.
Support expansion flags, like :Gedit %:h.
Support completion of commits for --fixup=/--squash=.
Support :Gread commit to read commit message.
Adjust :Gbrowse line range for upstream head.
Map <CR> in blobs to jump to blamed commit.
Map p to jump to file in preview window.
Make :Gmove always relative to repository root.
Load Projectionist config from .git/info/projections.json.
Drop instaweb support.
New public function API.
Major robustness and error handling improvements.
Bug fixes.
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.