# Vim/Como editar preferências
## Como editar preferências no Vim

O arquivo de preferências do vim é ".vimrc", um arquivo oculto que pode ser criado no home do usuário
Caso use o Windows o arquivo é:

### Onde colocar plugins e temas de cor

No windows procure ou crie uma pasta chamada 'vimfiles' que fica em
No linux procure ou crie uma pasta chamada .vim que deve ficar em
Nesta pasta '.vim' ou 'vimfiles' deve haver pastas tipo

## Comentários

Ao fazer modificações comente usando aspas duplas no começo da linha, os comentários lhe ajudarão mais tarde, pois à medida que o seu vimrc cresce podem aparecer dúvidas sobre o que determinado trecho faz :)

## Notas sobre mapeamentos

Mapeamentos são um ponto importante do vim, com eles podemos controlar ações com quaisquer teclas, mas antes temos que saber que:
No Vim podemos mapear uma tecla para o modo normal, realizando determinada operação e a mesma tecla pode desempenhar outra função qualquer em modo insert ou comando, veja:
A única diferença nos mapeamentos acima é que o mapeamento para modo insert começa com 'i', assim como para o modo comando ':' começa com 'c' no caso cmap.

## Recarregando o arquivo de configuração

Cada alteração no arquivo de configuração do vim só terá efeito na próxima vez que você abrir o vim a menos que você coloque isto dentro do mesmo
Agora basta pressionar F12 em modo normal e as alterações passam a valer instantaneamente!

## Set

Os comandos set podem ser colocados no .vimrc:
ou digitados como comandos:
O comando gqap ajusta o parágrafo atual em modo normal

### Setando macros prévias

Definindo uma macro de nome 's' para ordenar e retirar linhas duplicadas
Para executar a macro 's' definida acima faça:
O Vim colocará no comando
Bastando pressionar <ENTER>. Observação: esta macro prévia pode ficar no vimrc ou ser digitada em comando ':'
Obs: O vim à partir de sua versão '7' passou a ter um comando de ordenação próprio, ou seja, ele não depende mais de comandos externos para ordenar e retirar duplicados

## Mapeamentos

Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende de sua criatividade e do quanto conhece o Vim.
Os mapeamentos abaixo são úteis para quem escreve códigos html, permitem inserir caracteres reservados do html usando uma barra invertida para proteger os mesmos, o vim substituirá os "barra alguma coisa" pelo caractere correspondente.
O termo inoremap significa: em modo "insert" não remapear, ou seja ele mapeia o atalho e não permite que o mesmo seja remapeado, e o mapeamento só funciona em modo insert, isso significa que um atalho pode ser mapeado para diferentes modos de operação.
Veja este outro mapeamento:
Permite habilitar ou desabilitar números de linha do arquivo corrente. A exclamação ao final torna o comando booleano, ou seja, se a numeração estiver ativa será desabilitada, caso contrário será ativada. O "<cr>" ao final representa um ENTER.

### Limpando o buffer de buscas

A cada busca, se a opção 'hls' estiver habilitada o vim faz um destaque colorido, mas se você quiser limpar pode fazer este mapeamento
É um mapeamento para o modo normal que faz com que a combinação de teclas Shift-F11 limpe o buffer de buscas

### Destacar palavra sob o cursor

O atalho acima 's-f' corresponde a Shift-f

### Remover linhas em branco duplicadas

No mapeamento acima estamos associando o atalho
à ação desejada, fazer com que linhas em branco sucessivas seja substituidas por uma só linha em branco, vejaos como funciona:
As barras invertidas podem não ser usadas se o seu vim estiver com a opção magic habilitada
Por acaso este é um padrão portanto tente usar assim pra ver se funciona

## Os atalhos

Para criar mapeamentos, precisamos conhecer a maneira de representar as teclas e combinações. Alguns exemplos:
Podemos fazer mapeamentos globais ou que funcionam em apenas um modo:
Mover linhas com Ctrl+(seta abaixo) ou Ctrl+(seta acima):
Salvando com uma tecla de função:
Convertendo as iniciais de um documento para maiúsculas

### Autocomandos

