Browse Source

More chapters

master
Julio Biason 6 years ago
parent
commit
6f0419cc1b
  1. 2
      content/books/uma-licao-de-vim/05-marcadores/index.md
  2. 60
      content/books/uma-licao-de-vim/06-marcros-de-teclado/index.md
  3. 70
      content/books/uma-licao-de-vim/07-procurar-varios-arquivos/index.md
  4. 87
      content/books/uma-licao-de-vim/08-localizar-substituir/index.md
  5. BIN
      content/books/uma-licao-de-vim/09-splits/all.png
  6. BIN
      content/books/uma-licao-de-vim/09-splits/horizontal-split.png
  7. 114
      content/books/uma-licao-de-vim/09-splits/index.md
  8. BIN
      content/books/uma-licao-de-vim/09-splits/vertical-split.png
  9. 44
      content/books/uma-licao-de-vim/10-abas/index.md
  10. 162
      content/books/uma-licao-de-vim/11-config/index.md
  11. BIN
      content/books/uma-licao-de-vim/11-config/muahaha.jpg
  12. 36
      content/books/uma-licao-de-vim/_index.md

2
content/books/uma-licao-de-vim/05-marcadores/index.md

@ -69,4 +69,4 @@ frente.
E, para ver onde estão as marcas atuais, você só precisa usar `:marks` no modo de
comando.
{{ chapters(prev_chapter_link="./04-registradores", prev_chapter_title="Registradores", next_chapter_link="./04-registradores", next_chapter_title="Registradores") }}
{{ chapters(prev_chapter_link="./04-registradores", prev_chapter_title="Registradores", next_chapter_link="./06-macros-de-teclado", next_chapter_title="Macros de Teclado") }}

60
content/books/uma-licao-de-vim/06-marcros-de-teclado/index.md

@ -0,0 +1,60 @@
+++
title = "Macros de Teclado"
date = 2015-12-22
+++
Essa é a parte em que você repete várias coisas sem repetir várias coisas.
<!-- more -->
No capítulo #3, eu falei rapidamente do commando `.`, que repete o último comando
completo. Mas como repetir comandos que são, na verdade, uma composição de
vários outros comandos?
A resposta são macros de teclado.
Macros de teclado permitem que você grave uma execução qualquer e depois a
repita quantas vezes quiser.
Para fazer uma macro de teclado, você deve, em modo normal, executar
`q{registrador}`. Ao fazer isso, a última linha do VIM irá mostrar "recording",
indicando que o editor está agora gravandos todas as teclas pressionadas no
registrador. Para encerrar a gravação pressione `q` novamente (desta vez, sem o
registrador). Para "tocar" a macro, é necessário usar `@{registrador}`.
Quem prestou atenção no capítulo #5, deve ter notado que eu usei a palavra
"registrador" de novo. E a base da questão é que realmente os dois são a mesma
coisa: Se você copiar algo para o registrador `a` (`"ayy`, por exemplo) e depois
gravar a macro "a", o conteúdo copiado para a área de transferência será perdido.
Em compensação, se você criar a macro no registrador "a", você pode ver
exatamente a sequência de comandos usados usando `"ap`. Ou ainda, você pode
colocar a sequência de comandos desejada num arquivo (ou no próprio arquivo),
copiar para o registrador necessário e depois só "tocar" o registrador.
Como exemplo, imagine que você tem uma lista de constantes que você quer
transformar em uma lista de strings. No caso, você teria que adicionar uma aspa
no começo, uma aspa no final, uma vírgula e passar para a próxima linha. Se
forem apenas 4 constantes, é fácil repetir os comandos em cada linha; mas se
forem 100, a coisa fica diferente.
Neste caso, você faria o seguinte: Na primeira linha, executaria
`qaI"[Esc]A",[Esc]jq` -- ou seja, iniciaria a macro "a", entraria em modo de
inserção no primeiro caractere não branco da linha (`I`), colocaria uma aspa,
sairia do modo de inserção, entraria novamente no modo de inserção mas desta
vez movendo o cursor para o último caractere antes (`A`), adicionaria a aspa que
encerra a string e uma vírgula, moveria para a linha de baixo e encerraria a
macro de teclado. Até aqui espero que não tenha nada de surpresas. Agora você
pode repetir `@a` 99 vezes para as próximas linhas ou simplesmente executar `99@a`
e deixar o VIM repetir a macro 99 vezes. No final, bastaria simplesmente
remover a última vírgula.
Uma coisa a ter em mente -- além da questão do registrador -- é que o VIM
encerra tanto a macro quanto o número de repetições se houver qualquer
problema. Por exemplo, se no meio da sua macro você colocar um `f.` para mover
o cursor para o próximo ponto, mas no meio da execução não for encontrado
nenhum ponto, a macro será interrompida e qualquer execução posterior será
encerrada, não importando se for a 99<sup>a</sup> execução da macro ou a
1</sup>a</sup>. Se você perceber que a execução não terminou onde deveria,
basta executar `u` em modo de comando para desfazer a execução da macro.
{{ chapters(prev_chapter_link="./05-marcadores", prev_chapter_title="Marcadores", next_chapter_link="./07-procurar-varios-arquivos", next_chapter_title="Procurar em Vários Arquivos") }}

