From 522713fea35cc9dfd658950d8352d7e59a8e12bf Mon Sep 17 00:00:00 2001 From: Julio Biason Date: Thu, 17 Jan 2019 21:06:57 -0200 Subject: [PATCH] More chapters --- .../04-registradores/index.md | 2 +- .../uma-licao-de-vim/11.01-vimrc/index.md | 2 +- .../uma-licao-de-vim/11.02-gvimrc/index.md | 108 +++++++++++++++++ .../uma-licao-de-vim/12-modelines/index.md | 70 +++++++++++ .../books/uma-licao-de-vim/13-tags/index.md | 60 ++++++++++ .../uma-licao-de-vim/14.01-vundle/index.md | 112 ++++++++++++++++++ .../14.02-airline/airline-everything.png | Bin 0 -> 27336 bytes .../14.02-airline/airline-laststatus.png | Bin 0 -> 7214 bytes .../14.02-airline/airline-nofonts.png | Bin 0 -> 7319 bytes .../uma-licao-de-vim/14.02-airline/index.md | 110 +++++++++++++++++ .../14.02-airline/laststatus.png | Bin 0 -> 5147 bytes .../uma-licao-de-vim/14.03-fugitive/index.md | 66 +++++++++++ content/books/uma-licao-de-vim/_index.md | 12 +- 13 files changed, 534 insertions(+), 8 deletions(-) create mode 100644 content/books/uma-licao-de-vim/11.02-gvimrc/index.md create mode 100644 content/books/uma-licao-de-vim/12-modelines/index.md create mode 100644 content/books/uma-licao-de-vim/13-tags/index.md create mode 100644 content/books/uma-licao-de-vim/14.01-vundle/index.md create mode 100644 content/books/uma-licao-de-vim/14.02-airline/airline-everything.png create mode 100644 content/books/uma-licao-de-vim/14.02-airline/airline-laststatus.png create mode 100644 content/books/uma-licao-de-vim/14.02-airline/airline-nofonts.png create mode 100644 content/books/uma-licao-de-vim/14.02-airline/index.md create mode 100644 content/books/uma-licao-de-vim/14.02-airline/laststatus.png create mode 100644 content/books/uma-licao-de-vim/14.03-fugitive/index.md diff --git a/content/books/uma-licao-de-vim/04-registradores/index.md b/content/books/uma-licao-de-vim/04-registradores/index.md index 100b7bb..15642f9 100644 --- a/content/books/uma-licao-de-vim/04-registradores/index.md +++ b/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 +++ diff --git a/content/books/uma-licao-de-vim/11.01-vimrc/index.md b/content/books/uma-licao-de-vim/11.01-vimrc/index.md index 1c17466..e3227ea 100644 --- a/content/books/uma-licao-de-vim/11.01-vimrc/index.md +++ b/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 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") }} diff --git a/content/books/uma-licao-de-vim/11.02-gvimrc/index.md b/content/books/uma-licao-de-vim/11.02-gvimrc/index.md new file mode 100644 index 0000000..6e24177 --- /dev/null +++ b/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. + + + +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") }} diff --git a/content/books/uma-licao-de-vim/12-modelines/index.md b/content/books/uma-licao-de-vim/12-modelines/index.md new file mode 100644 index 0000000..768c2c3 --- /dev/null +++ b/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. + + + +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") }} diff --git a/content/books/uma-licao-de-vim/13-tags/index.md b/content/books/uma-licao-de-vim/13-tags/index.md new file mode 100644 index 0000000..bb75c05 --- /dev/null +++ b/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. + + + +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") }} diff --git a/content/books/uma-licao-de-vim/14.01-vundle/index.md b/content/books/uma-licao-de-vim/14.01-vundle/index.md new file mode 100644 index 0000000..9d18b7d --- /dev/null +++ b/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. + + + +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") }} diff --git a/content/books/uma-licao-de-vim/14.02-airline/airline-everything.png b/content/books/uma-licao-de-vim/14.02-airline/airline-everything.png new file mode 100644 index 0000000000000000000000000000000000000000..112be77686084a1e6260f9359cae289ce2066bb1 GIT binary patch literal 27336 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�^rxt4ZlvSyo7FshNxGU~jgfwU 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 h_Wz(< + +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") }} diff --git a/content/books/uma-licao-de-vim/14.02-airline/laststatus.png b/content/books/uma-licao-de-vim/14.02-airline/laststatus.png new file mode 100644 index 0000000000000000000000000000000000000000..018b2994f357f436a850f8761d6ffb888e05a8a9 GIT binary patch literal 5147 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 + +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") }} diff --git a/content/books/uma-licao-de-vim/_index.md b/content/books/uma-licao-de-vim/_index.md index 9339ecc..877d7e7 100644 --- a/content/books/uma-licao-de-vim/_index.md +++ b/content/books/uma-licao-de-vim/_index.md @@ -22,12 +22,12 @@ template = "section-contentless.html" * [Abas](10-abas) * [Arquivos de Configuração](11-config) * [Meu .vimrc](11-01-vimrc) - * [Meu .gvimrc](122.md) -* [Modelines](13.md) -* [Tags](14.md) -* [Plugins - Vundle](1501.md) -* [Plugins - Airline](1502.md) -* [Plugins - Fugitive](1503.md) + * [Meu .gvimrc](11-02-gvimrc) +* [Modelines](12-modelines) +* [Tags](13-tags) +* [Plugins - Vundle](14-01-vundle) +* [Plugins - Airline](14-02-airline) +* [Plugins - Fugitive](14-03-fugitive) * [Plugins - Commentary](1504.md) * [Plugins - Tabular](1505.md) * [Plugins - Auto-pairs](1506.md)