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.

Uma Lição de VIM #15.2: Plugins – Vim-Airline

(Essa é a parte em que o “laststatus” fica interessante.)

Quando estávamos falando de configurações, falamos de uma configuração chamada “laststatus”. Esta configuração tem 3 valores possíveis:

  • 0 – não apresenta a barra de status, nunca.
  • 1 – apresenta a barra de status se houver pelo menos um split.
  • 2 – sempre apresenta a barra de status.

E, conforme eu mostrei no meu arquivo de configuração, eu sempre deixo com “2”.

Acontece que a barra de status não é tããão informativa assim.

laststatus

Ela tem o básico, mas o básico não é o suficiente, sejamos honestos. É possível adicionar mais informações setando “statusline” (que eu não vou entrar em detalhes aqui, mas para configurar, você tem que usar letras únicas indicado para cada coisa que deseja apresentar tal como se faz com “guioptions”) mas, mesmo assim, certas coisas tem que vir de scripts externos (por exemplo, para mostrar o branch atual que você está) e, como eu falei, essa parte é meio chata.

Para aliviar essa confusão, existe um plugin chamado “Vim-Airline“, que tem uma apresentação mais complexa e oferece mais informações, baseados plugins que você tem instalado.

Ainda, o Airline é uma versão mais leve do Powerline, que na verdade passou de ser um simples plugin para VIM para ser um plugin para praticamente tudo (hoje eu uso o Powerline para configurar meu prompt do terminal, por exemplo) e algumas coisas ainda são usadas do Powerline (por exemplo, as fontes, mas esperem aí que eu já explico o porque o Airline usa fontes especiais.)

(Conforme formos passando a lista de plugins que eu tenho, vocês vão ver o Airline mudando de formato com o tempo.)

Como falei do Vundle como gerenciador de plugins, vamos usar o mesmo para instalar (e manter, no futuro) o Airline.

No seu vimrc, adicione o seguinte:

Bundle "bling/vim-airline"

E, revisando: :Bundle adiciona um plugin na lista de plugins gerenciados pelo Vundle (e apenas isso, nada mais); por ter uma barra no meio, estamos falando de um repositório do Github; para instalar o plugin, você precisa ou adicionar o plugin na lista manualmente (com o comando :Bundle) ou reiniciar o VIM caso você queria conferir se a configuração no seu vimrc está certa e fazer :BundleInstall.

Se nada apareceu, é porque o seu “laststatus” não está em “2”.

Se tudo deu certo, você verá o seguinte:

airline-nofonts

Não que tenha melhorado muito, mas agora você tem informações sobre qual o modo que você está atualmente (que vai mudar de cor conforme você passa para o modo de inserção ou visual), o nome do arquivo, o tipo de arquivo (que define qual a sintaxe está sendo usada), posição do cursor em relação ao todo do arquivo (em percentual) e a posição absoluta do mesmo (em linhas em colunas).

Ok, duas coisas: Ainda não é muito melhor (embora a parte de mostrar o modo ajude, acredite), mas temos alguns caracteres estranhos na barra.

É aí que entra a história do Powerline de novo: Os criadores do Powerline usaram “posições” não usadas nas fontes unicode para adicionar outros caracteres que são usados para melhorar a apresentação do status. Eles mantém um repositório com fontes já com os caracteres especiais e, caso a fonte que você queria não esteja na lista deles, eles tem um script para “patchear” a fonte desejada.

Uma vez que você tenha a fonte disponível no seu sistema, você deve adicionar no seu vimrc

let g:airline_powerline_fonts = 1

E o seu Airline, na próxima execução, deve ficar

airline-laststatus

Que é mais bonito, mas ainda continua mostrando as mesmas informações. Mais pra frente veremos ã integração com “Fugitive” (um plugin para VIM para Git) e o Syntastic (para validar o código com ferramentas externas) e como ambos são suportados pelo Airline, você terá todas as informações ao alcance do rodapé da janela.

airline-everything

Uma última nota: O Airline vem com suporte a temas, que você pode trocar usando :AirlineTheme (e um duplo [Tab] depois disso irá mostrar os temas instalados). Depois que escolher um, você pode definir

let g:airline_theme = ‘{nome do tema}’

no seu vimrc.