Autocomandos habilitam comandos automáticos para situações específicas. Se você deseja que seja executada uma determinada ação ao iniciar um novo arquivo o seu autocomando deverá ser mais ou menos assim:
Veja um exemplo:
No exemplo acima o vim aplica autocomandos para arquivos novos "BufNewFile" ou existentes "BufRead" do tipo 'txt' e para estes tipos carrega um arquivo de syntax, ou seja, um esquema de cores específico.
Para arquivos do tipo txt '*.txt' use um arquivo de syntax em particular
O autocomando abaixo coloca um cabeçalho para scripts 'bash' caso a linha 1 esteja vazia, observe que os arquivos em questão tem que ter a extensão .sh
Autocomando para arquivos python

## Fechamento automático de parênteses

Outra opção para fechamento de parênteses

## Destaque colorido para endereços IP

Referências: http://vim.wikia.com/wiki/Mathing_valid_IP_address

## Fechamento automático de Tags HTML

Agora basta escrever a sua tag e ao fechá-la com * aperte <Tab> para completar com seu respectivo fechamento.

## Data automática

Caso esta função esteja configurada corretamente, a cada salvamento do arquivo a data contida no cabeçalho será atualizada.

## Rolar outra janela

Se você dividir janelas tipo
pode colocar esta função no seu .vimrc
Esta função é acionada com o atalho 'alt' + setas acima e abaixo

## Função para numerar linhas

Adicione as linhas abaixo ao seu vimrc
Agora você pode fazer uma seleção visual
Pressionar 'j' até selecionar o trecho desejado e
O vim numerará o trecho selecionado à partir de 1 outro modo seria assim:
Só que deste modo ele numeraria todo o arquivo usando o atalho ,n

## Função para trocar o esquema de cores

baixe os esquemas aqui: http://nanasi.jp/old/colorscheme_0.html

## Miscelânea

Uma função para inserir cabeçalho de scrip bash para chamar a função basta pressionar, sh em modo normal
Função para inserir cabeçalhos python
" Ao editar um arquivo será aberto no último ponto em " que foi editado
Redimensionar janelas
Função para pular para uma linha qualquer

## Função para gerar backup

A função abaixo é útil para ser usada quando você vai editar um arquivo gerando modificações significativas, assim você poderá restaurar o backup se necessário
O atalho
em geral é a contrabarra "\" na dúvida

## Como adicionar o python ao path do vim?

* fonte: http://vim.wikia.com/wiki/Automatically_add_Python_paths_to_Vim_path
Coloque o seguinte script em:
* ~/.vim/after/ftplugin/python.vim (on Unix systems)
* $HOME/vimfiles/after/ftplugin/python.vim (on Windows systems)
Isto lhe permite usar 'gf' ou Ctrl-w Ctrl-F para abrir um arquivo sob o cursor

## Criando um menu

Como no vim podemos ter infinitos comandos fica complicado memorizar tudo é aí que entram os menus, podemos colocar nossos plugins e atalhos favoritos em um menu veja este exemplo
O comando acima diz:
Caso haja espaços no nome a definir você pode fazer assim

### Exemplo de menu

" cores
O comando
Atualiza o menu recem modificado.
Quando o comando
É usado sem nenhum argumento o vim mostra os menus definidos atualmente
Para listar todas as opções de menu para 'Plugin' por exemplo faça:

## Outros mapeamentos

Destaca espaços e tabs redundantes
Highlight redundant whitespace and tabs.
Explicando com detalhes
Portanto a expressão regular acima localizará espaços ou tabulações no final de linha e destacará em vermelho.
"Remove espaços redundantes no fim das linhas
Um detalhe importante
Se não fosse feito isto o cursor iria ficar na linha da última substituição!
" Função mais elaborada para remover expaços extras
Como uma função (visto acima) guardamos a posição do cursor (getpos) e a última busca efetuada (getreg) fazemos a deleção se houver de espaços extras (se não houver a opção "e" evita mensagens de erro e finalmente restauramos o registro de busca e posção do cursor, tudo isso encapsupsulado em uma função de nome "CleanExtraSpaces" que é então mapeada para ser chamada com "\c" ou executada automaticamente quando o arquivo for salvo
"Abre o vim-vim explorer

## Fazendo buscas e substituições

Podemos usar expressões regulares em buscas do Vim veja um exemplo para retirar todas as tags html
" Quebra a linha atual no local do cursor com F2
" join lines -- Junta as linhas com Shift F2

## Abreviações

Também no .vimrc você pode colocar abreviações, que são uma espécie de auto-texto para o vim
" Esta abreviação é legal para usar com o python

## Referências

* http://www.dicas-l.com.br/dicas-l/20050118.php