• Stars
    star
    19,128
  • Rank 1,273 (Top 0.03 %)
  • Language
    Vim Script
  • Created over 14 years ago
  • Updated 28 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

fugitive.vim

Fugitive is the premier Vim plugin for Git. Or maybe it's the premier Git plugin for Vim? Either way, it's "so awesome, it should be illegal". That's why it's called Fugitive.

The crown jewel of Fugitive is :Git (or just :G), which calls any arbitrary Git command. If you know how to use Git at the command line, you know how to use :Git. It's vaguely akin to :!git but with numerous improvements:

  • The default behavior is to directly echo the command's output. Quiet commands like :Git add avoid the dreaded "Press ENTER or type command to continue" prompt.
  • :Git commit, :Git rebase -i, and other commands that invoke an editor do their editing in the current Vim instance.
  • :Git diff, :Git log, and other verbose, paginated commands have their output loaded into a temporary buffer. Force this behavior for any command with :Git --paginate or :Git -p.
  • :Git blame uses a temporary buffer with maps for additional triage. Press enter on a line to view the commit where the line changed, or g? to see other available maps. Omit the filename argument and the currently edited file will be blamed in a vertical, scroll-bound split.
  • :Git mergetool and :Git difftool load their changesets into the quickfix list.
  • Called with no arguments, :Git opens a summary window with dirty files and unpushed and unpulled commits. Press g? to bring up a list of maps for numerous operations including diffing, staging, committing, rebasing, and stashing. (This is the successor to the old :Gstatus.)
  • This command (along with all other commands) always uses the current buffer's repository, so you don't need to worry about the current working directory.

Additional commands are provided for higher level operations:

  • View any blob, tree, commit, or tag in the repository with :Gedit (and :Gsplit, etc.). For example, :Gedit HEAD~3:% loads the current file as it existed 3 commits ago.
  • :Gdiffsplit (or :Gvdiffsplit) brings up the staged version of the file side by side with the working tree version. Use Vim's diff handling capabilities to apply changes to the staged version, and write that buffer to stage the changes. You can also give an arbitrary :Gedit argument to diff against older versions of the file.
  • :Gread is a variant of git checkout -- filename that operates on the buffer rather than the file itself. 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.
  • :Ggrep is :grep for git grep. :Glgrep is :lgrep for the same.
  • :GMove does a git mv on the current file and changes the buffer name to match. :GRename does the same with a destination filename relative to the current file's directory.
  • :GDelete does a git rm on the current file and simultaneously deletes the buffer. :GRemove does the same but leaves the (now empty) buffer open.
  • :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, Gitee, Pagure, Phabricator, Azure DevOps, and sourcehut.

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

For more information, see :help fugitive.

Screencasts

Installation

Install using your favorite package manager, or use Vim's built-in package support:

mkdir -p ~/.vim/pack/tpope/start
cd ~/.vim/pack/tpope/start
git clone https://tpope.io/vim/fugitive.git
vim -u NONE -c "helptags fugitive/doc" -c q

FAQ

What happened to the dispatch.vim backed asynchronous :Gpush and :Gfetch?

This behavior was divisive, confusing, and complicated inputting passwords, so it was removed. Use :Git! push to use Fugitive's own asynchronous execution, or retroactively make :Git push asynchronous by pressing CTRL-D.

Why am I getting core.worktree is required when using an external Git dir?

Git generally sets core.worktree for you automatically when necessary, but if you're doing something weird, or using a third-party tool that does something weird, you may need to set it manually:

git config core.worktree "$PWD"

This may be necessary even when simple git commands seem to work fine without it.

So I have a symlink and...

Stop. Just stop. If Git won't deal with your symlink, then Fugitive won't either. Consider using a plugin that resolves symlinks, or even better, using fewer symlinks.

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.

More Repositories

1

vim-surround

surround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease
Vim Script
12,968
star
2

vim-pathogen

pathogen.vim: manage your runtimepath
Vim Script
12,086
star
3

vim-commentary

commentary.vim: comment stuff out
Vim Script
5,661
star
4

vim-sensible

sensible.vim: Defaults everyone can agree on
Vim Script
5,038
star
5

vim-rails

rails.vim: Ruby on Rails power tools
Vim Script
4,067
star
6

vim-unimpaired

unimpaired.vim: Pairs of handy bracket mappings
Vim Script
3,213
star
7

vim-dadbod

dadbod.vim: Modern database interface for Vim
Vim Script
3,169
star
8

vim-abolish

abolish.vim: Work with several variants of a word at once
Vim Script
2,662
star
9

vim-dispatch

dispatch.vim: Asynchronous build and test dispatcher
Vim Script
2,589
star
10

vim-repeat

repeat.vim: enable repeating supported plugin maps with "."
Vim Script
2,536
star
11

vim-vinegar

vinegar.vim: Combine with netrw to create a delicious salad dressing
Vim Script
2,184
star
12

vim-eunuch

eunuch.vim: Helpers for UNIX
Vim Script
1,773
star
13

vim-sleuth

sleuth.vim: Heuristically set buffer options
Vim Script
1,771
star
14

vim-fireplace

fireplace.vim: Clojure REPL support
Vim Script
1,739
star
15

vim-obsession

obsession.vim: continuously updated session files
Vim Script
1,684
star
16

vim-markdown

Vim Markdown runtime files
Vim Script
1,215
star
17

vim-endwise

endwise.vim: Wisely add
Vim Script
1,090
star
18

vim-projectionist

projectionist.vim: Granular project configuration
Vim Script
1,030
star
19

vim-rhubarb

rhubarb.vim: GitHub extension for fugitive.vim
Vim Script
916
star
20

vim-speeddating