70
content/books/uma-licao-de-vim/07-procurar-varios-arquivos/index.md

@ -0,0 +1,70 @@
+++
title = "Procurar em Vários Arquivos"
date = 2015-12-22
+++
Essa é a parte em que mais uma vez você vai ter que pesquisar sobre
expressões regulares.
<!-- more -->
Já vimos o comando de pesquisa, que tem um modo inteiro só pra si[^1].
Mas como fazer para encontrar ocorrências de uma palavra em mais de um arquivo?
Para isto, existe o comando `:grep`.
O grep é uma ferramente comum em Unixes (e Linux) em geral, mas o VIM tem
scripts que fazem a mesma coisa em outros sistemas operacionais (por exemplo,
Windows). Assim, o mesmo comando vai funcionar da mesma forma não importando
qual sistema você esteja utilizando.
Como o `:grep` usa outras funcionalidades existentes no VIM, iremos ver um pouco
mais do que simplesmente "Procurar", mas isso é necessário.
Como o modo de pesquisa, `:grep` precisa de uma expressão regular. Ao contrário
do modo de pesquisa, o `:grep` também precisa de uma lista de arquivos a serem
pesquisados. Por baixo dos panos, o que o VIM faz é chamar o comando "grep" (do
Unix), verifica o resultado e permite pular facilmente entre os elementos
encontrados (então todas as opções disponíveis para o grep podem ser passadas
diretamente de dentro do VIM).
Por exemplo, para pesquisar por arquivos que contém a palavra "void", você só
precisa executar o comando `:grep void *` (onde `:grep` é o comando, `void` é a
expressão a ser pesquisada e `*` é a lista de arquivos a serem pesquisados). Como
o grep (o aplicativo do Unix) somente pesquisa arquivos no diretório
especificado (no nosso caso anterior, como não foi passado diretório algum,
será considerado o diretório atual), o `:grep` (o comando do VIM) também não vai
entrar em nenhum subdiretório (de novo, porque o VIM simplesmente chama o grep
[aplicativo do Unix] e facilita pular entre os elementos encontrados). Para
fazer uma procura que encontre a expressão além do diretório atual, basta
adicionar a opção "-r" para o grep (`:grep void -r *`).
Ok, agora que você sabe usar o `:grep`... Como é que você vê os resultados?
Primeira informação periférica: O VIM tem um tipo de "janela" especial, chamada
"Quickfix". Essa "janela" é, na verdade, um "split" da tela (e mais a frente
veremos como trabalhar com "splits" e abas). Para exibir o Quickfix, é usado o
comando `:copen`; para fechar o Quickfix, basta usar `:copen` de novo. Para
passar para o próximo elemento existente no Quickfix, use `:cnext` (ou
simplesmente `:cn`); para passar para o elemento anterior, use `:cprevious` (ou
simplesmente `:cp`); para mover o cursor para a posição do elemento atual do
Quickfix, use `:cc` (que é simplesmente `:cc` mesmo).
A segunda informação periférica: Como eu falei, usar `:grep {expressão} *` irá
procurar "{expressão}" a partir do diretório atual. Para descobrir qual é o
"diretório atual" para o VIM, use `:pwd` (de "print working directory", que
também é um comando Unix); para mudar para outro diretório, utilize o comando
`:cd {diretório}`, como você faria num shell normal.
(E antes que alguém pergunte: Sim, você pode fazer um grep fora do diretório
atual passando o diretório em questão no próprio comando do grep: `:grep void
/tmp -r` irá procurar por "void" em todos os arquivos existentes no diretório
/tmp.)
[^1] Apenas para lembrar, `/` entra no modo de pesquisa, onde só é preciso entrar
a expressão regular a ser encontrada; para passar para a próxima
ocorrência, use `n` em modo normal; para passar para a ocorrência anterior,
use `N` também em modo normal; para remover o realce das palavras
encontradas, use `:noh` em modo de comando.
{{ chapters(prev_chapter_link="./06-macros-de-teclado", prev_chapter_title="Macros de Teclado", next_chapter_link="./07-procurar-varios-arquivos", next_chapter_title="Procurar em Vários Arquivos") }}

