Browse Source

More chapters

master
Julio Biason 6 years ago
parent
commit
10fd42df8f
  1. 2
      content/books/uma-licao-de-vim/04-registradores/index.md
  2. 2
      content/books/uma-licao-de-vim/11.01-vimrc/index.md
  3. 108
      content/books/uma-licao-de-vim/11.02-gvimrc/index.md
  4. 70
      content/books/uma-licao-de-vim/12-modelines/index.md
  5. 60
      content/books/uma-licao-de-vim/13-tags/index.md
  6. 112
      content/books/uma-licao-de-vim/14.01-vundle/index.md
  7. BIN
      content/books/uma-licao-de-vim/14.02-airline/airline-everything.png
  8. BIN
      content/books/uma-licao-de-vim/14.02-airline/airline-laststatus.png
  9. BIN
      content/books/uma-licao-de-vim/14.02-airline/airline-nofonts.png
  10. 110
      content/books/uma-licao-de-vim/14.02-airline/index.md
  11. BIN
      content/books/uma-licao-de-vim/14.02-airline/laststatus.png
  12. 66
      content/books/uma-licao-de-vim/14.03-fugitive/index.md
  13. 12
      content/books/uma-licao-de-vim/_index.md

2
content/books/uma-licao-de-vim/04-registradores/index.md

@ -1,5 +1,5 @@
+++ +++
title = "Recortar, Copiar e Colar" title = "Registradores"
date = 2015-12-22 date = 2015-12-22
+++ +++

2
content/books/uma-licao-de-vim/11.01-vimrc/index.md

@ -465,4 +465,4 @@ computador do trabalho).
[^9] E porque eu usei `:tabn {número}` ao invés de `{número}gt`? Porque quando eu [^9] E porque eu usei `:tabn {número}` ao invés de `{número}gt`? Porque quando eu
pesquisei como pular de abas, este foi o primeiro resultado que eu encontrei. pesquisei como pular de abas, este foi o primeiro resultado que eu encontrei.
{{ chapters(prev_chapter_link="./11-config", prev_chapter_title="Arquivos de Configuração", next_chapter_link="./11-config", next_chapter_title="Arquivos de Configuração") }} {{ chapters(prev_chapter_link="./11-config", prev_chapter_title="Arquivos de Configuração", next_chapter_link="./11-02-gvimrc", next_chapter_title="Meu .gvimrc") }}

108
content/books/uma-licao-de-vim/11.02-gvimrc/index.md

