" http://aurelio.net/doc/coluna
" coluna do aurelio 09 [2001-06-28]
" vim (um vimrc diferente)
"
" original em http://aurelio.net/doc/coluna/coluna-09.html
"
" olás. creio que o  vim  não precisa de  apresentação não é mesmo? pois
" bem,  então que tal explorarmos aquele mundo  misterioso que o arquivo
" de configração  ~/.vimrc  nos apresenta? o que é um vimrc?  oras, este
" texto todo é um vimrc!  copie-o para seu  $HOME  e incremente seu vim.
" ah! aproveite e leia este texto direto no vim, para ficar colorido.
"
" como já pudemos perceber, linhas que começam com aspas são comentários
" e nelas podemos soltar o verbo e colocar todo tipo de  informação útil
" para a manutenção deste arquivo. então vamos lá.
"
" para aumentar a esperteza e memorização do vim, podemos ter um arquivo
" ~/.viminfo que guardará dados úteis como seu histórico de pesquisas /,
" linha de comando :, marcas `, registradores, entre outros. então com o
" viminfo é  possível copiar uma  linha qualquer (yy),  sair do arquivo,
" abrir um OUTRO arquivo e colar (p) aquela linha copiada anteriormente.
" você pode inclusive nesse intervalo  desligar a máquina e ficar um mês
" de férias, que ao voltar o vim  ainda saberá qual foi a linha copiada.
" não tem contra-indicações. USE!
"
" a segunda linha é uma gambiarra para que ao abrir um arquivo, o cursor
" já fique na  posição que estava na  última vez que ele foi  editado. o
" viminfo guarda a posição de TODOS os arquivos que você editou.
"
set viminfo='10,\"30,:20,%,n~/.viminfo
au BufReadPost * if line("'\"")|execute("normal `\"")|endif

" o vim possui uma linguagem de programação própria,  onde podemos fazer
" funções, e até aplicativos inteiros, como o  vine (leitor de e-mail) e
" o jogo sokoban.vim. mais info sobre o assunto consulte www.vim.org.
"
" mas, como já  temos que fazer  nossos próprios programas, temos opções
" mais acessíveis para automatizar tarefas,  como o mapeamento. aqui vai
" um mapeamento  exclusivo do  modo de inserção (note o i no começo) que
" faz a  função de completação automática  de palavras, procurando-as no
" próprio arquivo. é fácil de usar e nos poupa tempo, além da certeza de
" que a palavra completada está grafada corretamente. então temos:
"
" F7: completa uma palavra
" F8: dá seqüência a essa palavra
"
" os mapeamentos foram  gravados nas teclas F7 e F8,  mas poderia ser em
" qualquer outra. suponha que você se chame Zózimo Gwinch Wurstalinewski
" e digitou seu nome numa parte do texto. depois em outra parte do mesmo
" texto, você precisa colocar seu nome novamente. ê trabalheira.
"
" mas como você  tem esse supermapeamento,  simplesmente digita Zó<F7> e
" surpresa! seu primeiro nome foi completado. e para fazer o resto, você
" continua completando as palavras seguintes com a tecla <F8>, então com
" Zó<F7><F8><F8>, lá está seu nome completo. imbatível.
"
" isso é muito muito útil ao programar, completando nomes de variáveis e
" funções,  geralmente longos e  difíceis,  e que você repete  em várias
" partes do programa.
"
imap <F7> <c-n>
imap <F8> <c-x><c-n>

" e se você tem certos textos  que sempre tem que ficar  digitando, como
" seu nome completo, seu email, seu endereço,  faça abreviações, que são
" completadas automaticamente enquanto você as digita.
"
" use abreviações para textos normais, para comandos use mapeamentos.
"
iab zgw Zózimo Gwinch Wurstalinewski
iab @@  zozimo@wurstalinewski.com.br

" e como o capitalismo nos obriga a produzir em velocidade insalubre, ao
" salvar e/ou sair de um arquivo, é comum na pressa digitar o `w` ou `q`
" em maiúsculas, pois você ainda não soltou o dedo do  shift que apertou
" para fazer os dois pontos :.
"
" mas não se desespere!  até para os problemas econômicos mundiais o vim
" tem a solução! basta usarmos abreviações para a linha de comando (Cab)
"
cab W  w
cab Wq wq
cab wQ wq
cab WQ wq
cab Q  q

" um mapeamento é na verdade uma  seqüência de teclas que você apertaria
" normalmente no vim,  para fazer a tarefa.  o ENTER é representado  por
" <cr>, um  crtl+y vira <c-y> e se o  mapeamento exceder uma linha, você
" pode quebrá-la e começar a próxima com um escape \.
"
" um cuidado especial  deve ser tomado ao nomear um mapeamento, para não
" usar  letras ou nomes  que já são  comandos do vim.  para evitar isso,
" sempre inicie o nome de um  mapeamento com uma vírgula. no exemplo, ao
" digitar ,d no modo de comando (não é inserção) aparecerá a data atual.
"
map ,d :r!date<cr>
      \:s/ \(...\) \(..\).*\(....\)$/, \2 de \1 de \3/<cr>
      \:nohl<cr>