87
content/books/uma-licao-de-vim/08-localizar-substituir/index.md

@ -0,0 +1,87 @@
+++
title = "Localizar e Substituir"
date = 2015-12-22
+++
Essa é a parte em que você vai precisar aprender expressões regulares — mais
uma vez.
<!-- more -->
Uma coisa relativamente comum quando se está programando é substituir todas as
ocorrências de uma palavra por outra[^1].
Para fazer "localizar e substituir" ("search and replace") existe o comando
`:substitute` em modo de comando (ou simplesmente `:s`).
Até aí sem problemas, mas existe uma pequena pegadinha (na verdade, duas, mas
uma de cada vez): `:s` é, na verdade, `:{range}s`, onde "{range}" é a parte do
texto que o comando `:s` deve ser executado -- e sim, eu sei que não falei
sobre este tipo de comando antes, mas essa era a melhor oportunidade.
Então, {range}. {range} é opcional e, se não for passado, o comando será
executado da linha atual. Isto, obviamente, não é muito útil. {range} é formado
por um par[^2], separado por vírgulas, indicando o início e o fim da execução do
comando.
O uso básico de {range} é "linha inicial,linha final". Por exemplo, `:1,5s` irá
executar o comando `:s` entre as linhas 1 (a primeira, não existe linha 0 no
VIM) e 5.
E, mais uma vez, existem indicadores especiais, inclusive para {range}.
Um número indica o número da linha, como já comentei. "$" é a última linha do
arquivo (assim, `:1,$s` irá executar `:s` em todo o arquivo); "%" é um alias
para "1,$" (ou seja, todo o arquivo); `'{marcador}` irá, obviamente, utilizar
os marcadores (ou seja, `:'a,'bs` irá executar `:s` entre o marcador "a" e o
marcador "b" -- E marcadores entre arquivos [em maiúsculas] não são
permitidos).
(E existe outros dois marcadores especiais que eu não comentei antes por achar
que não há uso fora do `:s` que são `'<` e `'>` que indicam, respectivamente, o
início e o fim da região visual -- mas o VIM vai adicionar estes dois
marcadores automaticamente se você tiver uma região visual selecionada e
pressionar `:` e por isso ficaram pra trás. Então não se assuste se o VIM
começar a colocar coisas na linha de comando sem que você tenha digitado.)
Daqui pra frente, eu vou colocar o comando como `:%s`, já que esta é a execução
mais comum do comando. Mas lembre-se que `%` = `1,$` = do começo ao fim.
`:%s` funciona, assim como a pesquisa, com expressões regulares, só que ao invés
de termos uma expressão, teremos duas: a de pesquisa e a de substituição. Em
casos mais simples, onde você quer substituir "palavra 1" por "palavra 2", o
comando será `:%s/palavra 1/palavra 2`. Mais uma vez, conhecer expressões
regulares vai ajudar aqui -- e fica a dica para olhar sobre "grupos".
A segunda pegadinha é que `:%s` executa o comando em cada linha do range e, como
padrão, somente a primeira ocorrência é substituída. Assim, se "palavra 1"
existir mais de uma vez em uma linha, somente a primeira será alterada.
Para resolver isso, você deve usar o terceiro parâmetro de `:%s`, {flags}. As
flags mais comuns são:
<dl>
<dt>g</dt>
<dd>Substitui todas as ocorrências da expressão de procura na linha, não apenas
a primeira.</dd>
<dt>i</dt>
<dd>Ignora maiúsculas e minúsculas ("ignore case")</dd>
<dt>c</dt>
<dd>Pede confirmação em cada alteração.</dd>
</dl>
Concluindo: para substituir "void" por "int\*" em todo o arquivo mas apenas no
começo da linha, ignorando se está em maiúsculas ou minúsculas (porque o
estagiário pensou que estava digitando uma monografia), mas confirmando cada
mudança, você faria `:%s/^void/int*/ic` (como é apenas no começo da linha e nós
forçamos isso na expressão regular -- o `^` ali -- não precisamos usar a flag "g",
já que não teria efeito nenhum).
[^1] E, mas pra frente, veremos que existem plugins que deixam esta parte mais
fácil.
[^2] Na verdade, não e um par mas, de novo, fazer substituição em apenas uma
linha não é muito útil, principalmente considerando os comandos que o VIM
tem para movimentação do cursor.
{{ chapters(prev_chapter_link="./07-procurar-varios-arquivos", prev_chapter_title="Macros de Teclado", next_chapter_link="./09-splits", next_chapter_title="Splits") }}