@ -0,0 +1,108 @@
+++
title = "Meu .gvimrc"
date = 2015-12-22
+++
Essa é a parte em que veremos mais do mesmo.
<!-- more -->
Na parte de configurações, eu falei de dois arquivos, "vimrc" e "gvimrc". Vocês já
viram o que eu fiz com meu vimrc, então acho justo que vejam também o que eu
fiz com o meu gvimrc.
Para que fique claro, vimrc sempre é lido, não importa qual executável do VIM
você está usando. gvimrc é lido depois do vimrc somente quando você iniciar um
VIM gráfico.
Como o arquivo é bem menor (já que o grosso da configuração fica no vimrc),
este é o arquivo inteiro que eu estou usando:
```viml
set guioptions=aegit " basically, all options, except the scrollbar, menu and toolbar
set columns=116 " number of columns (uses most of my screen, in this case)
set cursorline " highlight the line with the cursor
set colorcolumn=+2 " put a marker at textwidth + 2
set linespace=1 " spread the lines a bit, adding a 1px line above all
if has('mac')
set gfn=monofur:h15 " My screen size sucks, mkay?
set lines=63 " number of lines, based on my screen size and font
else
set gfn=monofur\ for\ Powerline\ 12
set lines=54
endif
```
E explicando:
* `set guioptions=aegit`: Define a aparência do editor em modo gráfico. Eu
prefiro um editor limpo, sem menus, toolbars ou (e isso talvez soe estranho
para alguns), sem barra de rolagem. Em ordem, as opções ativas são:
`a`: Quando estiver fazendo a seleção com o modo visual, já copia o selecionado
para a área de transferência. No caso de sistemas Unix, isso significa que
selecionar algo com o modo visual é o mesmo que selecionar com o botão da
esquerda (e que pode ser colado diretamente usando o botão do meio).
`e`: Mostra abas (se estiver configurado para mostrar abas com “showtabline” --
que eu configurei para mostrar sempre no meu vimrc).
`g`: Mostra opções do menu desabilitadas. O normal é que opções desabilitadas
sequer apareçam. Esta opção só faz sentido se o menu estiver presente (com a
opção m no "guioptions") que, como você pode perceber, eu não estou usando.
Em alguns sistemas (por exemplo, OS X) o controle do menu não faz sentido
porque o sistema operacional sempre tem um menu ativo. Assim, quando não há
necessidade de menu, esta opção é desnecessária; quando não há escapatória do
menu, pelo menos todas as opções serão visíveis.
`i`: VIM tem um ícone (sim você pode configurar para o que o VIM não mostre um
ícone em lugar algum). De novo, dependendo do sistema operacional, esta opção
não tem efeito algum porque o próprio sistema adiciona o ícone do launcher.
`t`: Menus podem ser arrancados (quando possível). Esta é uma funcionalidade
que o GTK+ até a versão 2 tinha, que permitia que os menus fosse
"desconectados" da área de menu, o que facilita bastante na hora de
selecionar colorschemes (e como você pode adicionar um menu a qualquer hora
com `:set guioptions+=m`, o que eu normalmente faço -- ou melhor, fazia -- era
adicionar um grupo de novos colorschemes, ativar o menu, "arrancar" o menu de
colorschemes e sair selecionando opções até achar um colorscheme
interessante).
* `set columns=116`: Número de colunas da janela do editor. Se a sua tela não
tiver como apresentar 116 colunas (pelo tamanho da fonte e da tela, ou por
alguma restrição do gerenciador de janelas), o VIM irá reduzir a quantidade
de colunas até que a janela caiba completamente.
* `set cursorline`: A linha onde o cursor se encontra tem highlight. E, caso
você esteja se perguntando, existe um `set cursorcolumn` que mostra a coluna do
cursor. Tanto "cursorline" quanto "cursorcolumn" funcionam em console, mas a
forma como a linha é apresentada no meu colorscheme é... estranha.[^1]
* `set colorcolumn=+2`: Define uma coluna para ser marcada com uma cor
diferente. Se for usado uma opção relacional (não um valor absoluto, mas algo
começando com "+" ou "-"), então cursorline vai usar o "textwidth" atual.
* `set linespace=1`: Define um espaçamento entre linhas, em pixeis. No caso,
"1" significa que as linhas terão a altura requisitada pela fonte mais um
pixel.
* `set lines=???:` Define a quantidade de linhas do editor. Segue todas as
considerações feitas em “columns”. Ainda, aqui eu estou usando de novo a
checagem de funcionalidade (`has()`) para ter configurações diferenciadas no OS
X e em outros sistemas operacionais.
* `set gfn=???`: Define a fonte a ser usada ("gfn" é a forma curta de "guifont").
Note que fontes que tem espaço no meio tem que ter os espaços "escapados"
(com `\` antes do espaço) ou como strings. Se você quiser selecionar alguma
fonte mas não faz idéia do nome da fonte, use `:set gfn=*` para que o VIM
mostre o seletor de fontes do sistema; depois que escolher uma fonte, se
quiser que o VIM descreva como usar, use `:set gfn` e cole o resultado no seu
arquivo de configuração.
[^1] E, lembrando mais uma vez: Para desligar opções deste tipo, coloque "no" na
frente. Para desligar o highlight da linha atual do cursor, use `:set
nocursorline`; para desligar o highlight da coluna atual do cursor, use
`:set nocursorcolumn`.
{{ chapters(prev_chapter_link="./11-01-vimrc", prev_chapter_title="Meu .vimrc", next_chapter_link="./12-modelines", next_chapter_title="Modelines") }}

70
content/books/uma-licao-de-vim/12-modelines/index.md

@ -0,0 +1,70 @@
+++
title = "Modelines"
date = 2015-12-22
+++
Essa é a parte em que você ignora seus arquivos de configuração.
<!-- more -->
Bom, agora você sabe como configurar seu VIM, mudar configurações baseadas no
tipo de arquivo... Mas o que fazer se um arquivo tem uma configuração
completamente diferente do resto?
A solução são modelines. Modelines são linhas que você pode adicionar no seu
arquivo e o VIM, quando carregar o arquivo, irá mudar suas configurações
baseadas nesta linha.
A sintaxe da linha é, simplesmente: `vim: set {configurações}:`.
"Mas é um código fonte e se eu colocar um 'vim' no meio, o compilador vai
reclamar!", você deve estar pensando agora. Acontece que o VIM procura uma linha
válida em qualquer lugar, desconsiderando a sintaxe atual. Se você colocar o
modeline dentro de um comentário, o VIM ainda vai encontrar e ainda vai
processar o modeline e ainda vai trocar as configurações do editor (apenas para
aquele arquivo).
Por exemplo, para garantir que meus templates Jinja fiquem com a sintaxe
correta (usando a sintaxe de templates do Django), eu tenho colocado, como
última linha do arquivo
```django
{# vim: set ft=htmldjango: #}
```
"ft", no caso, é o nome curto para "filetype", que define o tipo de arquivo que
está sendo usando e qual sintaxe será utilizada. E o par `{#` e `#}` são
comentários do template e completamente ignorados no resultado final.
Assim como vimos antes, várias configurações podem ser usadas no mesmo set.
Usando o exemplo acima, se eu quisesse que meus templates usassem tabulações ao
invés de espaços para identação mas fossem apenas 2 espaços por tabulação, eu
poderia colocar, no final do arquivo:
```django
{# vim: set ft=htmldjango noet ts=2 sts=2 sw=2: #}
```
O VIM ainda aceita que as opções sejam separadas em vários comandos, com a
adição de ":":
```django
{# vim: set ft=htmldjango:set noet:set ts=2:set sts=2:set sw=2: #}
```
Mas realmente não faz sentido, faz?
E apenas um aviso: Algumas distribuções Linux desligam modelines no arquivo
global (adicionando `set nomodeline` no arquivo global) e, assim, modelines são
completamente ignorados, sob a desculpa de "segurança". Tentando descobrir o
porque descobri o seguinte: O único comando que pode ser usado em modelines é
"set", ou seja, não é possível colocar um modeline que abra outro arquivo, ou
mude o diretório atual ou qualquer outra coisa; nem todas as configurações pode
ser alteradas (infelizmente, o help do VIM não lista quais são e quais não são
permitidas); e, aparentemente, a pior forma de "ataque" seria alguém colocar um
"textwidth" e seu código ficar torto na primeira edição. Se você achar que
modelines não estão sendo executados, você pode adicionar no seu vimrc `set
modelines` para que modelines sejam processados (ou troque por uma distribuição
que não tenha configurações que não fazem sentido).
{{ chapters(prev_chapter_link="./11-02-gvimrc", prev_chapter_title="Meu .gvimrc", next_chapter_link="./13-tags", next_chapter_title="Tags") }}

60
content/books/uma-licao-de-vim/13-tags/index.md

@ -0,0 +1,60 @@
+++
title = "Tags"
date = 2015-12-22
+++
Essa é a parte em que você vai entender Unix um pouco.
<!-- more -->
Eu expliquei antes que haviam dois comandos para utilizar tags, `[Ctrl]]` e
`[Ctrl]t`. Existem duas coisas que eu não expliquei: O que são tags e de onde
elas vem.
Primeiro, tags são qualquer palavra que o editor encontre no arquivo de tags. E
o arquivo de tags pode ser definido em `:set tags`. Por padrão, são verificados
os arquivos `./tags` ("tags" no diretório atual do editor), `./TAGS`, `tags`
(arquivo "tags" em algum diretório de pesquisa) e `TAGS`.
Acontece que não é qualquer arquivo com este nome que o torna válido. Existem
um formato específico em que as coisas devem estar declaradas para serem
detectadas como tags. E o formato é
```
{tagname}{tagfile}{tagaddress}
```
(onde "tagname" é a tag em si, "tagfile" é o nome do arquivo onde a tag se
encontra e "tagaddress" é uma expressão Ex para encontrar a tag -- por exemplo,
"89" para ir para linha 89).
Sim, só isso. E eu sei que manter um arquivo assim é chato horrores, e por isto
existem ferramentas que já fazem isso. A mais completa de todas é "Exuberant
CTags"" e pode ser encontrada em praticamente todas as distribuições Linux
atuais, gerenciadores de pacotes do OS X e ainda vem um pacote para Windows.
A grande vantagem do Exuberant é a quantidade de linguagens suportadas. Assim,
se você estiver num projeto em Python e depois passar para um projeto em C,
você ainda pode usar o mesmo aplicativo.
A sintaxe gerado do Exuberant é "ctags {arquivos}", onde "{arquivos}" são os
arquivos a serem processados (expressões como "\*.py" são válidas) ou, da forma
mais simples "ctags -R", para que todos os arquivos do diretório atual e
subdiretórios sejam processados.
Uma vez que este arquivo tenha sido criado, dentro do editor você pode usar
`[Ctrl]]` para tentar achar a definição da tag (que, com o uso do Exuberant
significa definição de funções ou definições de variáveis) e `[Ctrl]t` para
retornar para a localização anterior. Se houver mais de um arquivo com uma
definição válida, o VIM irá mostrar uma lista das localizações e você poderá
selecionar qual deve ser acessada.
A única dica que sobra aqui é cuidar com arquivos minificados. Isso porque o
Exuberant entende arquivos CSS. Não que arquivos CSS sejam um problema, mas o
Exuberant coloca a expressão regular da linha onde a tag se encontra e, num
arquivo minificado, a expressão acaba sendo uma linha gigantesca, que fica se
repetindo em vários lugares do arquivo, deixando-o gigantesco. Se você tiver
algo desse tipo, use a opção "--exclude={expressão}", onde "{expressão}" é a
expressão regular que define o nome dos arquivos que devem ser ignorados.
{{ chapters(prev_chapter_link="./12-modelines", prev_chapter_title="Modelines", next_chapter_link="./14-01-vundle", next_chapter_title="Plugins - Vundle") }}

112
content/books/uma-licao-de-vim/14.01-vundle/index.md

@ -0,0 +1,112 @@
+++
title = "Plugins - Vundle"
date = 2015-12-22
+++
Essa é a parte em que começamos a mexer ao redor do VIM.
<!-- more -->
Vamos começar a ver como adicionar funcionalidades no VIM com plugins. E, para
isso, vamos ver Vundle, que é um gerenciador de plugins.
A pergunta que você deveria estar se fazendo agora é "E por que usar o
Vundle?". Na verdade, esta pergunta tem duas respostas:
A primeira é: Apesar de ser extremamente fácil de adicionar um plugin no VIM --
normalmente é uma questão de descompactar um arquivo dentro do diretório
`$HOME/.vim` -- a parte chata é manter os scripts atualizados (e ficar preso à um
arquivo compactado) e removê-los depois, se você encher o saco de um.
A segunda é: Vundle não é o único gerenciador de plugins para VIM, mas consegue
instalar plugins por conta própria (Pathogen requer que você baixe os plugins
manualmente, assumindo depois o controle para manter atualizado); a desvantagem
é que Vundle requer que os scripts tenham uma determinada estrutura de arquivos
e diretórios, mas praticamente todos os scripts hoje utilizam esta estrutura.
Então vamos lá, instalar o Vundle:
Primeiro, você deve baixar o plugin em si. Para isso, você tem que ter o Git
instalado e executar:
```
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
```
Simplesmente, você está copiando o repositório do vundle para um diretório do
próprio VIM. Até aqui nenhuma surpresa, exceto que o diretório de plugins é
`$HOME/.vim/plugin` (ou `~/.vim/plugin`) e o clone colocou no diretório
`~/.vim/bundle`. Ou seja, o Vundle não está ativo como um plugin do VIM (ainda).
O Vundle faz isso de propósito, para que os scripts instalados com o Vundle não
se misturem com os plugins instalados manualmente.
A seguir, é preciso ativar o Vundle. Para isso, nós vamos adicionar o diretório
do Vundle no path do VIM e chamar o script de inicialização. Para isto,
adicione as seguintes linhas no seu vimrc:
```vim
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
```
Explicando: "rtp" é a forma curta de "runtimepath", que identifica os
diretórios onde o VIM irá procurar scripts, se preciso. No caso, estamos
adicionando o diretório do Vundle, que clonamos anteriormente. A seguir é
chamado o script de inicialização do Vundle.
Pronto! Agora o Vundle está instalado.
A questão é: E agora que o Vundle está instalado, "faz o que?"
O Vundle tem mais comandos disponíveis, entre eles `:Plugin "{bundle}"`[^1]. Este
comando adiciona um bundle/plugin/script na lista de bundles/plugins/scripts
gerenciados pelo Vundle. A única coisa que esse comando faz é adicionar o
bundle na lista; ele não vai instalar o bundle ainda, ele não vai remover o
bundle, ele não vai atualizar o bundle. Apenas adicionar na lista.
O parâmetro do comando, {bundle} pode ser:
* O nome de um plugin conforme listado no repositórios de scripts do VIM;
apenas uma string (por exemplo, `:Plugin "vundle"` para instalar este script
(que é a descrição do Vundle nos repositórios de script);
* O nome de um plugin no Github, no formato "{usuário}/{repositório}", que você
pode ver na parte superior de qualquer repositório (por exemplo, `:Bundle "
gmarik/vundle"` para instalar o Vundle a partir do repositório -- que tende a
ser atualizado com maior frequência);
* Uma URL, que pode ser clonada com Git (por exemplo, `:Plugin
"https://github.com/gmarik/vundle"` para fazer o mesmo que acima.
Uma vez que você tenha a lista de plugins que você quer no sistema, você pode
instalar todos usando `:PluginInstall`; se quiser remover um plugin, você
simplesmente o deixa fora da lista de plugins desejados e executa `:PluginClean`;
e, para atualizar os plugins que estão instalados, `:PluginUpdate.`
Acho que você já percebeu que o problema de se manter uma lista de plugins
manualmente é meio chato: Toda vez que você quiser verificar se há atualizações
dos plugins, você tem que entrar a lista inteira; se você esquecer de um plugin
e fizer `:PluginClean` irá remover esse plugin. Para evitar essa complicação,
você pode adicionar os comandos Plugin diretamente no seu vimrc[^2]. Assim, cada
vez que você usar qualquer comando do Vundle, você não precisa se preocupar em
lembrar de todos os plugins instalados.
E, como última dica, fica o seguinte: Logo após a linha do "call vundle#rc()",
adicione
```viml
Plugin 'gmarik/vundle'
```
.. que nada mais é que o repositório que fizemos o clone logo no começo; desta
forma, quando você fizer um `:PluginUpdate`, o próprio Vundle poderá ser
atualizado com a última versão disponível.
[^1] Lembram que eu falei que plugins poderiam adicionar novos comandos e que
estes teriam pelo menos a primeira letra em maiúsculas? Pois é...
[^2] Lembre-se também que o vimrc é um arquivo executado em modo Ex e o modo Ex
nada mais é que o modo de comando sem precisar colocar `:` na frente de cada
comando.
{{ chapters(prev_chapter_link="./13-tags", prev_chapter_title="Tags", next_chapter_link="./14-02-airline", next_chapter_title="Plugins - Airline") }}

BIN
content/books/uma-licao-de-vim/14.02-airline/airline-everything.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
content/books/uma-licao-de-vim/14.02-airline/airline-laststatus.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
content/books/uma-licao-de-vim/14.02-airline/airline-nofonts.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

110
content/books/uma-licao-de-vim/14.02-airline/index.md

@ -0,0 +1,110 @@
+++
title = "Plugins - Airline"
date = 2015-12-22
+++
Essa é a parte em que o "laststatus" fica interessante.
<!-- more -->
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.png)
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:
```viml
Plugin "bling/vim-airline"
```
E, revisando: `:Plugin` 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 `:Plugin`) ou reiniciar o VIM caso
você queria conferir se a configuração no seu vimrc está certa e fazer
`:PluginInstall.`
Se nada apareceu, é porque o seu "laststatus" não está em "2".
Se tudo deu certo, você verá o seguinte:
![](airline-nofonts.png)
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](https://github.com/powerline/fonts)
e, caso a fonte que você queria não esteja na lista deles, [eles tem um script
para "patchear" a fonte desejada](https://github.com/powerline/powerline/tree/develop/font).
Uma vez que você tenha a fonte disponível no seu sistema, você deve adicionar no seu vimrc
```viml
let g:airline_powerline_fonts = 1
```
E o seu Airline, na próxima execução, deve ficar
![](airline-laststatus.png)
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.png)
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.
{{ chapters(prev_chapter_link="./14-01-vundle", prev_chapter_title="Plugins - Vundle", next_chapter_link="./14-03-fugitive", next_chapter_title="Plugins - Fugitive") }}

BIN
content/books/uma-licao-de-vim/14.02-airline/laststatus.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

66
content/books/uma-licao-de-vim/14.03-fugitive/index.md

@ -0,0 +1,66 @@
+++
title = "Plugins - Fugitive"
date = 2015-12-22
+++
Essa é a parte que só faz sentido se você usa Git.
<!-- more -->
O terceiro plugin que eu vou comentar é
[Fugitive](https://github.com/tpope/vim-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:
```viml
Plugin "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 `:PluginInstall` 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
```viml
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.
{{ chapters(prev_chapter_link="./14-02-airline", prev_chapter_title="Plugins - Airline", next_chapter_link="./11-config", next_chapter_title="Arquivos de Configuração") }}

12
content/books/uma-licao-de-vim/_index.md

@ -22,12 +22,12 @@ template = "section-contentless.html"
* [Abas](10-abas) * [Abas](10-abas)
* [Arquivos de Configuração](11-config) * [Arquivos de Configuração](11-config)
* [Meu .vimrc](11-01-vimrc) * [Meu .vimrc](11-01-vimrc)
* [Meu .gvimrc](122.md) * [Meu .gvimrc](11-02-gvimrc)
* [Modelines](13.md) * [Modelines](12-modelines)
* [Tags](14.md) * [Tags](13-tags)
* [Plugins - Vundle](1501.md) * [Plugins - Vundle](14-01-vundle)
* [Plugins - Airline](1502.md) * [Plugins - Airline](14-02-airline)
* [Plugins - Fugitive](1503.md) * [Plugins - Fugitive](14-03-fugitive)
* [Plugins - Commentary](1504.md) * [Plugins - Commentary](1504.md)
* [Plugins - Tabular](1505.md) * [Plugins - Tabular](1505.md)
* [Plugins - Auto-pairs](1506.md) * [Plugins - Auto-pairs](1506.md)

Loading…
Cancel
Save