Tutoriais/Dicas Vim
De UnderLinux Wiki
Tabela de conteúdo |
Introdução
A primeira e grande dica é personalizar o arquivo de configuração do vim, nele podemos setar algumas coisas úteis, por exemplo se digito errado a palavra também, coloco em meu .vimrc a seguinte linha.
"Abreviações iab tambem também
Além das abreviações o vim pode numerar automaticamente as linhas, no .vimrc coloque:
"Settings set nu
Macros
No vim é possível gravar ações em macros, por exemplo:
Se você está em um ambiente hostil, tipo windows :) baixe o gvim:
ftp://ftp.vim.org/pub/vim/pc/gvim64.exe
Depois de instalado você pode editar multiplos arquivos de forma simples com uma macro. Veja:
No exemplo abaixo vou apagar a 5ª linha de todos os arquivos.
vim *.txt qa --> inicia a gravação de uma macro chamada "a" :5<enter> --> vai para a 5ª linha dd --> deleta :w<enter> --> salva o arquivo :bn<enter> --> vai para o próximo arquivo "buffer next" q --> encerra a gravação da macro "quit"
execute a macro com o comando:
@a
O vim irá apagar a 5ª linha do arquivo corrente, salvar e pular para o próximo, de acordo com a nossa soberana vontade.
Caso queira executar a macro "a" 100 vezes faça:
100@a
Mapeamentos
Você pode mapear uma tecla para executar uma fução, por exemplo salvar o arquivo corrente:
map <F9> <es>:w<cr>
mapeamento para exibir/ocultar numeração de linhas:
map <F11> <esc>:set nu!<cr>
Fechamento automático de parênteses
imap { {}<left>
imap ( ()<left>
imap [ []<left>
Nos mapemantos
<c-l>
É igual a
CTRL-l
pular fora dos parênteses, colchetes e chaves
" na verdade caminha para a direita 'l' e para esquerda 'h'
imap <c-l> <esc><right>a imap <c-h> <esc><left>a
Expressões regulares
O vim aceita expressões regulares em seus padrões de busca e substituição. Essa característica amplia seu poder. Veja exemplos: Inserindo número de linha dentro do arquivo
" %s/^/\=line('.'). ' '
Deletar linhas vazias em um arquivo
:%g/^$/d
trocando a posição de duas palavras, por exemplo:
Sobrenome: Araújo, Nome: Sérgio
:%s/\(Sobrenome: Araújo\)\(,\s\)\(Nome: Sérgio\)/\3\2\1/
Ficaria:
Nome: Sérgio, Sobrenome: Araújo
Sem o uso de Expressões Regulares você pode trocar o case de uma palavra e até do arquivo inteiro assim:
gguG
Usando expressões regulares pode-se fazer assim:
:%s/.*/\u&/g
Miscelânia
Data automática
Coloque no seu (.virmc - Linux) (_vimrc - windows)
" =============== DATA AUTOMÁTICA ===========================
" insira na em seus arquivos = "ultima modificação:"
" em qualquer das três primeiras linhas
fun! SetDate()
mark z
if getline(1) =~ ".*ultima modificação:" ||
\ getline(2) =~ ".*ultima modificação:" ||
\ getline(3) =~ ".*ultima modificação:" ||
\ getline(4) =~ ".*ultima modificação:" ||
\ getline(5) =~ ".*ultima modificação:"
exec "1,5s/\s*ultima modificação: .*$/ultima modificação: " .
strftime("%c") . "/"
endif
exec "'z"
endfun
"
" abaixo a chamada a função de data que é chamada toda vez que você
" salva um arquivo preexistente
"
fun! LastChange()
mark z
if getline(1) =~ ".*Last Change:" ||
\ getline(2) =~ ".*Last Change:" ||
\ getline(3) =~ ".*Last Change:" ||
\ getline(4) =~ ".*Last Change:" ||
\ getline(5) =~ ".*Last Change:"
exec "1,5s/\s*Last Change: .*$/Last Change: " . strftime("%c") . "/"
endif
exec "'z"
endfun
" coloquei duas opções (alteração e modificação), assim
" não tem perigo de você esquecer e o sistema
" não atualizar a data do salvamento, outra melhoria na função
" é que agora é válida para qualquer tipo de arquivo. se usar
" num html por exemplo insira um começo de comentário na linha
" da data e feche o comentário na próxima linha
"
" abaixo a chamada a função de data que é chamada toda vez que você
" salva um arquivo preexistente
"
au BufWritePre * call SetDate()
au BufWritePre * call LastChange()
"
"============ Fim da Data Automática ===================
Change Log
" === Cria um registro de alterações de arquivo ========
" ChangeLog entry convenience
" Função para inserir um status do arquivo
" cirado: data de criação, alteração, autor etc
fun! InsertChangeLog()
normal(1G)
call append(0, "Arquivo")
call append(1, "Criado: " . strftime("%a %d/%b/%Y hs %H:%M"))
call append(2, "ultima modificação: " . strftime("%a %d/%b/%Y hs %H:%M"))
call append(3, "Autor: Sérgio Luiz Araújo Silva - voyeg3r@gmail.com")
normal($)
endfun
" para inserir o change log digite ,cl
map ,cl :call InsertChangeLog()<cr>A
Veja também
* vimrc do Voyeg3r