BIN
content/books/uma-licao-de-vim/09-splits/all.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
content/books/uma-licao-de-vim/09-splits/horizontal-split.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

114
content/books/uma-licao-de-vim/09-splits/index.md

@ -0,0 +1,114 @@
+++
title = "Splits"
date = 2015-12-22
+++
Essa é a parte em que você vai passar uma hora dividindo a tela em pedacinhos
cada vez mais pequenos.
<!-- more -->
Até agora, enquanto falávamos de editar textos no VIM, vimos apenas como editar
um arquivo por vez. Existem formas de editar mais de um arquivo (usando `:e` e
`:e#{número}`) mas estas estão longe de serem fáceis de serem utilizadas.
Existem duas formas de manter dois (ou mais) arquivos abertos ao mesmo tempo.
Uma delas são "splits". Basicamente, splits permitem que você "reparta" a tela
em pedaços, podendo mostrar outros arquivos (ou até mesmo outra vez o mesmo
arquivo).
Para criar splits, existem dois comandos que devem ser usados em modo de
comando: `:sp` e `:vsp`. Ambos comandos aceitam o nome do arquivo a ser aberto no
novo split; se não for passado o nome de um arquivo, o arquivo que já está
aberto será carregado.
A diferença entre eles é que `:sp` irá criar um split horizontal...
![](horizontal-split.png)
... enquanto que `:vsp` irá criar um split vertical.
![](vertical-split.png)
Dentro de cada split, comandos executados irão afetar apenas o buffer atual: `:w`
irá salvar apenas o arquivo apresentar no split atual, `:e` irá abrir um arquivo
no split atual e assim por diante.
Note que eu falei "buffer atual". Como falei antes, "buffer" é o nome dado para
a representação do arquivo em memória e que tanto `:sp` quanto `:vsp` sem
parâmetros irão abrir um split com o arquivo atual -- que, na verdade, é o
buffer atual. Se você fizer isso e começar a editar o texto em um dos splits, o
conteúdo do outro também irá mudar, já que ambos estão apresentando o mesmo
buffer.
Para fechar um split, basta fechar o arquivo, tanto com `:q` quanto `:wq` ou
qualquer outro comando que feche um arquivo. O split será removido e o cursor
irá para o próximo split. Se não houverem mais splits, o VIM irá fechar, como
já vinhamos vendo desde o começo.
E sim, você pode fazer quantos splits e de formas diversas quantas vezes quiser
(até que não sobre mais espaço na tela, quer dizer).
![](all.png)
Para "manusear" splits, você irá utilizar comandos que começam com, em modo
normal, `[Ctrl]w`. `[Ctrl]w`, por si só, não faz nada (a não ser que você
repita o comando, mas isso é outra coisa) e requer uma ação a ser executada no
split (assim como alguns comandos requerem uma movimentação).
## [Ctrl]wj ou [Ctrl]w[direcional para baixo]
Move o cursor para o split abaixo do atual. Se não houverem outros splits
abaixo do atual, permanece no mesmo. Aceita um número de repetiçoes, ou seja,
`3[Ctrl]wj` irá imediatamente pular para o 3o. split abaixo do atual.
## [Ctrl]wh ou [Ctrl]w[direcional para a esquerda] e [Ctrl]wk ou [Ctrl]w[direcional para cima] e [Ctrl]wl ou [Ctrl]w[direcional para a direita]
O mesmo que [Ctrl]wj, mas indo para o split da esquerda, acima ou direita,
respectivamente.
## [Ctrl]w+ e [Cltr]w-
Aumenta ou diminui o tamanho do split em uma linha. Se for passado um número
antes do comando -- por exemplo `3[Ctrl]w+` -- o número de linhas afetas será o
número indicado.
## [Ctrl]w> e [Ctrl]w<
O mesmo que `[Ctrl]w+` e `[Ctrl]w-`, mas altera o número de colunas ao invés do número de linhas.
## [Ctrl]w\_ e [Ctrl]w|
Deixa o split com o maior altura possível (ou seja, coloca o máximo de linhas
possíveis para o split) ou com a maior largura possível (ou seja, coloca o
máximo de colunas possíveis para o split).
## [Ctrl]w=
Altera o tamanho dos splits para que estes fiquem o mais equilibrados
possíveis.
## [Ctrl]wH, [Ctrl]wJ, [Ctrl]wK,/tt> e [Ctrl]wL
Move o split atual para o canto mais a esquerda, abaixo, acima ou direita,
respectivamente (note que a letra de movimentação está em maiúsculas).
## [Ctrl]ww
Move o cursor para o split anterior. Se você está em um split qualquer e fizer
`3[Ctrl]wj` para ir para o 3<sup>o</sup> split abaixo do atual, `[Ctrl]ww` irá
mover o cursor de volta para o split original (e `[Ctrl]ww` irá mover o cursor
de volta para o 3<sup>o</sup> split abaixo do atual).
## [Ctrl]wf
Abre o arquivo com o nome sob o cursor em um novo split.
Quando falei do grep, eu comentei que existe o comando `:cope` para abrir a
janela do Quickfix. Bom, se você quiser ficar pulando entre a janela do
Quickfix e o texto, os comandos `[Ctrl]w` acima irão ajudar.
Existem ainda alguns outros comandos para splits, mas veremos estes mais a
frente.
{{ chapters(prev_chapter_link="./08-localizar-substituir", prev_chapter_title="Localizar e Substituir", next_chapter_link="./10-abas", next_chapter_title="Abas") }}

