11. Arquivos de Configuração
2015-12-22Essa é a parte em que eu menti.
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!
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:
if has('python')
" configuração em python vai aqui
end
Para verificar se alguma opção está ativa:
if &compatible
" configuração em modo de compatibilidade com o VI original
end
ou para conferir um valor:
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.