speeddating.vim: use CTRL-A/CTRL-X to increment dates, times, and more
Vim Script
911
star
21

timl

Clojure like language which compiles down to VimL
Vim Script
683
star
22

vim-scriptease

scriptease.vim: A Vim plugin for Vim plugins
Vim Script
668
star
23

dotfiles

tpope's dotfiles. DON'T USE unless you're tpope
Vim Script
608
star
24

vim-haml

Vim runtime files for Haml, Sass, and SCSS
Vim Script
596
star
25

vim-git

Vim Git runtime files
Vim Script
588
star
26

vim-rsi

rsi.vim: Readline style insertion
Vim Script
560
star
27

heroku-fucking-console

When I run heroku console, I want a fucking console, dammit
Ruby
559
star
28

hookup

Automate the bundle/migration tedium of Rails with Git hooks
Ruby
478
star
29

vim-sexp-mappings-for-regular-people

vim-sexp mappings for regular people
Vim Script
426
star
30

gem-ctags

Automatic ctags generation on gem install
Ruby
395
star
31

vim-bundler

bundler.vim: Lightweight support for Ruby's Bundler
Vim Script
394
star
32

vim-tbone

tbone.vim: tmux basics
Vim Script
389
star
33

gem-shut-the-fuck-up

Gem SHUT THE FUCK UP
Ruby
377
star
34

vim-ragtag

ragtag.vim: ghetto HTML/XML mappings (formerly allml.vim)
Vim Script
354
star
35

vim-jdaddy

jdaddy.vim: JSON manipulation and pretty printing
Vim Script
352
star
36

vim-cucumber

Vim Cucumber runtime files
Vim Script
321
star
37

vim-vividchalk

vividchalk.vim: a colorscheme strangely reminiscent of Vibrant Ink for a certain OS X editor
Vim Script
313
star
38

pickler

PIvotal traCKer Liaison to cucumbER
Ruby
300
star
39

vim-characterize

characterize.vim: Unicode character metadata
Vim Script
281
star
40

git-bump

Create Git release commits and tags with changelogs
Ruby
256
star
41

fivemat

MiniTest/RSpec/Cucumber formatter that gives each test file its own line of dots
Ruby
244
star
42

vim-rake

rake.vim: it's like rails.vim without the rails
Vim Script
239
star
43

vim-flagship

flagship.vim: Configurable and extensible tab line and status line
Vim Script
226
star
44

gem-browse

gem edit, gem open, gem clone, gem browse
Ruby
221
star
45

vim-salve

salve.vim: static support for Leiningen and Boot
Vim Script
197
star
46

vim-dotenv

dotenv.vim: Basic support for .env and Procfile
Vim Script
185
star
47

vim-apathy

apathy.vim: Set the 'path' option for miscellaneous file types
Vim Script
180
star
48

vim-afterimage

afterimage.vim: edit binary files by converting them to text equivalents
Vim Script
161
star
49

vim-capslock

capslock.vim: Software caps lock
Vim Script
151
star
50

rbenv-ctags

Automatically generate ctags for rbenv Ruby stdlibs
Shell
147
star
51

rbenv-aliases

Create aliases for rbenv Ruby versions
Shell
128
star
52

vim-liquid

Vim Liquid runtime files with Jekyll enhancements
Vim Script
126
star
53

vim-rvm

rvm.vim: Switch Ruby versions from inside Vim
Vim Script
119
star
54

rbenv-communal-gems

Share gems across multiple rbenv Ruby installs
Shell
119
star
55

vim-classpath

classpath.vim: Set 'path' from the Java class path
Vim Script
111
star
56

rumember

Remember The Milk Ruby API and command line interface
Ruby
106
star
57

vim-heroku

heroku.vim: Heroku CLI wrapper
Vim Script
104
star
58

heroku-binstubs

Create binstubs to easily dispatch the heroku command for specific apps
Ruby
94
star
59

vim-haystack

haystack.vim: fuzzy matching algorithm
Vim Script
74
star
60

vim-rbenv

rbenv.vim: Minimal rbenv support
Vim Script
69
star
61

rbenv-readline

Automatically link rbenv Ruby installs to readline on OS X
Shell
64
star
62

heroku-wildcards

Run a Heroku command across multiple apps
Ruby
52
star
63

rails-default-database

Make database.yml optional in Rails
Ruby
48
star
64

heroku-pgbackups-pull

Import a Heroku PostgreSQL backup into your Rails development database
Ruby
47
star
65

pry-editline

C-x C-e to invoke an editor on the current pry (or irb) line
Ruby
47
star
66

heroku-surrogate

Run commands locally using a Heroku app's environment variables
Ruby
41
star
67

lein-dotenv

Leiningen plugin to merge .env into environment variables
Clojure
35
star
68

heroku-remote

Commands for working with (multiple) Heroku remotes
Ruby
28
star
69

vim-flatfoot

flatfoot.vim: experimental enhancement of "f" and "t" keys
Vim Script
26
star
70

ldaptic

Object-oriented schema-aware LDAP wrapper for Ruby
Ruby
24
star
71

chrome-defenestration

JavaScript
19
star
72

mta-settings

Configure ActionMailer or Mail delivery settings based on the environment
Ruby
12
star
73

zerbo

Zeo Personal Sleep Coach Ruby Interface
Ruby
12
star
74

girth

Git Interactive Ruby Toolset . . . Hippopotamus?
Ruby
10
star
75

.github

this doesn't work does it?
10
star
76

artifice-passthru

Artifice extension that allows you to let certain requests pass thru to use HTTP
Ruby
8
star
77

rbenv-sentience

Make rbenv self aware
Shell
8
star
78

rack-taint

Rack middleware to taint incoming data
Ruby
7
star
79

tpope.github.com

5
star