Uma Lição de VIM #15.3: Plugins – Fugitive

(Essa é a parte que só faz sentido se você usa Git.)

O terceiro plugin que eu vou comentar é Fugitive, que adiciona comandos para gerenciar seu repositório Git dentro do VIM.

Para instalar, ou você baixa a versão do Github (no link acima) ou usa o Vundle:

Bundle ‘tpope/vim-fugitive’

(E, de novo: depois de adicionar essa linha no seu vimrc, você deve sair do VIM — ou, se não quiser fazer tudo isso, basta usar o comando acima em modo de comando — e usar :BundleInstall para instalar o plugin.)

A princípio, nada de diferente deve aparecer. Mas você agora pode usar qualquer comando do Git com :Git {comando}, como faria no shell.

Mas só adicionar um comando não é o que o Fugitive faz. Ele também adiciona outros comandos:

  • :Gwrite (ou :Gw): salva o arquivo atual e já adiciona no index para o próximo commit.
  • :Gblame: Faz um split da tela, mostrando do lado direito o fonte que já estava aberto e do lado esquerdo, o último commit (SHA1) e o autor do commit.
  • :Gread: Descarta as alterações locais e recupera o arquivo atual na sua última revisão dentro do repositório do Git (ou seja, revert).
  • :Gdiff: Mostra um diff da versão atual com a versão no repositório, com splits.
  • :Gcommit: Faz o commit dos arquivos que estão no index.
  • :Gstatus: Faz um “git status”, mas deixa que você altere os arquivos no index (usando “-” para adicionar ou remover o arquivo — leia o texto com atenção) e faça commit dos selecionados (usando “cc“) [Note que ambos os comandos devem ser usados em modo normal dentro do split aberto por :Gstatus.]

Existem outros, mas você vai usar principalmente estes. E cuide para que você esteja dentro de um repositório Git antes de tentar usar os comandos; se o VIM não estiver num diretório com um repositório válido, nenhum dos comandos do Fugitive ficarão disponíveis[1].

E, como última dica: Se você estiver usando o Airline (comentado no capítulo anterior), adicione

let g:airline_enable_branch = 1

… no seu vimrc e o branch atual será apresentando dentro do status do Airline, logo após o indicador de modo.

[1] Eu só preciso adimitir que não testei para ver o que acontece se você abrir o VIM fora de um repositório e depois usar :cd para mudar para um diretório que tem um repositório ou tentar abrir um arquivo que está dentro de um repositório para verificar se os comandos se tornam disponíveis.

My list of VIM Bundles

Not that anybody asked me, but I recently ditched Sublime Text 2 for VIM… again.

But here is the thing: I just ditched it ’cause I’m using a lot of bundles to change VIM default behaviour, adding more feature and that fuss. The ones I’m using:

Vundle is the plugin I’m currenctly using to manage all the other plugins. Vundle is a really simple way to keep your other plugins up-to-date. All the other plugins listed here were installed using Vundle.


Powerline changes the default “last status” line to provide a lot more information. The cool thing about Powerline is that it comes not only with a VIM plugin, but also with a Bash prompt and an iPython prompt, so everything have (almost) the same look.


I got Vim-Fugitive to display the current branch in the old Powerline plugin (the current one does that already). One of the things I still try to use is :Gstatus, which display the current changes in the index. The problem here is that the display, although pretty familiar, it’s a mess when you’re dealing with a single file (it shows “Changes not staged for commit” and then, when you add it to the index, it just change that to “Changes staged for commit”, which is pretty easy to miss in the list of things that are shown).


Vim-Commentary lets you comment a block of text pretty quickly, which is useful. The only issue with it is that it follows the current file type (as VIM does not have a “block type” or “region type” support), so trying to comment a few lines of JavaScript in an HTML file will produce HTML comments, not JavaScript/C++ comments. Still pretty useful to quickly comment that one line in your Python code.
Tabular is a hard plugin to master, but really useful. With it, you can realign your code on custom characters (for example, align your variable definition on the “=” character). Or make all your HTML/XML properties align on “=”. And so on.
Auto Pairs
Auto-pairs does exactly what it says: It complete pairs of characters, adding a second " after your first ", the closing bracket and so on.
On our Python project, we have a strictly “follow PEP8” policy. With Vim-Flake8, PEP8 errors are displayed in the error window for easy access (and fix).


SnipMate is a TextMate-like snippet plugin, but really easy to use. Type the snippet name, press [Tab] and it will complete the snippet, positioning the cursor on the marker areas.


Again, a plugin inspired on TextMate/Sublime Text: Fuzzy file search. It allows faster file switching by doing fuzzy search on filenames and directories, to the point that I barely use the open command/dialog these days. Also, you can chose to open the file in the current buffer, new split window or new tab.


Vim Multiple Cursors
Again, a feature based on TextMate/Sublime Text: Selection of multiple elements and change in those selected. It is a more visual way of doing :s/<original>/<replacement>.


After seeing this, you’re probably asking yourself: But with all those features based on Sublime Text, why not use Sublime Text directly? Well, for one, I’m a fan of the VIM movement/selection way of doing things; second, I use “jump to mark” pretty often (including “jump to last changed area in this file” and “jump to the previous jump place”) and Sublime does not have that; third, I prefer the way VIM colorizes the code, even if I try to use the same colorscheme in both editors (the difference here is the syntax file, so…); fourth, even if Sublime have a Vintage mode, most of the things I use (like smart jumps) do not exists.

Also, some bugs in plugins/Sublime let me down from time to time: Ctrl+R, sometimes, start in visual mode when Vintage is on (in other words, as soon as you find the definition you’re looking for, you start selecting text); Flake8 for Sublime manages, from time to time, to move the cursor to focus nothing, so you’re forced to move your hand to the mouse and click on the text again to be able to do anything.