BIN
content/books/uma-licao-de-vim/09-splits/vertical-split.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

44
content/books/uma-licao-de-vim/10-abas/index.md

@ -0,0 +1,44 @@
+++
title = "Abas"
date = 2015-12-22
+++
Essa é a parte me que você acha coisas que já fazia antes.
<!-- more -->
Além dos splits, que vimos no capítulo anterior, VIM também tem suporte à abas.
O mais interessante é que você pode usar abas tanto no VIM gráfico (também
chamado de GVim) quanto no console.
Para abrir um arquivo no VIM, sabemos que temos que usar o comando `:e`; para
abrir o arquivo em uma aba, o comando é `:tabe`.
Ao contrário de splits, criar uma nova aba sem passar um arquivo não cria uma
nova aba com o buffer atual; `:tabe` sem um nome de arquivo irá criar uma nova
aba com um buffer em branco. E sim, você pode abrir o mesmo arquivo em mais de
uma aba e as alterações feitas em uma irão refletir na outra.
Para pular entre abas, você poder usar o comando `gt` em modo normal ou `:tabn` em
modo de comando. Se você usar um número de repetições (p.ex. `3gt` ou `:tabn 3`) o
VIM irá pular diretamente para aquela aba (no caso, para a terceira), não
importando a aba atual. `gT` em modo normal ou `:tabp` move o cursor para a aba
anterior.
Se quiser mover abas de posição, você deve usar `:tabm`. `:tabm` irá mover a aba
atual para ficar depois da aba indicada (p.ex., `:tabm 3` irá mover a aba atual
para depois da terceira aba). `:tabm` também aceita parâmetros considerando a aba
atual: `:tabm +2` irá mover a aba atual duas abas pra frente (para a direita) e
`:tabm -2` irá mover a aba duas abas pra trás (para a esquerda).
Atalhos padrão para mover para a próxima aba do sistema operacional também são
aceitos por padrão. `[Ctrl][PageDn]` e `[Ctrl][PageUp]` no Linux e
`[Command][Shift]]` e `[Command][Shift][` no OS X, por exemplo. Como não existe
nenhum padrão para consoles, não há nenhum atalho padrão e devem ser usados os
comandos de seleção de abas que vimos antes.
Mais pra frente, quando estivermos falando do arquivo de configuração, eu vou
explicar um "truque" para pular diretamente para a aba desejada, assim como
funciona no Firefox e no Chrome.
{{ chapters(prev_chapter_link="./09-splits", prev_chapter_title="Splits", next_chapter_link="./11-config", next_chapter_title="Arquivos de Configuração") }}

