4 I'm not going to lie to you; fugitive.vim may very well be the best
5 Git wrapper of all time. Check out these features:
7 View any blob, tree, commit, or tag in the repository with `:Gedit` (and
8 `:Gsplit`, `:Gvsplit`, `:Gtabedit`, ...). Edit a file in the index and
9 write to it to stage the changes. Use `:Gdiff` to bring up the staged
10 version of the file side by side with the working tree version and use
11 Vim's diff handling capabilities to stage a subset of the file's
14 Bring up the output of `git status` with `:Gstatus`. Press `-` to
15 `add`/`reset` a file's changes, or `p` to `add`/`reset` `--patch` that
16 mofo. And guess what `:Gcommit` does!
18 `:Gblame` brings up an interactive vertical split with `git blame`
19 output. Press enter on a line to reblame the file as it stood in that
20 commit, or `o` to open that commit in a split. When you're done, use
21 `:Gedit` in the historic buffer to go back to the work tree version.
23 `:Gmove` does a `git mv` on a file and simultaneously renames the
24 buffer. `:Gremove` does a `git rm` on a file and simultaneously deletes
27 Use `:Ggrep` to search the work tree (or any arbitrary commit) with
28 `git grep`, skipping over that which is not tracked in the repository.
29 `:Glog` loads all previous revisions of a file into the quickfix list so
30 you can iterate over them and watch the file evolve!
32 `:Gread` is a variant of `git checkout -- filename` that operates on the
33 buffer rather than the filename. This means you can use `u` to undo it
34 and you never get any warnings about the file changing outside Vim.
35 `:Gwrite` writes to both the work tree and index versions of a file,
36 making it like `git add` when called from a work tree file and like
37 `git checkout` when called from the index or a blob in history.
39 Use `:Gbrowse` to open the current file on GitHub, with optional line
40 range (try it in visual mode!). If your current repository isn't on
41 GitHub, `git instaweb` will be spun up instead.
43 Add `%{fugitive#statusline()}` to `'statusline'` to get an indicator
44 with the current branch in (surprise!) your statusline.
46 Last but not least, there's `:Git` for running any arbitrary command,
47 and `Git!` to open the output of a command in a temp file.
52 * [A complement to command line git](http://vimcasts.org/e/31)
53 * [Working with the git index](http://vimcasts.org/e/32)
54 * [Resolving merge conflicts with vimdiff](http://vimcasts.org/e/33)
55 * [Browsing the git object database](http://vimcasts.org/e/34)
56 * [Exploring the history of a git repository](http://vimcasts.org/e/35)
61 If you don't have a preferred installation method, I recommend
62 installing [pathogen.vim](https://github.com/tpope/vim-pathogen), and
63 then simply copy and paste:
66 git clone git://github.com/tpope/vim-fugitive.git
68 Once help tags have been generated, you can view the manual with
71 If your Vim version is below 7.2, I recommend also installing
72 [vim-git](https://github.com/tpope/vim-git) for syntax highlighting and
78 > I installed the plugin and started Vim. Why don't any of the commands
81 Fugitive cares about the current file, not the current working
82 directory. Edit a file from the repository.
84 > I opened a new tab. Why don't any of the commands exist?
86 Fugitive cares about the current file, not the current working
87 directory. Edit a file from the repository.
89 > Why is `:Gbrowse` not using the right browser?
91 `:Gbrowse` delegates to `git web--browse`, which is less than perfect
92 when it comes to finding the right browser. You can tell it the correct
93 browser to use with `git config --global web.browser ...`. On OS X, for
94 example, you might want to set this to `open`. See `git web--browse --help`
97 > Here's a patch that automatically opens the quickfix window after
100 This is a great example of why I recommend asking before patching.
101 There are valid arguments to be made both for and against automatically
102 opening the quickfix window. Whenever I have to make an arbitrary
103 decision like this, I ask what Vim would do. And Vim does not open a
104 quickfix window after `:grep`.
106 Luckily, it's easy to implement the desired behavior without changing
107 fugitive.vim. The following autocommand will cause the quickfix window
108 to open after any grep invocation:
110 autocmd QuickFixCmdPost *grep* cwindow
115 Before reporting a bug, you should try stripping down your Vim
116 configuration and removing other plugins. The sad nature of VimScript
117 is that it is fraught with incompatibilities waiting to happen. I'm
118 happy to work around them where I can, but it's up to you to isolate
121 If your [commit message sucks](http://stopwritingramblingcommitmessages.com/),
122 I'm not going to accept your pull request. I've explained very politely
124 [my general guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
125 are absolute rules on my own repositories, so I may lack the energy to
126 explain it to you yet another time. And please, if I ask you to change
127 something, `git commit --amend`.
129 Beyond that, don't be shy about asking before patching. What takes you
130 hours might take me minutes simply because I have both domain knowledge
131 and a perverse knowledge of VimScript so vast that many would consider
132 it a symptom of mental illness. On the flip side, some ideas I'll
133 reject no matter how good the implementation is. "Send a patch" is an
134 edge case answer in my book.
139 Like fugitive.vim? Follow the repository on
140 [GitHub](https://github.com/tpope/vim-fugitive) and vote for it on
141 [vim.org](http://www.vim.org/scripts/script.php?script_id=2975). And if
142 you're feeling especially charitable, follow [tpope](http://tpo.pe/) on
143 [Twitter](http://twitter.com/tpope) and
144 [GitHub](https://github.com/tpope).
149 Copyright (c) Tim Pope. Distributed under the same terms as Vim itself.