" e tem uma dica boa para os  programadores  de plantão. comentários num
" programa são  excelentes, mas  na hora da  sua manutenção,  eles podem
" atrapalhar, pois você queria ver só o código.
"
" para resolver este problema, vamos fazer um  truque no vim. que tal se
" pintarmos os comentários de preto para que fiquem invisíveis?  podemos
" fazer isso redefinindo o componente da cor da sintaxe.  ah! e quem usa
" fundo branco (argh) vai ter que trocar `black` por `white`.
"
" e como somos chiques ainda criamos uma função vim pra fazer o serviço.
" a CommOnOff()  oculta/mostra os comentários, alternando.  o resumão do
" que ela faz é: se a variável global  'hiddcomm'  não existir, a cria e
" oculta os comentários. se já existir, restaura os comentários. por fim
" definimos um mapeamento esperto no F11 para chamar nossa função.
"
" dica: se você está lendo este arquivo no vim, experimente agora mesmo!
"   :so %
"   F11
"   F11
"
fu! CommOnOff()
  if !exists('g:hiddcomm')
    let g:hiddcomm=1 | hi Comment ctermfg=black guifg=black
  else
    unlet g:hiddcomm | hi Comment ctermfg=cyan  guifg=cyan term=bold
  endif
endfu
map <F11> :call CommOnOff()<cr>

" e já que estamos mexendo com a sintaxe,  que tal trocar a cor do texto
" daquela seleção que aparece quando você procura algo com o comando / ?
" é fácil, basta definir a cor do componente da sintaxe. ah sim, a opção
" hls (veja abaixo) deve estar ativa.
" 
" você pode colocar as cores que quiser, em inglês. note que é ctermBG e
" FG, de  background e foreground  (fundo e letra). e veja  também que o 
" IncSearch (busca enquanto você digita) é invertido!
"
hi    Search ctermbg=green ctermfg=black
hi IncSearch ctermbg=black ctermfg=cyan

" no vim temos diversas opções para  modificar seu comportamento através
" do comando set. para ver  todas as opções  disponíveis, faça :set all.
" diversas  opções já vêem  ligadas por  padrão, então vamos  ver apenas
" algumas mais diferentes.
"
" é sempre bom associar a abreviação da  opção com o nome em inglês para
" ficar mais fácil a  memorização.  no caso das opções de busca  abaixo,
" seus nomes completos são:
"   IncrementedSearch, HighLightedSearch, IgnoreCase e SmartCaSe
"
set is hls ic scs  "opções espertas de busca
set sm             "ShowMatch: mostra o início do bloco recém fechado
set sw=1           "ShiftWidth: número de colunas para o comando >
set ruler          "régua: mostra a posição do cursor
set shm=filmnrwxt  "SHortMessages: encurta as mensagem da régua
set wildmode=longest,list  "para completação do TAB igual ao bash

" a configuração  necessária para que as  cores funcionem no  modo texto
" geralmente já é feita no  vimrc do sistema, mas caso ela não esteja lá
" aqui estão as linhas mágicas que trarão a alegria das cores de volta a
" sua vida:
"
set background=dark
if has("terminfo")
  set t_Co=8
  set t_Sf=^[[3%p1%dm
  set t_Sb=^[[4%p1%dm
else
  set t_Co=8
  set t_Sf=^[[3%dm
  set t_Sb=^[[4%dm
endif

" mas como acima só  dissemos ao vim 'você pode usar cores', agora falta
" dizermos: 'use cores'. este comando liga a  sintaxe, que é responsável
" por,  dependendo do tipo  de arquivo,  reconhecer e colorir  as várias
" estruturas do texto, como por exemplo <b>tags</b> num HTML.
"
syn on

" outra funcionalidade extremamente  interessante é o autocomando, que é
" executado  automaticamente  dependendo do  nome ou tipo do arquivo, no
" seu carregamento ou saída do editor.
"
" se você tem um arquivo com uma extensão qualquer, como .xyz e quer que
" o vim o interprete como um arquivo HTML,  diga para o vim configurar o
" ft (FileType)  ao abrir um arquivo novo  (BufNewFile)  ou já existente
" (BufRead) com essa extensão.
"
au BufNewFile,BufRead *.xyz set ft=html
" 
" ou ainda,  se for um arquivo  de um tipo  já reconhecido pelo vim, use
" diretamente a opção FileType. vamos usar de exemplo a linguagem python
" onde os TABs indicam os blocos de comandos, então é legal `vê-los`.
"
" para isso definimos uma  regra rápida de sintaxe chamada `pythonTAB` e
" a ela associamos a cor azul. além disso definimos algumas opções com o
" comando set e  para fechar,  trocamos a cor  das "strings" para verde,
" porque aquele rosinha é muito palha. 
"
au FileType python syn match pythonTAB '\t\+'
au FileType python hi pythonTAB ctermbg=blue
au FileType python set ts=4 tw=80 noet
au FileType python hi pythonString ctermfg=darkgreen

" e p-p-por hoje é só p-pessoal.
"
" --
" este texto pode ser copiado livremente na íntegra ou em parte, desde que
" indicado o endereço do original: http://aurelio.net/doc/coluna