162
content/books/uma-licao-de-vim/11-config/index.md

@ -0,0 +1,162 @@
+++
title = "Arquivos de Configuração"
date = 2015-12-22
+++
Essa é a parte em que eu menti.
<!-- more -->
Lembram que bem no começo, quando estávamos falando dos modos de execução, eu
comentei que o modo Ex não era usado?
Bom, eu menti. MUAHAHAHAHA!
![](muahaha.jpg)
Na verdade, o Modo Ex não é chamado comumente, mas os arquivos de configuração
do VIM são um grande amontoado de comandos executando em modo Ex.
E o que é o modo Ex, afinal de contas? O modo Ex nada mais é que o modo de
comando sem a necessidade de usar `:` na frente de todos os comandos. Como
ficaria complicado para, por exemplo, entrar no modo Ex, executar e arquivo,
sair do modo ex e entrar em modo de inserção, até o momento temos usado o modo
de comando para isso, já que economiza um monte de tecladas. Como não iremos
ficar indo para o modo de inserção o tempo todo, e não faz sentido fazer um
arquivo gigantesco com várias linhas começando com `:`, também faz sentido que o
arquivo de configuração seja executado em modo Ex.
O VIM tem um arquivo de configuração global (conhecido com "vimrc") e um arquivo
para execução em modo gráfico ("gvimrc")[^1]. Ainda, existem duas versões de cada
um destes arquivos: uma versão global para todos os usuários e uma versão
definida para o usuário atual. Daqui pra frente, iremos ver as configurações do
usuário, já que estas sobrepõem as globais.
"vimrc" e "gvimrc" ficam no diretório dos dados do usuário; em qualquer um dos
sistemas operacionais hoje, você consegue descobrir o diretório destes arquivos
com `:echo $HOME` dentro do próprio VIM. Apenas note que embora eu venho chamando
os arquivos de vimrc e gvimrc, os nomes são, na verdade, ".vimrc" e ".gvimrc" (ou
"\_vimrc" e "\_gvimrc" no caso do Windows).
Como existem muitas opções, não vou aqui explicar cada uma delas -- mas, no
próximo capítulo eu vou mostrar o arquivo que eu estou usando para servir de
guia.
O que você vai ver quando abrir um arquivo de configuração:
## set
`set` é, efetivamente, a forma de "setar" alguma configuração no VIM.
Existem dois tipos de configurações: As com valores e flags.
Flags é mais fácil de ser explicado: você simplesmente seta a configuração. Por
exemplo, fazer com que o VIM mostre uma coluna com o número de cada linha,
você pode usar `:set number` (ou simplesmente `set number` dentro do arquivo de
configuração). Para desligar uma opção deste tipo, você só precisa adicionar
"no" na frente (para desligar number é usado `:set nonumber`).
"Valores" é exatamente o que significa: Ao invés de ser uma simples flag, a
opção recebe uma string ou número. Por exemplo, `:set tabstop=4` irá definir que
o tamanho da tabulação é de 4 espaços. `:set notabstop` não tem efeito aqui, já
que não é uma flag.
Para fazer com que uma configuração volte ao seu valor/estado original, use
`:set {opção}&`; para verificar o valor de uma opção, use `:set {opção}?`.
Talvez a coisa não esteja muito clara aqui, mas quando examinarmos um arquivo
de configuração real, as coisas irão clarear.
## let
`let` é usado para definir o valor de uma variável. Uma variável tem sempre um
valor -- ou seja, não existem "variáveis flags". Variáveis são normalmente
utilizadas por plugins ou arquivos de sintaxe e, portanto, as variáveis que
você terá que usar vão depender do que você está usando.
(Obviamente, se você estiver escrevendo seu próprio plugin — que eu não vou
abordar aqui — o uso de variáveis vai ser praticamente obrigatório.)
## if
`if`, como em qualquer linguagem de programação, serve para execução
condicional. Você pode, por exemplo, verificar se alguma feature foi ativada na
compilação do binário, se alguma opção está ligada, etc.
Por exemplo, para verificar se o suporte à scripts Python foi adicionado, você
pode fazer:
```viml
if has('python')
" configuração em python vai aqui
end
```
Para verificar se alguma opção está ativa:
```viml
if &compatible
" configuração em modo de compatibilidade com o VI original
end
```
ou para conferir um valor:
```viml
if &t_Co > 2
" configuração quando há suporte a mais de 2 cores.
end
```
E assim por diante.
## map, imap (e outros)
`map` pode ser usado para mapear teclas para outras funções. Por exemplo `:map Y
y$` irá mapear "Y" para executar `y$` (copiar da posição atual do cursor até o fim
da linha). Com excessão de [Shift], qualquer modificador pode ser usado:
* C - para `[Control]`
* M - para `[Alt]` (que normalmente é chamado de "Meta" em sistemas Unix — e por isso "M")
* O - para `[Command]` (somente em Macs)
Por exemplo, `:map C-m yy` irá adicionar `[Ctrl]m` para copiar a linha inteira.
Ainda, a diferença entre `map` e `imap` é que `map` é global enquanto que
`imap` só irá funcionar em modo de inserção (e assim você pode imaginar o que
`nmap` e `vmap` fazem, certo?)
## au (ou autocmd)
Comandos que são executados em determinadas condições. Condições podem desde
"FileType" para ações confirme o tipo de arquivo e "BufRead", "BufWrite" e
relacionados quando um buffer for aberto ou fechado.
O que seriam os "relacionados"? Bom, alem de ser na leitura/escrita do arquivo,
podem ser adicionados comandos antes da execução ("BufReadPre", "BufWritePre"),
depois da execução ("BufReadPost", "BufWritePost") e durante ("BufReadCmd",
"BufWriteCmd").
(Existem ainda auto-comandos para quando o editor entrar em modo de edição,
abrir o VIM gráfico, VIM está fechando, e assim por diante. Para ver todos os
eventos, digite `:help autocmd-events`.)
Por exemplo, `au FileType smarty set ai` para ligar a auto-identação quando VIM
detectar que você está editando um arquivo Smarty (engine de templates para
PHP). Ou ainda `au BufRead set nocompatible` irá configurar o editor para entrar
em modo de não-compatibilidade com VI depois de abrir qualquer arquivo.
Ainda, é possível encadear auto-comandos, por exemplo, `autocmd FileType python
autocmd BufWritePre :%s/\s\+$//e` irá fazer com que quando o tipo de arquivo for
"python", seja criado um auto-comando que antes de salvar o arquivo, seja
executado um comando de substituição no buffer -- que remove espaços em branco
no final da linha).
(Se você está perdido com o que está vendo aqui, não se preocupe -- a tendência
é que, ao ver um arquivo de configuração real, você entenda o que está
acontecendo).
[^1] Existe um terceiro, .exrc, mas honestamente, em todo esse tempo usando o
VIM, eu nunca tinha ouvido falar que este arquivo sequer existia.
{{ chapters(prev_chapter_link="./10-abas", prev_chapter_title="Abas", next_chapter_link="./11-config", next_chapter_title="Arquivos de Configuração") }}

