Julio Biason
6 years ago
12 changed files with 573 additions and 2 deletions
@ -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") }} |
@ -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") }} |
@ -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") }} |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 41 KiB |
@ -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") }} |
After Width: | Height: | Size: 68 KiB |
@ -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") }} |
@ -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") }} |
After Width: | Height: | Size: 55 KiB |
@ -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…
Reference in new issue