BIN
content/books/uma-licao-de-vim/11-config/muahaha.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

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

@ -1,4 +1,38 @@
+++
transparent = true
transparent = false
title = "Uma Lição de VIM"
template = "section-contentless.html"
+++
* [Introdução](00-intro)
* [Modos](01-modos)
* [Modo normal](01-01-modo-normal)
* [Entendendo o Cursor](01-02-entendendo-o-cursor)
* [Mudando de Modos - Modo de Inserção](01-03-modo-de-insercao)
* [Mudando de Modos - Modo Visual](01-04-modo-visual)
* [Mudando de Modos - Modo de Comando](01-05-modo-de-comando)
* [Outros Comandos](02-outros-comandos)
* [Recortar, Copiar e Colar](03-recortar-copiar-colar)
* [Registradores](04-registradores)
* [Marcadores](05-marcadores)
* [Macros de Teclado](06-macros-de-teclado)
* [Procurar em Vários Arquivos](07-procurar-varios-arquivos)
* [Localizar e Substituir](08-localizar-substituir)
* [Splits](09-splits)
* [Abas](10-abas)
* [Arquivos de Configuração](11-config)
* [Meu .vimrc](121.md)
* [Meu .gvimrc](122.md)
* [Modelines](13.md)
* [Tags](14.md)
* [Plugins - Vundle](1501.md)
* [Plugins - Airline](1502.md)
* [Plugins - Fugitive](1503.md)
* [Plugins - Commentary](1504.md)
* [Plugins - Tabular](1505.md)
* [Plugins - Auto-pairs](1506.md)
* [Plugins - Syntastic](1507.md)
* [Plugins - Snipmate](1508.md)
* [Plugins - CtrlP e CtrlPFunky](1509.md)
* [Plugins - Vim-Multiple-Cursors](1510.md)
* [Conclusão](16.md)

Loading…
Cancel
Save