Escolar Documentos
Profissional Documentos
Cultura Documentos
Um guia simples, com exemplos de comandos para uso no dia-a-dia. A idia que este material cresa e torne-se uma referncia convel e prtica. este livro nos termos da Use
Licena de Documentao
Este trabalho est em constante aprimoramento, e fruto da colaborao de voluntrios. acesse o site do projeto no endereo: Participe do desenvolvimento enviando sugestes e melhorias;
http://code.google.com/p/vimbook
8 de Janeiro de 2009
Verso gerada em
Autores
<voyeg3r@gmail.com> <daaugusto@gmail.com>
. . .
Contedo
1 Introduo
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 Dicas iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ajuda integrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . Em caso de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . Como interpretar atalhos e comandos Entrando em modo de edio . . . . . . . . . . . . . . . Modos de operao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Erros comuns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
4 4 5 5 6 6 7 8
2 Movendo-se no documento
2.1 2.2 2.3 2.4 2.5 2.6 Big words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Os saltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Copiar e Deletar . . . . . . . . . . . . . . . . . . . . . . . . . . . Paginando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando marcadores . . . . . . . . . . . . . . . . . . . . . . . . . . Marcas globais . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9 10 10 12 13 13
3 Editando
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Deletando uma parte do texto . . . . . . . . . . . . . . . . . . . . Copiando sem deletar Lista de alteraes Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
14 15 15 16 16 17 17 17 18 18 18 18 18 18 19 20 20 21 21
3.10 Repetindo a digitao de linhas . . . . . . . . . . . . . . . . . . . 3.11 Movendo um trecho de forma inusitada 3.13 Desfazendo . . . . . . . . . . . . . . 3.12 Uma calculadora diferente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13.1 Undo tree . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.14 Salvando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.15 Usando marcas 3.16 Marcas globais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTEDO
3.17.2 Modelines . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.18 Edio avanada de linhas . . . . . . . . . . . . . . . . . . . . . . 22 22
4 Folders
4.1 4.2 4.3 Mtodos de dobras . . . . . . . . . . . . . . . . . . . . . . . . . . Manipulando dobras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Criando dobras usando o modo visual
24
24 25 25
5 Registros
5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 O registro sem nome . . . . . . . . . . . . . . . . . . . . . . . . Registros nomeados de 0 a 9 . . . . . . . . . . . . . . . . . . . . . Registro de pequenas delees . . . . . . . . . . . . . . . . . . . . Registros nomeados de a at z ou A at Z . . . . . . . . . . . Registros somente leitura : . % # . . . . . . . . . . . . . . . . . Registro de expresses . . . . . . . . . . . . . . . . . . . . . . . . Registros de arrastar e mover . . . . . . . . . . . . . . . . . . . . Registro buraco negro "_ . . . . . . . . . . . . . . . . . . . . . . Registros de buscas / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
26 27 27 27 27 28 28 28 28 29 29 29 30 30 30 31 32 32
5.14 Como colocar um pedao de texto em um registro? . . . . . . . . 5.15 Como criar um registro em modo visual? . . . . . . . . . . . . . . 5.16 Como denir um registro no vimrc? 5.18 Referncias . . . . . . . . . . . . . . . . 5.17 Como selecionar blocos verticais de texto? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 Buscas e substituies
6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 Usando Expresses Regulares em buscas . . . . . . . . . . . . . Editando em nova janela . . . . . . . . . . . . . . . . . . . . . . . inserindo linha antes e depois . . . . . . . . . . . . . . . . . . . . Obtendo informaes do arquivo Trabalhando com registradores Edies complexas Indentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
33 34 34 34 35 35 36 36 36 36 36 37 39 40 40 40 40 41 41
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.10 Selecionando ou deletando contedo de tags html . . . . . . . . . 6.11 Substituies 6.12 Exemplos 6.14 Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.15 Filtrando arquivos com o vimgrep 6.17 Dicas das lista vi-br
6.16 Copiar a partir de um ponto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.18 Dicas do dicas-l . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.19 Juno de linhas com Vim . . . . . . . . . . . . . . . . . . . . . .
5 43
43 43 43 44 44
8 Repetio de comandos
8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 Repetindo a digitao de uma linha . . . . . . . . . . . . . . . . Guardando trechos em registros . . . . . . . . . . . . . . . . . . Macros: gravando comandos . . . . . . . . . . . . . . . . . . . . . Repetindo substituies . . . . . . . . . . . . . . . . . . . . . . . Repetindo comandos . . . . . . . . . . . . . . . . . . . . . . . . . Scripts Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando o comando bufdo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Colocando a ltima busca em um comando Inserindo o nome do arquivo no comando
45
46 46 46 47 48 48 48 48 49 49 49
. . . . . . . . . . . . . . . . . . . .
9 Comandos externos
9.1 9.2 9.3 9.4 9.5 Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Removendo linhas duplicadas Ordenando e removendo linhas duplicadas no Vim 7 Referncias
50
50 50 51 51 51
Beautiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
52 53 53 54 55 55 55 56 57 57 57 58 58 58 59 59 60 60 60 60 61 61
. . . . . . . . . . . . . . . . . . . .
10.8.2 Funo para barra de status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.8.4 Funo para numerar linhas . . . . . . . . . . . . . . . . . 10.8.5 Funo para trocar o esquema de cores . . . . . . . . . . . 10.8.6 Uma funo para inserir cabealho de script . . . . . . . . 10.8.7 Funo para inserir cabealhos Python . . . . . . . . . . .
6
10.8.8 Funo para pular para uma linha 10.9 Como adicionar o Python ao 10.10Criando um menu
CONTEDO
. . . . . . . . . . . . . . . . . . . . . . . . . 62 62 63 63 64 64 64 65 66 66 10.8.9 Funo para gerar backup . . . . . . . . . . . . . . . . . .
path do Vim?
. . . . . . . . . . . . . . . . . . . . . . . . . .
10.11Criando menus para um modo especco . . . . . . . . . . . . . . 10.12Exemplo de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.13Outros mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . 10.14Complementao com tab 10.16Referncias . . . . . . . . . . . . . . . . . . . . . 10.15Abreviaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
67 68 68 68
69
69 69 70 70 71 71 71 72 72 72
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13 Plugins
13.1 Como testar um plugin sem instal-lo? . . . . . . . . . . . . . . .
73
73 74 74 74 74 74 75 75 75 75
AT X . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Plugin para L E AT X . . . . . . . . . . . . . . . . 13.3 Criando folders para arquivos L E A 13.4 Criando sees L T EX . . . . . . . . . . . . . . . . . . . . . . . . .
13.5 Plugin para manipular arquivos . . . . . . . . . . . . . . . . . . . 13.6 Complementao de cdigos . . . . . . . . . . . . . . . . . . . . . 13.7 Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.8 Um wiki para o Vim . . . . . . . . . . . . . . . . . . . . . . . . . 13.9 Acessando documentao do python no Vim . . . . . . . . . . . . 13.10Formatando textos planos com syntax . . . . . . . . . . . . . . .
14 Referncias
76
Captulo 1
Introduo
O Vim um editor extremamente congurvel, criado para permitir a edio de textos de forma eciente. Tambm um melhoramento do editor Vi, um tradicional programa dos sistemas Unix. Possui uma srie de mudanas em relao a este ltimo. O prprio slogan do Vim : Vi IMproved, ou seja, Vi Melhorado. O Vim to conhecido e respeitado entre programadores, e to til para programao, que muitos o consideram uma verdadeira IDE . Ele capaz de reconhecer mais de 500 sintaxes de linguagens de programao e marcao, possui mapeamento para teclas, macros, abreviaes, busca por
Expresses Regulares2 ,
4
mas GNU/Linux , mas pode ser tambm instalado em outros sistemas, como o Windows e o Macintosh. O site ocial do Vim :
http://www.vim.org.
1.1
Dicas iniciais
Ao longo do livro alguns comandos ou dicas podem estar duplicados, o que til devido ao contexto e tambm porque o aprendizado por saturao um timo recurso. Portanto se ver uma dica duplicada, antes de reclamar veja se j sabe o que est sendo passado! Para chamar o Vim digite num terminal:
vim meu_texto.txt
1.2
Ajuda integrada
O Vim possui uma ajuda integrada muito completa, so mais de 100 arquivos somando milhares de linhas. O nico inconveniente o idioma ingls se bem que muito do meu aprendizado de ingls se deve a este detalhe. Obs: no Vim
8
mado por h e assim por diante. Para chamar a ajuda do Vim: Pressione
Introduo
quase todos os comandos podem ser abreviados, no caso help pode ser cha-
<Esc>
e em seguida. . .
<F1>
Siga os links usando o atalho Ctrl-], e para voltar use Ctrl-O. Se voc estiver realmente desesperado, digite:
:help!
1.3
Em caso de erros
<Esc> .. para sair do modo de edio :e! .... recarrega o arquivo sem qualquer edio
Ou simplesmente inicie outro arquivo ignorando o atual
:enew!
ou saia do arquivo sem modica-lo
:q! .... sada forada, nada alterado :wq! ... tenta gravar e sair forado
1.4
A tecla <Ctrl> representada na maioria dos manuais e na ajuda pelo caractere ^ circunexo, ou seja, o atalho
^L
No arquivo de congurao do Vim, um <Enter> pode aparecer como:
<cr>
Para saber mais sobre como usar atalhos no Vim veja a seo 10.6.1 na pgina 55 e para ler sobre o arquivo de congurao veja o captulo 10 na pgina 52.
Em oposio esmagadora maioria dos editores o Vim um editor modal, o que a princpio diculta a vida do iniciante, mas abre um universo de possibilidades, pois ao trabalhar com modos distintos uma tecla de atalho pode ter vrios signicados, seno vejamos: Em modo normal pressionar duas vezes a letra d
dd
apaga a linha atual, j em modo de insero ele ir se comportar como se voc estivesse usando qualquer outro editor, ou seja, ir inserir duas vezes a letra d. Em modo normal pressionar a tecla v inicia uma seleo visual (use as setas de direo). Para sair do novo visual teclas de direo mais prticas
<Esc>,
k j
Imagine as letras acima como teclas de direo, a letra k uma seta acima a letra j uma seta abaixo e assim por diante.
1.6
a i A I o O
Agora comeamos a sentir o gostinho de usar o Vim, uma tecla seja maiscula ou minscula, faz muita diferena se voc no estiver em modo de insero, e para sair do modo de insero sempre use
<Esc>.
A tabela abaixo mostra uma referncia rpida para os modos de operao do Vim, a seguir mais detalhes sobre cada um dos modos.
Normal
fabeto, tambm possvel apagar linhas, e colocar trechos no buffer. Quando se inicia o Vim j estamos neste modo; caso esteja em outro modo basta pressionar <Esc>. Para acessar:
<Esc> ....... sai do modo de insero ^[ .......... Ctrl-[ tambm sai do modo de insero
Para ler mais sobre
buffers
veja o captulo 5.
Insero
5 No
pressionar a tecla i (
Neste modo feita a insero de texto. Para entrar neste modo basta
Para
10
Introduo
r<char> ...... onde char pode ser qualquer caractere
Para trocar caracteres de lugar faa:
i,a,I,A,o,O
exibido
Visual
um destaque visual. uma das melhores formas de se copiar contedo no Vim. Para acessar (a partir do modo normal):
seleo de caracteres seleo visual para as poximas 5 linhas (maisculo) - seleo de linhas inteiras Seleciona blocos de texto (use setas)
Comando
:w
ou para ir para uma linha qualquer:
:100 <Enter>
para acessar
1.7
Erros comuns
Estando em
tar rolar o documento usando a letra J, o efeito a juno das linhas, alis um timo recurso quando a inteno de fato esta.
e ten-
Em
modo normal
tentar digitar
e ao
perceber que nada est sendo digitado, iniciar o modo de insero, digitando por m o que se queria, o resultado que o nmero que foi digitado inicialmente vira um quanticador par o que se digitou ao entrar no modo de insero. A palavra aparecer repetida na quantidade do nmero digitado. assim: Assim, se voc quiser digitar 10 vezes isto
um teste
faa
<Esc> ........... se assegure de estar em modo normal 10 .............. quantificador i ............... entra no modo de insero isto um teste <Enter> <Esc>
1.8 Dicas
1.8 Dicas
11
Ctrl-O (comando)
Para repetir o ltimo trecho do modo de insero faa:
i Ctrl-a
Para repetir o ltimo comando
faa:
@:
Para inserir texto da rea de transferncia (caso esteja em modo de insero) faa:
Shift-insert
Para entrar em modo de edio no mesmo ponto da ltima edio
gi
Para repetir uma seleo (visual)
gv
Para saber mais sobre repetio de comandos veja o captulo 8, na pgina 45. No Vim cada arquivo aberto chamado de
buffer
na memria. Voc pode acessar o mesmo buer em mais de uma janela, bem como dividir a janela em vrios buers distintos o que veremos mais adiante.
Captulo 2
Movendo-se no documento
Antes de mergulharmos mais a fundo nas teclas e atalhos de movimentao vamos recapitular um pouco do que foi visto: Estando em modo normal
entra no modo de insero entra no modo de insero entra no modo de insero entra no modo de insero entra no modo de insero entra em modo de insero sai do modo de insero
antes do caractere atual no comeo da linha aps o caractere atual no final da linha uma linha abaixo uma linha cima
Uma vez no modo de insero todas as letras so, assim como nos outros editores simples letras, mas lebre-se a tecla mgica para sair do modo de insero :
<Esc>.
k j
Ou seja, a letra k usada para subir no texto, a letra j para descer, a letra h para mover-se para a esquerda e a letra l para mover-se para a direita. A idia que se consiga ir para qualquer lugar do texto sem tirar as mos do teclado.
2.1
Big words
tanto se voc usar, em modo normal w avanar entre as palavras ele pular a a-palavra-inteira :)
Para o Vim
palavras-separadas-por-hfen
uma de cada vez, no entanto se usar W em maisculo (como visto) ele pular
2.2 Os saltos
E .... pula para o final de palavras com hifen B .... pula palavras com hifen (retrocede) W .... pula palavras hifenizadas (comeo)
Para ir para linhas especcas digite
13
:n<Enter> ..... vai para linha ``n'' ngg ............ vai para linha ``n''
onde n corresponde ao nmero da linha. Para retornar ao modo normal pressione
<Esc>
ou use
Ctrl-[ (^[).
2.2
Os saltos
gg .... vai para o incio do arquivo G ..... vai para o final do arquivo 0 ..... vai para o incio da linha $ ..... vai para o final da linha yG .... copia da linha atual at o final do arquivo 25gg .. salta para a linha 25 '' .... salta para a linha da ltima posio em que o cursor estava fx .... para primeria ocorrncia de x tx .... Para ir para uma letra antes de x Fx .... Para ir para ocorrncia anterior de x Tx .... Para ir para uma letra aps o ltimo x * ..... Prxima ocorrncia de palavra sob o cursor % ..... localiza parnteses correspondente `' .... salta exatamente para a posio em que o cursor estava d$ .... deleta do ponto atual at o final da linha gi .... entra em modo de insero no ponto da ltima edio gv .... repete a ltima seleo visual e posiciona o cursor neste local gf .... abre o arquivo sob o cursor gd .... salta para declarao de varivel sob o cursor gD .... salta para declaraao (global) de varivel sob o cursor w ...... move para o incio da prxima palavra W ...... pula para prxima palavra (desconsidera hfens) E ...... pula para o final da prxima palavra (desconsidera hifens) e ...... move o cursor para o final da prxima palavra zt ..... movo o cursor para o topo da pgina zm ..... move o cursor para o meio da pgina
2.3
Copiar e Deletar
dd .... deleta linha atual D ..... deleta restante da linha
Dica: Voc pode combinar o comando de deleo d com o comando de movimento (considere o modo normal) para apagar at a prxima vrgula use: df,.
14
Copiar est associado letra y.
Movendo-se no documento
5j ..... d5j .... k ...... 5k ..... y5k .... w ...... 5w ..... d5w .... b ...... 5b ..... fx ..... dfx .... d5j .... dgg .... dG ..... yG ..... yfx .... y5j ....
desce 5 linhas deleta as prximas 5 linhas em modo normal sobe uma linha sobe 5 linhas copia 5 linhas (para cima) pula uma palavra para frente pula 5 palavras deleta 5 palavras retrocede uma palavra retrocede 5 palavras posiciona o cursor em ``x'' deleta at o prximo ``x'' deleta 5 linhas deleta da linha atual at o comeo do arquivo deleta at o final do arquivo copia at o final do arquivo copia at o prximo ``x'' copia 5 linhas
pula uma sentena para frente pula uma sentena para trz pula um pargrafo para frente pula um pargrafo para trz copia uma sentena para frente deleta um pargrafo para frente
p .... cola o que foi copiado ou deletado abaixo P .... cola o que foi copiado ou deletado acima
Caso tenha uma estrutura como abaixo:
pot
pot
gd
Se a varivel for global, ou seja, estive fora do documento (provavelmente em outro) use:
2.4 Paginando
gD
Quando denimos uma varivel tipo
15
var = `teste'
e em algum ponto do documento houver referncia a esta varivel e quiser-mos ver seu contedo fazemos
[i
Na verdade o atalho acima lhe mostrar o ltimo ponto onde foi feita a atribuio quela varivel que est sob o cursor, uma mo na roda para os programadores de planto! Obs: observe a barra de status do Vim se o tipo de arquivo est certo, tipo. Para detalhes sobre como personalizar a barra de status na seo
??.
ft=python
a busca por denies de funo s funciona se o tipo de arquivo estiver correto
:set ft=python
outro detalhe para voltar ao ltimo ponto em que voc estava
''
2.4
Paginando
Ctrl-f Ctrl-b :h jumps .... ajuda sobre a lista de saltos :jumps ...... exibe a lista de saltos Ctrl-i ... salta para a posio mais recente Ctrl-o ... salta para a posio mais antiga
Observao: lembre-se
^o
Avanar na lista de saltos
^i
Abrir o ltimo arquivo editado:
16
'0
Abrir o penltimo arquivo editado
Movendo-se no documento
'1
Para pular para uma denio de funo (para mais detalhes veja :h gd)
gd
Para pular para o m do pargrafo faa
}
Para pular para a coluna 10 da linha atual
10|
Pular para denio de uma varivel
[i
O atalho acima til quando se est programando, se estiver num trecho de cdigo pode visualizar o contedo das variveis que foram denidas acima Voc pode abrir vrios arquivos tipo
*.txt
:wn
Ou gravar um arquivo e voltar ao anterior
:wp
Pode ainda rebobinar sua lista de arquivos :)
:rew[wind]
Ou ir para o primeiro
:fir[ist]
2.5
Usando marcadores
No Vim podemos marcar o ponto em que o cursor est, voc deve estar em modo normal, portanto pressione
<Esc>
voc estar em modo normal, assim podem pressionar a tecla m seguida de uma das letras do alfabeto
ma ....... cria uma marca 'a' `a ....... move o cursor para a marca 'a'
2.6
Marcas globais
Marcas globais so marcas que permitem pular de um arquivo a outro. Para criar uma marca global use a letra que designa a marca em maisculo.
Captulo 3
Editando
Que tal abrir um arquivo j na linha 10 por exemplo?
3.1
apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga
o caractere sob o cursor os prximos 5 caracteres a linha atual 5 linhas (tambm pode ser: d5d) uma palavra 5 palavras (tambm pode ser: d5w) uma letra (sinnimo: x) 5 letras (tambm pode ser: d5l ou 5x) at o incio da linha at o primeiro caractere da linha at o final da linha (sinnimo: D) at o incio do arquivo at o final do arquivo o resto da linha
Depois do texto ter sido colocado na memria, digite `p' para `inserir' o texto em uma outra posio. Outros comandos:
diw .. apaga palavra mesmo que no esteja posicionado no incio dip .. apaga o pargrafo atual ..
18
d4b .. apaga as quatro palavras anteriores dfx .. apaga at o prximo ``x'' d/casa/+1 - deleta at a linha aps a palava casa
Se voc trocar a letra `d' nos comandos acima por `c' de
Editando
change
mudana ao
3.2
O comando y yank permite copiar uma parte do texto para a memria sem deletar. Existe uma semelhana muito grande entre os comandos y e os comandos d:
yy .... 5yy .... y/pat .. yw .... 5yw .... yl .... 5yl .... y^ .... y$ .... ygg .... yG ....
copia copia copia copia copia copia copia copia copia copia copia
a linha atual (sinnimo: Y) 5 linhas (tambm pode ser: y5y ou 5Y) at `pat' uma palavra 5 palavras (tambm pode ser: y5w) uma letra 5 letras (tambm pode ser: y5l) da posio atual at o incio da linha (sinnimo: y0) da posio atual at o final da linha da posio atual at o incio do arquivo da posio atual at o final do arquivo
Digite P (p maisculo) para colar o texto recm copiado na posio onde encontra-se o cursor, ou p para colar o texto na posio imediatamente aps o cursor.
vip .... adiciona seleo visual ao pargrafo atual 'inner paragraph' yip .... copia o pargrafo atual yit .... copia a tag agual `inner tag' til para arquivos html xml
3.3
Lista de alteraes
g,
O Vim mantm uma lista de alteraes, para avanar nas alteraes use
g;
Para visualizar a lista de alteraes
:changes
Para mais detalhes
:h changes
19
O Vim como qualquer outro editor muito exigente no que se refere a alteraes de arquivo. Se voc estiver editando um arquivo e desejar abandona-lo, o Vim perguntar se quer salvar alteraes, se voc estiver certo de que no quer salvar o arquivo atual e deseja imediatamente comear a editar um novo arquivo faa:
:enew!
O comando acima uma abreviao de
edit new
:e!
3.5
plicadas
Ordenando
O Vim 7 passa a ter um comando de ordenao que tambm retira linhas du-
:sort u ... ordena e retira linhas duplicadas :sort n ... ordena numericamente
Obs: a ordenao numrica diferente da ordenao alfabtica se em um trecho contendo algo como:
8 9 10 11 12
Voc tentar fazer:
:sort
O Vim colocar nas trs primeiras linhas
10 11 12
Portanto lembre-se que se a ordenao envolver nmeros use:
:sort n
Voc pode fazer a ordenao em um intervalo assim:
:1,15 sort n
O comando acima diz: Ordene numericamente da linha 1 at a linha 15
20
3.6 Removendo linhas duplicadas
:sort u
Editando
3.7
:10,20m $
O comando acima move (`m') da linha 10 at a linha 20 para o nal
$.
:g /palavra/ m 0
Move as linhas contendo 'palavra' para o comeo (linha zero)
:10,20y a
Copia da linha `10' at a linha `20' para o registro `a'
:56pu a
Cola o registro `a' na linha 56
:g/padro/d
O comando acima deleta todas as linhas contendo a palavra `padro' Podemos inverter a lgica do comando global
g:
:g!/padro/d
No delete as linhas contendo padro, ou seja, delete tudo menos as linhas contendo a palavra `padro'. Para ler mais sobre o comando global utilizado nesta seo veja o captulo 6.13.
:7,10copy $
Da linha 7 at a linha 10 copie para o nal Veja mais sobre edio no modo de comando na seo 6 Buscas e substituies.
3.8
O arquivo alternativo
muito comum voc editar um arquivo no Vim, e inocentemente imaginar que no vai mais modicar qualquer coisa nele, voc ento abre um novo arquivo:
:e novo-arquivo.txt
Mas no mais que de repente voc lembra Poxa eu queria colocar mais uma linha no arquivo em que estava Para estes casos use o atalho
Ctrl-6
Dica: Este comando booleano, ou seja, cada vez que voc pressionar o atalho ele pula para o ltimo arquivo editado!
21
3.10
Para saber mais sobre repetio de comandos veja o captulo 8, na pgina 45.
3.11
:20,30m 0 ..... move da linha `20' at `30' para o comeo :20,/pat/m 5 .. move da linha `20' at `pat' para a linha 5
3.12
Ctrl-r= Ctrl-r=5*850
3.13
Desfazendo
u ............ desfazer U ............ desfaz mudanas na ltima linha editada Ctrl-r ...... refazer
Para mais ajuda sobre desfazer:
:help undo
3.13.1 Undo tree
Um novo recurso muito interessante foi adicionado ao Vim a partir da verso 7 a chamada rvore do desfazer. Se voc desfaz alguma coisa, fez uma alterao um novo
branch ou galho, derivao de alterao criado. Basicamente, branches nos permitem acessar quaisquer alteraes ocorrida no arquivo.
os
22 Um exemplo didtico
Siga estes passos (para cada passo
Editando
<Esc>,
Passo 4 Passo 5
Passo 6
- na linha 3 digite
<Esc>
Esc
cada insero uma ao. Agora usando o atalho de desfazer tradicional u e de
adas. Em resumo, se voc zer uma nova alterao aps um desfazer (alterao derivada) o comando refazer no mais vai ser possvel para aquele momento. Agora volte at a alterao 1 e use seguidas vezes:
g+
e / ou
3.14
Salvando
:w
Para especicar um novo nome para o arquivo, simplesmente digite
23
O contedo ser gravado no arquivo le e voc continuar no arquivo original. Tambm existe o comando
:saveas nome
salva o arquivo com um novo nome e muda para esse novo arquivo (o arquivo original no apagado). Para sair do editor, salvando o arquivo atual, digite :x (ou :wq).
:w ............................ :w 'novonome' ................. :wq .......................... :saveas nome .................. :x ............................ :10,20 w! ~/Desktop/teste.txt . :w! ........................... :e! ...........................
Para maiores informaes, digite:
salva salvar como salva e sai' salvar como salva se existirem modificaes sava um trecho para outro arquivo salvamento forado reinicia a edio ignorando alteraes
:help writing
3.15
Usando marcas
As marcas so um meio eciente de se pular para um local no arquivo. Para criar uma, estando em modo normal faa:
ma
Onde m indica a criao de uma marca e a o nome da marca. Para pular para a marca a faa:
`a
Para voltar ao ponto do ltimo salto
''
Para deletar de at a marca a (em modo normal)
d'a
3.16
Marcas globais
Durante a edio de vrios arquivos dena uma marca global com o comando
mA
Onde m cria a marca e A (maisculo) dene uma marca A acessvel a qualquer momento com o comando
24
'A
Editando
Isto far o Vim dar um salto at a marca A mesmo que esteja em outro arquivo, bastando apenas que o mesmo esteja aberto. soluo seria: Para abrir vrios arquivos uma
vim *.txt
Para ir para o prximo arquivo:
:bn
Para ir para o arquivo anterior
:bp
Caso existam modicaes no arquivo voc ter que usar t
:wn
O comando acima diz: grave e v para o prximo!
3.17
(
Dicas extras
Para manipular vrios arquivos voc pode mudar de buer (arquivo) salvando
write next).
:wn
3.17.1
O Vim guarda um registro para cada arquivo editado veja mais no captulo 5 na pgina 26.
'0 ........ abre o ltimo arquivo editado '1 ........ abre o penltimo arquivo editado Ctrl-6 .... abre o arquivo alternativo (booleano)
Bom, j que abrimos o nosso ltimo arquivo editado com o comando
`0
podemos, e provavelmente o faremos, editar no mesmo ponto em que estvamos editando da ltima vez
gi
Na seo 6 voc encontra mais dicas de edio!
25
So um modo de guardar preferncias no prprio arquivo, suas preferncias viajam literalmente junto com o arquivo, basta usar em uma das 5 primeiras linhas ou na ltima linha do arquivo algo como:
# vim:ft=sh:
OBS: Voc deve colocar um espao entre a palavra `vim' e a primeira coluna, ou seja, a palavra `vim' deve vir precedida de um espao, da em diante cada opo ca assim:
:opo:
Por exemplo: posso salvar um arquivo com extenso indicar no
.sh
e dentro do mesmo
# vim:ft=txt:nu:
Apesar de usar a extenso `sh' o Vim reconhecer este arquivo como `txt', e caso eu no tenha habilitado a numerao, ainda assim o Vim usar por causa da opo `nu'. Portanto o uso de seu dia-a-dia pois voc pode coloca-las dentro dos comentrios!
3.18
1 2 3 4 5 6 7 8 9 10
este este este este este este este este este este
um um um um um um um um um um
texto texto texto texto texto texto texto texto texto texto
novo novo novo novo novo novo novo novo novo novo
Suponha que queira-se apagar um texto da linha 5 at o m (linha 10). Isto pode ser feito assim:
indica o intervalo que da linha 5 at o fim ``$'' executa em modo normal move o cursor para o comeo da linha pula uma palavra apaga 3 palavras ``w''
26
Obs: claro que um comando de substituio simples
Editando
:5,$s/ um texto//g
Resolveria neste caso, mas a vantagem do mtodo anterior que vlido para trs palavras, sejam quais forem. Tambm possvel empregar comandos de insero (como ao modo normal, bastando para isso usar o recurso simular o acionamento da tecla
Esc
Ctrl-v Esc,
ou
a)
e retornar
de forma a para
este
:5,$ .... normal .. 0 ....... 2w ...... i ....... no .... ^[ ...... $ ....... ciw ..... velho ...
A combinao
indica o intervalo que da linha 5 at o fim ``$'' executa em modo normal move o cursor para o comeo da linha pula duas palavras (vai para a palavra "") entra no modo de insero insere a palavra "no" seguida de espao " " sai do modo de insero (atravs de Ctrl-v seguido de Esc) vai para o fim da linha apaga a ltima palavra ("novo") e entra em modo de insero insere a palavra "velho" no lugar de "novo"
utilizada para inserir caracteres de controle na sua
Ctrl-v
Captulo 4
Folders
Folders so como dobras nas quais o Vim esconde partes do texto, algo assim:
+-- 10 linhas --------------------------Deste ponto em diante chamaremos os
dobras! Quando tiver que manipular grandes quantidades de texto tente usar dobras, isto permite uma visualizao completa do texto. Um modo de entender rapidamente como funcionam as dobras no Vim seria criando uma dobra para as prximas 10 (dez) linhas com o comando abaixo:
zf10j
Voc pode ainda criar uma seleo visual
4.1
Mtodos de dobras
fold, so eles:
Sintaxe (
syntax) indent)
marker)
:set foldmethod=tipo
onde o tipo pode ser um dos tipos listados acima, exemplo:
:set foldmethod=marker
28
do seu arquivo algo assim:
Folders
Outro modo para determinar o mtodo de dobra seria colocando na ltima linha
vim:fdm=marker:fdl=0:
Obs:
fdm
signica
foldmethod,
fdl
signica
foldlevel.
entre a palavra inicial vim e o comeo da linha este recurso chama-se leia mais na seo 3.17.2 modelines na pgina 22.
modeline,
4.2
Manipulando dobras
zo .......... zO .......... za .......... zA .......... zR .......... zc .......... zC .......... zfap ........ zf/casa ..... zf'a ........ zd .......... zj .......... zk .......... [z .......... ]z .......... zi .......... zm, zr ...... :set fdl=0 .. abre a dobra abre a dobra, recursivamente abre/fecha (alterna) a dobra abre/fecha (alterna) a dobra, recursivamente abre todas as dobras do arquivo atual fecha uma dobra fecha a dobra abaixo do cursor, recursivamente cria uma dobra para o pargrafo `ap' atual cria uma dobra at a palavra casa cria uma dobra at a marca `a' apaga a dobra (no o seu contedo) move para o incio da prxima dobra move para o final da dobra anterior move o cursor para incio da dobra aberta move o cursor para o fim da dobra aberta desabilita ou habilita as dobras diminui/aumenta nvel da dobra 'fdl' nvel da dobra 0 (foldlevel) .vimrc
- veja 10.
Para abrir e fechar as dobras usando a barra de espaos coloque o trecho abaixo no seu arquivo de congurao do Vim
4.3
vai para o modo normal inicia seleo visual aumenta a seleo visual (desce) cria a dobra na seleo ativa
Shift-v ..... inicia seleo visual /chapter/-2 . extende a seleo at /chapter -2 linhas zf .......... cria a dobra
Captulo 5
Registros
O Vim possui nove tipos de registros, cada tipo tem uma utilidade especca, por exemplo voc pode usar um registro que guarda o ltimo comando digitado, pode ainda imprimir dentro do texto o nome do prprio arquivo, vamos aos detalhes.
O registro sem nome 10 registros nomeados de 9 O registro de pequenas delees 26 registros nomeados de z ou de Z 4 registros somente leitura O registro de expresses "= Os registro de seleo e "*, "+ and " O registro o Registro do ltimo padro de busca "/
5.1
deleo substituio um outro tipo de modificao apaga um caractere copia uma linha inteira
Para acessar o contedo deste registro basta usar as letras p ou P que na verdade so comandos para colar abaixo da linha atual e acima da linha atual (em modo normal)
30
5.2 Registros nomeados de 0 a 9
Registros
O registro zero armazena o contedo da ltima cpia 'yy', partir do registro 1 vo sendo armazenadas as delees sucessivas de modo que a mais recente deleo ser armazenada no registro 1 e os registros vo sendo incrementados em direo ao nono. Deleo menores que uma linha no so armazenadas nestes registros, caso em que o Vim usa o registro de pequenas delees ou que se tenha especicado algum outro registro.
:help registers
5.3
Quando voc deleta algo menor que uma linha o Vim armazena os dados deletados neste registro.
5.4
Registros nomeados de a at z ou A at Z
"ayy
Desse modo voc guardou o contedo da linha no registro a caso queira armazenar mais uma linha no registro a use este comando
"Add
Neste outro caso apaguei a linha corrente adicionando-a ao nal do registro a.
copia o pargrafo atual para o registro ``a'' registro a yank (copia) inner paragraph (este pargrafo)
5.5
Ctrl-a
31
5.7
O registro
"*
responsvel por armazenar o ltimo texto selecionado (p.e., atravs do mouse). J o registro
"+
o denominado rea de transferncia, normalmente utilizado para se transferir contedos entre aplicaeseste registro preenchido, por exemplo, usando-se a tpica combinao registro
Ctrl-v
Finalmente, o
"~
and-drop).
5.8
drag-
Use este registro quando no quiser alterar os demais registros, por exemplo: se voc deletar a linha atual,
dd
Esta ao ir colocar a linha atual no registro numerado 1, caso no queira alterar o contedo do registro 1 apague para o buraco negro assim:
"_dd
5.9
Se desejar inserir em uma substituio uma busca prvia, voc poderia fazer assim em modo de comandos:
:%s,<Ctrl-r>/,novo-texto,g
Observao: veja que estou trocando o delimitador da busca para deixar claro o uso do registro de buscas /
32
5.10 Manipulando registros
@a=@_ @a=``'' @a=@" @*=@a @*=@: @*=@/ @*=@% : : : : : : : :
Registros
limpa o registro a limpa o registro a salva registro sem nome *N* copia o registro para o buffer de colagem copia o ultimo comando para o buffer de colagem copia a ltima busca para o buffer de colagem copia o nome do arquivo para o buffer de colagem mostra o contedo de todos os registros
Em modo de insero
: : : :
o registro de pequenas delees registros 0-9 e a-z o nome do arquivo o contedo de uma varivel n.
~/.vimrc
let @n=@%
Como foi atribudo ao registro
Ctrl-r n
E o nome do arquivo ser inserido
5.11
Digitando o comando
:reg
ou ainda
:ls
O Vim mostrar os registros numerados e nomeados atualmente em uso
5.12
vim *.txt
Para listar os arquivos aberto faa:
:buffers
:buf 3
Para editar arquivos em sequncia faa as alteraes no arquivo atual e acesso o prximo assim:
:wn
O comando acima diz
`grave' --> w
e prximo
`next' --> n
5.13
:sn
O comando acima uma abreviao de
5.14
<Esc> ...... vai para o modo normal "a10j ...... coloca no registro `a' as prximas 10 linhas `10j'
Para usar voc pode:
<Esc> ...... para ter certeza que est em modo normal "ap ........ registro a `paste', ou seja, cole
Em modo de insero faa:
Ctrl-r a
5.15
"ay
pressione v para sair do modo visual
34
5.16 Como denir um registro no vimrc?
Registros
Se voc no sabe ainda como editar preferncias no Vim leia antes o captulo 10. Voc pode criar uma varivel no vimrc assim:
let var="foo" ...... define foo para var echo var ........... mostra o valor de var
Pode tambm dizer ao Vim algo como...
:let @d=strftime("c")<Enter>
Neste caso estou dizendo a ele que guarde na varivel `d' at d, o valor da data do sistema `strftime(c)' ou ento cole isto no vimrc:
let @d=strftime("c")<cr>
A diferena entre digitar diretamente um comando e adiciona-lo ao vimrc que uma vez no vimrc o registro em questo estar sempre disponvel, observe tambm as sutis diferenas, um
Enter
indicao de uma ao que voc far pressionando a tecla especicada, j o comando mapeado vira <cr>, veja ainda que no vimrc os dois pontos : somem. Pode mapear tudo isto
" d=dia m=mes Y=ano H=hora M=minuto c=data-completa :h strftime ........ ajuda completa sobre o comando
e inserir em modo normal assim:
"dp
ou usar em modo de insero assim
Ctrl-r d
35
Ctrl-v
agora use as letras h,l,k,j como setas de direo at nalizar podendo guardar a seleo em um registro que vai de a a z exemplo:
"ay
Em modo normal voc pode fazer assim para guardar um pargrafo inteiro em um registro
"ayip
O comando acima quer dizer
para o registro ``a'' ...... "a copie ...................... ``y'' o pargrafo atual .......... ``inner paragraph''
5.18
Referncias
Captulo 6
Buscas e substituies
Para fazer uma busca, certique-se de que est em modo normal, pressione / e digite a expresso a ser procurada. Para encontrar a primeira ocorrncia de foo no texto:
/foo
Para repetir a busca basta pressionar a tecla n e para repetir a busca em sentido oposto N.
/teste/+3
Posiciona o cursor trs linhas aps a ocorrncia da palavra teste
6.1
http://guia-er.sourceforge.net
2. :help regex
37
Um meio mais rpido para encontrar a prxima ocorrncia de uma palavra sob
#.
*.
deseja procurar.)
6.2
Caso deseje manter o arquivo atual e editar 'simultaneamente' outro arquivo pode dividir a janela assim:
Ctrl-w n
Para mais detalhes sobre janelas acesse o captulo 7 na pgina 43.
6.3
Estava editando este livro que voc est lendo e queria que as linhas indentadas passassem a ter uma linha em branco antes e depois, assim cheguei a este resultado:
:map ,t <Esc>:.s/^\(\s\+\)\(.*\)/\r\1\2\r/g<cr>
Explicando:
s/isto/aquilo/g .. substitui isto por aquilo : ........... modo de comando (no coloquei no vimrc) map ,t ....... mapeia ,t para a funo desejada <Esc> ........ ao executar sai do modo de insero : ........... inicia o modo de comando . ........... na linha corrente s ........... substitua ^ ........... comeo de linha \s\+ ........ um espao ou mais (barras so escapes) .* ........... qualquer coisa depois \(grupo\) .... agrupo para referenciar com \1 \1 ........... repete na substituio o grupo 1 \r ........... insere uma quebra de linha g ............ em todas as ocorrncias da linha <cr> ......... Enter
6.4
Obs: O cdigo do caractere pode ser usado para substituies, especialmente em se tratando de caracteres de controle como tabulaes ^I ou nal de liDos/Windows usando uma simples substituio, veja mais adiante: nha DOS/Windows \%x0d. Voc pode apagar os caracteres de nal de linha
38
:%s/\%x0d//g
Buscas e substituies
Na seo 10 h um cdigo para a barra de status que faz com que a mesma exiba o cdigo do caractere sob o cursor na seo
??.
6.5
Voc no precisa copiar e colar diferentes partes do texto para uma mesma rea de transferncia. Para isso, voc pode usar os registros. Os registradores so indicados por aspas seguido por uma letra. Exemplos: a, b, c, etc. Como copiar o texto para um registrador? simples: basta especicar o nome do registrador antes:
"add ... "bdd ... "ap .... "ab .... "x3dd .. "ayy .. "a3yy .. "ayw .. "a3yw ..
uma linha, copiando seu contedo para o registrador a uma linha, copiando seu contedo para o registrador b o contedo do registrador a o contedo do registrador b 3 linhas, copiando o contedo para o registrador ``x'' uma linha, sem apagar, para o registrador a 3 linhas, sem apagar, para o registrador a uma palavra, sem apagar, para o registrador a 3 palavras, sem apagar, para o registrador a
No modo de insero, como visto anteriormente, voc pode usar um atalho para colar rapidamente o contedo de um registrador.
Ctrl-r (registro)
Para colar o contedo do registrador a
Ctrl-r a
Para copiar a linha atual para a rea de transferncia
"+yy
Para colar da rea de transferncia
"+p
6.6
digite:
Edies complexas
a palavra e
deep
Trocando letras de lugar:
xp
Trocando linhas de lugar:
ddp
Tornando todo o texto maisculo gggUG
6.7 Indentando
6.7 Indentando
>> ..... ^T ..... ^D ..... >ip .... Indenta a linha atual Indenta a linha atual em modo de insero Remove indentao em modo de insero indenta o pargrafo atual
39
6.8
vip ..... visual ``h'' (selecione este pargrafo) = ....... corrija a indentao do que selecionei :)
6.9
vim .
Use o j para descer e o k para subir ou Enter para editar o arquivo selecionado. Outra dica pressionar F1 ao abrir o FileExplorer do Vim, voc encontra dicas adicionais sobre este modo de operao do Vim.
6.10
<tag> contedo da tag </tag> basta usar (em modo normal) as teclas vit ............... visual ``inner tag | esta tag''
Este recurso tambm funciona com parnteses
vi( ..... visual select vi" ..... visual select di( ..... delete inner (, ou seja, seu contedo
6.11
Substituies
Para fazer uma busca, certique-se de que est em modo normal, em seguida digite use o comando s, conforme ser explicado. Para substituir foo por bar na linha atual:
:s/foo/bar
Para substituir o por r da primeira dcima linha do arquivo:
:1,10 s/foo/bar
40
Buscas e substituies
:1,$ s/foo/bar
Ou simplesmente:
:% s/foo/bar $ ... significa para o Vim final do arquivo % ... representa o arquivo atual
O comando s possui muitas opes que modicam seu comportamento.
6.12
Exemplos
/end\(if\|while\|for\) \|
Buscar if , while e for. Observe que necessrio `escapar' os caracteres e
\),
\(,
* Quebra de linha
/quebra\nde linha
* Ignorando maisculas e minsculas
/\cpalavra
Usando
\c
o Vim encontrar
palavra, Palavraa
ou at mesmo
PALAVRA.
Uma dica colocar no seu arquivo de congurao vimrc veja o captulo 10.
ignora maisculas e minsculas na bucsca se busca contiver maisculas ele passa a consider-las mostra o que est sendo buscado em cores ativa a busca incremental
se voc no sabe ainda como colocar estas preferncias no arquivo de congurao pode ativa-las em modo de comando precedendo-as com dois pontos, assim:
:set ignorecase<Enter>
Procurando palavras repetidas
/\<\(\w*\) \1\>
Multilinha
/Hello\_s\+World
Buscar `World', separado por qualquer nmero de espaos, incluindo quebras de linha. Buscar as trs seqncias:
6.12 Exemplos
Hello World Hello Hello World
* Buscar linhas de at 30 caracteres de comprimento
41
World
:%s/<[^>]*>//g
* Apaga linhas vazias
:%g/^$/d
Ou
:%s/^[\ \t]*\n//g
* Remover duas ou mais linhas vazias entre pargrafos diminuindo para uma s linha vazia.
:%s/\(^\n\{2,}\)/\r/g
Voc pode criar um mapeamento e colocar no seu /.vimrc
map ,s <Esc>:%s/\(^\n\{2,}\)/\r/g<cr>
No exemplo acima, ,s um mapeamento para reduzir linhas em branco sucessivas para uma s Remove no dgitos (no pega nmeros)
:%s/^\D.*//g
Remove nal de linha DOS/Windows 0d
^M
:%s/\%x0d//g
Troca palavras de lugar usando expresses regulares
:%s/\(.\+\)\s\(.\+\)/\2 \1/
Modicando todas as tags html para minsculo
:%s/<\([^>]*\)>/<\L\1>/g
Move linhas 10 a 12 para alm da linha 30
:10,12m30
42
6.13 O comando global g
Buscas e substituies
:g/^Error/ copy $
Obs: O comando mais detalhes leia
copy pode ser abreviado `co' ou ainda voc pode usar `t' para
:h co
Entre as linhas que contiverem fred e joe substitua
:g/fred/,/joe/s/isto/aquilo/gic
As opes `gic' correspondem a tidas deixando s o
global.
conrm,
:g/^\d\+.*/m $
Inverter a ordem das linhas do arquivo?
:g/^/m0
Apagar as linhas que contm
Line commented
:g/Line commented/d
Copiar determinado padro para um registro
:g/padro/;+1 copy $
6.14 Dicas
6.14 Dicas
43
:%s/Ctrl-r//novo/g
A dupla barra corresponde ao ultimo padro procurado, e portanto o comando abaixo far a substituio da ultima busca por casinha
:%s//casinha/g
6.15
Por vezes sabemos que aquela anotao foi feita, mas no momento esquecemos em qual arquivo est, no exemplo abaixo procuramos a palavra dicas partir da nossa pasta pessoal pela palavra 'dicas' em todos os arquivos com extenso `txt'.
6.16
:19;+3 co $
O Vim sempre necessita de um intervalo (inicial e nal) mas se voc usar ; ele considera a primeira linha como segundo ponto do intervalo, e no caso acima estamos dizendo (nas entrelinhas) linhas 19 e 19+3 De forma anloga podemos usar como referncia um padro qualquer
:/palavra/;+10 m 0
O comando acima diz: partir da linha que contm palavra incluindo as 10 prximas linhas mova m para a primeira linha 0, ou seja, antes da linha 1.
6.17
Fonte:
Problema: Essa deve ser uma pergunta comum. Suponha o seguinte contedo de arquivo:
... // vrias linhas texto1000texto // texto1000texto // texto1000texto // texto1000texto // texto1000texto // ... // vrias linhas
44
Gostaria de um comando que mudasse para
Buscas e substituies
... // vrias linhas texto1001texto // texto1002texto // texto1003texto // texto1004texto // texto1005texto // ... // vrias linhas
range as linhas i,i+4
:10,20! awk 'BEGIN{i=1}{if (match($0, ``+'')) print ``o'' (substr($0, RSTART, RLENGTH) + i++) ``o'``}''
Mas muitos sistemas no tem awk, e logo a melhor soluo mesmo usar o Vim:
6.18
fonte:
Dicas do dicas-l
http://www.dicas-l.com.br/dicas-l/20081228.php
6.19
Colaborao: Rubens Queiroz de Almeida Recentemente precisei combinar, em um arquivo, duas linhas consecutivas. O arquivo original continha linhas como:
:g/^Matrcula/s/\n/ - /
Explicando:
45
Captulo 7
Trabalhando com janelas
O Vim trabalha com o conceito de mltiplos buers. Cada buer um arquivo carregado para edio. Um buer pode estar visvel ou no, e possvel dividir a tela em janelas, de forma a visualizar mais de um buer simultaneamente.
7.1
Dividindo a janela
Ctrl = ^ Divide a janela atual em duas (:split) Faz a janela atual ser a nica (:only) ^wo
lembre-se de salvar tudo
Observao:
Ctrl-w-s Ctrl-w-o
Caso tenha duas janelas e use o atalho acima carregado, portanto faa:
ao fechar, pois apesar de a outra janela estar fechada o arquivo ainda estar
:wall ... salva todos `write all' :qall ... fecha todos `quite all'
7.2
7.3
Manipulando janelas
Ctrl-w-w Ctrl-w-j Ctrl-w-k Ctrl-w-r Ctrl-w-+ Ctrl-w-... ... ... ... ... ... Alterna entre janelas desce uma janela `j' sobe uma janela `k' Rotaciona janelas na tela Aumenta o espao da janela atual Diminui o espao da janela atual
47
:Vex ........... abre o file explorer verticalmente :e . ......... abre o file explorer na janela atual aps abrir chame a ajuda <F1>
Para abrir o arquivo sob o cursor em nova janela coloque a linha abaixo no seu
~/.vimrc
let g:netrw_altv = 1
Caso queira pode mapear um atalho "no caso abaixo F2"para abrir o File Explorer.
7.5
Dicas
Caso esteja editando um arquivo e nele houver referncia a outro arquivo tipo:
/etc/hosts
Voc pode usar este comando para abrir uma nova janela com o arquivo citado
Ctrl-w f
Mas lembre-se que posicionar o cursor sobre o nome do arquivo Veja tambm mapeamentos na seo 10.6.
Captulo 8
Repetio de comandos
Para repetir a ltima edio saia do modo de Insero e pressione ponto (.):
.
Para inserir um texto que deve ser repetido vrias vezes:
# # # # #
Posicione o cursor no local desejado; Digite o nmero de repeties; Entre em modo de insero; Digite o texto; Saia do modo de insero (tecle Esc).
Por exemplo, se voc quiser inserir oitenta traos numa linha, em vez de digitar um por um, voc pode digitar o comando:
80i-<Esc>
Veja, passo a passo, o que aconteceu: Antes de entrar em modo de insero usamos um quanticador
`80'
depois iniciamos o modo de insero
i
depois digitamos o caractere a ser repetido
<Esc>
Se desejssemos digitar 10 linhas com o texto
isto um teste
deveramos ento fazer assim:
<Esc> .. para ter certeza que ainda estamos no modo normal 10 ..... quantificador antes i ...... entrar no modo de insero isto um teste <Enter> <Esc> .. voltar ao modo normal
49
Ctrl-y
Para repetir a linha abaixo (modo de insero)
Ctrl-e
Para copiar a linha atual
yy
Para colar a linha copiada
p
Para repetir uma linha completa
Ctrl-x Ctrl-l
O atalho acima s funcionar para uma linha semelhante, experimente digitar
uma linha qualquer com algum contedo uma linha <Ctrl-x Ctrl-l>
e veja o resultado
8.2
Os registradores z so uma espcie de rea de transferncia mltipla. Voc deve estar em modo normal e ento digitar uma aspa dupla e uma das 26 letras do alfabeto, em seguida uma ao por exemplo, `y' (copiar) `d' (apagar). Depois, mova o cursor para a linha desejada e cole com "rp, onde `r' corresponde ao registrador para onde o trecho foi copiado.
"ayy ... copia a linha atual para o registrador '``a''' "ap ... cola o contedo do registrador '``a''' abaixo "bdd ... apaga a linha atual para o registrador '``b'''
8.3
50
#include #include #include #include "stdio.h" "fcntl.h" "unistd.h" "stdlib.h"
Repetio de comandos
No podemos simplesmente executar repetidas vezes um comando do Vim, pois precisamos incluir texto tanto no comeo quanto no m da linha? necessrio mais de um comando para isso. a que entram as macros. Podemos gravar at 26 macros, j que elas so guardadas nos registros do Vim, que so identicados pelas letras do alfabeto. digitamos Para comear a gravar uma macro no registro 'a ',
qa
No modo Normal. Tudo o que for digitado a partir da ser gravado no registro a at que terminemos com o comando
<Esc>q
<Esc> ....... qa .......... I ........... #include " .. <Esc> ....... A" .......... <Esc> ....... j ........... <Esc> ....... q ...........
esta
para garantir que estamos no modo normal inicia a gravao da macro 'a' entra no modo de insero no comeo da linha insere #include " sai do modo de insero insere o ltimo caractere sai do modo de insero desce uma linha sai do modo de insero para a gravao da macro
Agora voc s precisa posicionar o cursor na primeira letra de uma linha como
stdio.h
E executar a macro do registro a quantas vezes for necessrio, usando o comando
@a.
4@a
Este comando executa quatro vezes o contedo do registro a. Caso tenha executado a macro uma vez pode repeti-la com o comando
@@
8.4
Repetindo substituies
:5,32s/isto/aquilo/g
Pode repetir esta substituio em qualquer linha que estiver apenas usando este smbolo
51
Podemos repetir a
g&
8.5
Repetindo comandos
@:
8.6
Scripts Vim
Usando um
Crie um arquivo
%s/bgcolor="e"/bgcolor="e"/g wq
Para executar um
:source nome_do_script.vim
8.7
Com o comando :bufdo podemos executar um comando em um conjunto de arquivos de forma rpida. HTML do diretrio atual, efetuarei uma substituio e em seguida salvo todos.
:qall
O comando :wall salva write todos all os arquivos abertos pelo comando vim *.html. Opcionalmente voc pode combinar l e l com o comando :wqall, que salva todos os arquivos abertos e em seguida sai do Vim.
8.8
Observao: lembre-se
:^r/
52
8.9
Repetio de comandos
Inserindo o nome do arquivo no comando
:^r%
8.10
^r:
:^r:
8.11
i<c-a>
Captulo 9
Comandos externos
O Vim permite executar comandos externos para processar ou ltrar o contedo de um arquivo. De forma geral, fazemos isso digitando (no modo normal):
9.1
Ordenando
sort existe tanto no Windows quanto nos sistemas Unix. Digitando sort, sem argumentos, o comportamento padro de classicar sort, digite
na ordem alfabtica (baseando-se na linha inteira). Para maiores informaes sobre argumentos do comando
9.2
O caractere % representa a regio equivalente ao arquivo atual inteiro. verso do Vim 7 em diante tem um comando duplicadas
uniq
sort
mais detalhes:
:h sort
54
9.3
Comandos externos
Ordenando e removendo linhas duplicadas no Vim 7
:sort u
:sort n
9.4
madas
Beautiers
espaamento. Por exemplo, para embelezar um arquivo HTML possvel usar a ferramenta tildy, do W3C:
:%!tildy
9.5
*
Referncias
http://www.dicas-l.com.br/dicas-l/20070119.php
Captulo 10
Como editar preferncias no Vim
O arquivo de preferncias do Vim vimrc, um arquivo oculto que pode ser criado no
prole do usurio.
~/.vimrc /home/seuusuario/.vimrc
Caso use o Windows o arquivo :
10.1
/home/user/.vim
Nesta pasta '.vim' ou 'vimles' deve haver pastas tipo
56
10.2 Comentrios
" linhas comeadas com aspas so comentrios " e portanto sero ignoradas pelo Vim
Ao fazer modicaes comente usando aspas duplas no comeo da linha, os comentrios lhe ajudaro mais tarde, pois medida que o seu vimrc cresce podem aparecer dvidas sobre o que determinado trecho faz :) As alteraes no vimrc s ser efetivadas na prxima vez que o Vim for aberto a no ser que voc faa um mapeamento para recarregar, mais adiante voc ver isto por enquanto faa
:source ~/vimrc ....... se estiver no GNU/Linux :source ~/_vimrc ...... caso use o sitema virtico
10.3
Set
.vimrc:
set nu
ou digitados como comandos:
:set nu
set nu "mostra numerao de linhas set showmode "mostra o modo em que estamos set showcmd "mostra no status os comandos inseridos set ts=4 "tamanho das tabulaes syntax on "habilita cores set hls "destaca com cores os termos procurados set incsearch "habilita a busca incremental set ai "auto identao set aw "salvamento automtico - veja :help aw set ignorecase "faz o Vim ignorar maisculas e minsculas nas buscas set smartcase "Se comear uma busca em maisculo ele habilita o case set ic "ignora maiscula e minsculas em uma busca set scs "ao fazer uma busca com maisculos considerar case sensitive set backup set backupext=.backup set backupdir=~/.backup,./ set cul "abreviao de cursor line (destaca linha atual) set ve=all "permite mover o cursor para reas onde no h texto set ttyfast "Envia mais caracteres ao terminal, melhorando o redraw de janelas set columns=88 "Determina a largura da janela. set mousemodel=popup "exibe o contedo de folders e sugestes spell
O comando
gqap
57
" **************************************************************** " * * " * geralmente usamos ^I para representar uma tabulao * " * <Tab>, e $ para indicar o fim de linha. Mas possvel * " * customizar essas opes. sintaxe: * " * * " * set listchars=key:string,key:string * " * * " * * " * - eol:{char} * " * * " * Define o caracter a ser posto depois do fim da linha * " * * " * - tab:{char1}{char2} * " * * " * O tab mostrado pelo primeiro caracter {char1} e * " * seguido por {char2} * " * * " * - trail:{char} * " * * " * Esse caracter representa os espaos em branco. * " * * " * - extends:{char} * " * * " * Esse caracter representa o incio do fim da linha * " * sem quebr-la * " * Est opo funciona com a opo nowrap habilitada * " * * " **************************************************************** "exemplo 1: "set listchars=tab:>-,trail:.,eol:#,extends:@ "exemplo 2: "set listchars=tab:>"exemplo 3: "set listchars=tab:>"exemplo 4: set nowrap "Essa opo desabilita a quebra de linha "set listchars=extends:+ Caso esteja usando o gvim pode setar um esquema de cores set colo desert
10.4
:set list
58
10.5
@s
O Vim colocar no comando
:sort -u
Bastando pressionar
<Enter>.
Observao:
:5,20sort u "da linha 5 at a linha 20 ordene e retire duplicados :sort n " ordene meu documento considerando nmeros " isto til pois se a primeira coluna contiver " nmeros a ordenao pode ficar errada caso no usemos " o parmetro ``n''
10.6
Mapeamentos
Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende de sua criatividade e do quanto conhece o Vim.
10.6.1
Mapeamentos so um ponto importante do Vim, com eles podemos controlar aes com quaisquer teclas, mas antes temos que saber que: Para criar mapeamentos, precisamos conhecer a maneira de representar as teclas e combinaes. Alguns exemplos:
tecla <c-x> <left> <right> <c-m-a> <cr> <Esc> <leader> <bar> <cword> <cfile> <cfile>< <sfile>
: : : : : : : : : : : : :
tecla mapeada Ctrl-x seta para a esquerda seta para a direita Ctrl-Alt-a Enter Escape normalmente \ | pipe palavra sob o cursor arquivo sob o cursor arquivo sob o cursor sem extenso contedo do arquivo sob o cursor
10.6 Mapeamentos
<left> <up> <m-f4> <c-f> <bs> <space> <tab> : : : : : : : salta um caractere para esquerda equivale clicar em 'seta acima' a tecla alt -> m mais a tecla f4 Ctrl-f backspace espao tab
59
:h index
No Vim podemos mapear uma tecla para o modo normal, realizando determinada operao e a mesma tecla pode desempenhar outra funo qualquer em modo de insero ou comando, veja:
" mostra o nome do arquivo com o caminho map <F2> :echo expand("%:p") " insere um texto qualquer imap <F2> Nome de uma pessoa
A nica diferena nos mapeamentos acima que o mapeamento para modo de insero comea com i, assim como para o modo comando : comea com c no caso
cmap.
10.6.2
Cada alterao no arquivo de congurao do Vim s ter efeito na prxima vez que voc abrir o Vim a menos que voc coloque isto dentro do mesmo
" recarregar o vimrc " Source the .vimrc or _vimrc file, depending on system if &term == "win32" || "pcterm" || has("gui_win32") map ,v :e $HOME/_vimrc<CR> nmap <F12> :<C-u>source ~/_vimrc <BAR> echo "Vimrc recarregado!"<CR> else map ,v :e $HOME/.vimrc<CR> nmap <F12> :<C-u>source ~/.vimrc <BAR> echo "Vimrc recarregado!"<CR> endif
Agora basta pressionar <F12> em modo normal e as alteraes passam a valer instantaneamente, e para chamar o vimrc basta usar.
,v
Os mapeamentos abaixo so teis para quem escreve cdigos 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.
60
inoremap inoremap inoremap inoremap
O termo
inoremap
mapeia o atalho e no permite que o mesmo seja remapeado, e o mapeamento s funciona em modo de insero, isso signica que um atalho pode ser mapeado para diferentes modos de operao. Veja este outro mapeamento:
Enter.
10.6.3
A cada busca, se a opo `hls' estiver habilitada o Vim faz um destaque colorido, mas se voc quiser limpar pode fazer este mapeamento
10.6.4
10.6.5
map ,d <Esc>:%s/\(^\n\{2,}\)/\r/g<cr>
No mapeamento acima estamos associando o atalho:
,d
. . . ao desejada, fazer com que linhas em branco sucessivas sejam substitudas por uma s linha em branco, vejamos como funciona:
mapear atalho que quermos se estive em modo de insero sai em modo de comando em todo o arquivo substitua
10.7 Autocomandos
\n .......... {2,} ........ \r .......... g ........... <cr> ........ quebra de linha duas ou mais vezes trocado por \r Enter globalmente confirmao do comando
61
As barras invertidas podem no ser usadas se o seu Vim estiver com a opo
magic habilitada
:set magic
Por acaso este um padro portanto tente usar assim pra ver se funciona
map ,d :%s/\n{2,}/\r/g<cr>
10.6.6 Mapeamentos globais
map - funciona em qualquer modo nmap - apenas no modo Normal imap - apenas no modo de Insero
Mover linhas com
Ctrl-(seta abaixo)
ou
Ctrl-(seta acima):
" tem que estar em modo normal! nmap <C-Down> ddp nmap <C-Up> ddkP
Salvando com uma tecla de funo:
" salva com F9 nmap <F9> :w<cr> " F10 - sai do Vim nmap <F10> <Esc>:q<cr>
10.6.7 Convertendo as iniciais de um documento para maisculas
" MinusculasMaiusculas: converte a primeira letra de cada " frase para MAISCULAS nmap ,mm :%s/\C\([.!?][])"']*\($\|[ ]\)\_s*\)\(\l\)/\1\U\3/g<CR> " caso queira confirmao coloque uma letra ``c'' no final da linha acima: " (...) \3/gc<CR>
10.7
Autocomandos
Autocomandos habilitam comandos automticos para situaes especcas. Se voc deseja que seja executada uma determinada ao ao iniciar um novo arquivo o seu autocomando dever ser mais ou menos assim:
au BufNewFile tipo ao
62
Veja um exemplo:
10.8
10.8.1
Funes
Fechamento automtico de parnteses
" -------------------------------------" Ativa fechamento automtico para parntese " Set automatic expansion of parenthesis/brackets inoremap ( ()<Esc>:call BC_AddChar(``)'')<cr>i inoremap { {}<Esc>:call BC_AddChar(``}'')<cr>i inoremap [ []<Esc>:call BC_AddChar(``]'')<cr>i `` '' ``''<Esc>:call BC_AddChar(``''")<cr>i " " mapeia Ctrl-j para pular fora de parnteses colchetes etc... inoremap <C-j> <Esc>:call search(BC_GetChar(), ``W'')<cr>a " Function for the above function! BC_AddChar(schar) if exists(``k'') let b:robstack = b:robstack . a:schar else let b:robstack = a:schar endif endfunction function! BC_GetChar() let l:char = b:robstack[strlen(b:robstack)-1] let b:robstack = strpart(b:robstack, 0, strlen(b:robstack)-1) return l:char endfunction '''Outra opo para fechamento de parnteses''' " Fechamento automtico de parnteses imap { {}<left> imap ( ()<left> imap [ []<left>
10.8 Funes
63
" pular fora dos parnteses, colchetes e chaves, mover o cursor " no modo de insero imap <c-l> <Esc><right>a imap <c-h> <Esc><left>a
10.8.2 Funo para barra de status
120126.
http://www.linux.com/feature/
10.8.3
Ctrl-w n
pode colocar esta funo no seu
.vimrc
" rola janela alternativa fun! ScrollOtherWindow(dir) if a:dir == ``n'' let move = ``>'' elseif a:dir == ``p'' let move = ``>'' endif exec ``p'' . move . ``p'' endfun nmap <silent> <M-Down> :call ScrollOtherWindow(``n'')<CR> nmap <silent> <M-Up> :call ScrollOtherWindow(``p'')<CR>
Esta funo acionada com o atalho `alt' + setas acima e abaixo
10.8.4
http://vim.wikia.com/wiki/Number_a_group_of_lines
10.8.5
function! <SID>SwitchColorSchemes() if exists(``e'') if g:colors_name == 'native' colorscheme billw elseif g:colors_name == 'billw'
64
http://nanasi.jp/old/colorscheme_0.html
10.8.6
" Cria um cabealho para scripts bash fun! InsertHeadBash() normal(1G) :set ft=bash :set ts=4 call append(0, ``h'') call append(1, ``:'' . strftime("%a %d/%b/%Y hs %H:%M")) call append(2, "# ultima modificao:``(''%a %d/%b/%Y hs %H:%M")) call append(3, "# NOME DA SUA EMPRESA") call append(3, "# Propsito do script") normal($) endfun map ,sh :call InsertHeadBash()<cr>
10.8.7 Funo para inserir cabealhos Python
" funo para inserir cabealhos python fun! BufNewFile_PY() normal(1G) :set ft=python :set ts=2 call append(0, "#!/usr/bin/env python") call append(1, "# # -*- coding: ISO-8859-1 -*-") call append(2, ``:'' . strftime("%a %d/%b/%Y hs %H:%M")) call append(3, `` '' . strftime("%a %d/%b/%Y hs %H:%M")) call append(4, "# Instituicao: <+nome+>")
10.8 Funes
call append(5, "# Proposito do script: <+descreva+>") call append(6, "# Autor: <+seuNome+>") call append(7, "# site: <+seuSite+>") normal gg endfun autocmd BufNewFile *.py call BufNewFile_PY() map ,py :call BufNewFile_PY()<cr>A " Ao editar um arquivo ser aberto no ltimo ponto em " que foi editado autocmd BufReadPost * \ if line('``\''``('''\``'') <= line(``$'') | \ exe ''normal g`\``" | \ endif
65
" Permite recarregar o Vim para que modificaes no " Prprio vimrc seja ativadas com o mesmo sendo editado nmap <F12> :<C-u>source $HOME/.vimrc <BAR> echo "Vimrc recarregado!"<CR>
Redimensionar janelas
" Redimensionar a janela com " Alt-seta direita e esquerda map <M-right> <Esc>:resize +2 <CR> map <M-left> <Esc>:resize -2 <CR>
10.8.8 Funo para pular para uma linha
"ir para linha " ir para uma linha especfica function! GoToLine() let ln = inputdialog("ir para a linha...") exe ``:'' . ln endfunction "no meu caso o mapeamento com Ctrl-l "use o que melhor lhe convier imap <S-l> <C-o>:call GoToLine()<CR> nmap <S-l> :call GoToLine()<CR>
10.8.9 Funo para gerar backup
A funo abaixo til para ser usada quando voc vai editar um arquivo gerando modicaes signicativas, assim voc poder restaurar o backup se necessrio
" A mapping to make a backup of the current file. fun! WriteBackup() let fname = expand("%:p") . "__" . strftime("%d-%m-%Y--%H.%M.%S") silent exe ":w " . fname echo "Wrote " . fname endfun nnoremap <Leader>ba :call WriteBackup()<CR>
66
O atalho
<leader>
em geral a barra invertida \, na dvida
:help <leader>
10.9
fonte:
path
do Vim?
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) python << EOF import os import sys import vim for p in sys.path: # Add each directory in sys.path, if it exists. if os.path.isdir(p): # Command 'set' needs backslash before each space. vim.command(r``s'' % (p.replace(`` '', r`` ''))) EOF
Isto lhe permite usar 'gf ' ou
10.10
Criando um menu
Como no Vim podemos ter innitos comandos ca complicado memorizar tudo a que entram os menus, podemos colocar nossos plugins e atalhos favoritos em um menu veja este exemplo
amenu ........................ cria um menu Ferramentas.ExibirNomeDoTema . Menu plugin submenu ExibirNomeDoTema :echo g:colors_name<cr> ...... comando para exibir o nome do tema de cores atual
Caso haja espaos no nome a denir voc pode fazer assim
67
:menu .... :nmenu ... :vmenu ... :omenu ... :menu! ... :imenu ... :cmenu ... :amenu ...
10.12
Exemplo de menu
" cores menu T&emas.cores.quagmire :colo quagmire<CR> menu T&emas.cores.inkpot :colo inkpot<CR> menu T&emas.cores.google :colo google<CR> menu T&emas.cores.ir_black :colo ir_black<CR> menu T&emas.cores.molokai :colo molokai<CR> " Fontes menu T&emas.fonte.Inconsolata :set gfn=Inconsolata:h10<CR> menu T&emas.fonte.Anonymous :set anti gfn=Anonymous:h8<CR> menu T&emas.fonte.Envy\ Code :set anti gfn=Envy_Code_R:h10<CR> menu T&emas.fonte.Monaco :set gfn=monaco:h9<CR> menu T&emas.fonte.Crisp :set anti gfn=Crisp:h12<CR> menu T&emas.fonte.Liberation\ Mono :set gfn=Liberation\ Mono:h10<CR>
O comando
:update
Atualiza o menu recm modicado. Quando o comando
:amenu
usado sem nenhum argumento o Vim mostra os menus denidos atualmente Para listar todas as opes de menu para 'Plugin' por exemplo faa:
:amenu Plugin
10.13
Outros mapeamentos
<br>
68
\s ..... \+ ..... $ ...... \| ..... `` '' .. \+ ..... \ze .... \t .....
Portanto a expresso regular acima localizar espaos ou tabulaes no nal de linha e destacar em vermelho. "Remove espaos redundantes no m das linhas
mz ... marca a posio atual do cursor para retornar no final do comando `z ... retorna marca criada
Se no fosse feito isto o cursor iria car na linha da ltima substituio! "Abre o vim-vim explorer
"mapeamento para retirar tags html com Ctrl-Alt-t nmap <C-M-t> :%s/<[^>]*>//g <cr> " Quebra a linha atual no local do cursor com F2 nmap <F2> a<CR><Esc> " join lines -- Junta as linhas com Shift-F2 nmap <S-F2> A<Del><Space>
Para mais detalhes sobre buscas acesse 6 na pgina 33
10.14
"Word completion "Complementao de palavras set dictionary+=/usr/dict/words set complete=.,w,k "------ complementao de palavras ---"usa o tab em modo de insero para completar palavras function! InsertTabWrapper(direction) let col = col(``.'') - 1
1 http://guia-er.sourceforge.net
10.15 Abreviaes
if !col || getline(``.'')[col - 1] !~ '\k' return ``>'' elseif ``d'' == a:direction return ``>'' else return ``>'' endif endfunction inoremap <tab> <c-r>=InsertTabWrapper (``d'')<cr> inoremap <s-tab> <c-r>=InsertTabWrapper (``d'')<cr>
69
10.15
Abreviaes
.vimrc
voc pode colocar abreviaes, que so uma espcie de
Tambm no
iab slas Srgio Luiz Arajo Silva iab Linux GNU/Linux iab linux GNU/Linux " Esta abreviao legal para usar com o python imap :<CR> :<CR><TAB>
10.16
*
Referncias
http://www.dicas-l.com.br/dicas-l/20050118.php
Captulo 11
Um wiki para o Vim
inegvel a facilidade que um wiki nos traz, os documentos so indexados e linkados de forma simples. J pesquisei uma poro de wikis e, para uso pessoal recomendo o potwiki. O linkk do potwiki :
script.php?script_id=1018.
http://www.vim.org/scripts/
1
ciona localmente embora possa ser aberto remotamente via ssh . Para criar um k no potwiki basta usar WikiNames, so nomes iniciados com letra maiscula e que contenham outra letra em maisculo no meio. Ao baixar o arquivo salve em
call s:default('home',"~/.wiki/HomePage")
Outra forma de indicar a pgina inicial seria colocar no seu .virmc
11.1
Como usar
O potwiki trabalha com WikiWords, ou seja, palavras iniciadas com letras em maisculo e que tenham outra letra em maisculo no meio (sem espaos) para inici-lo abra o Vim e pressione
\ww.
<Leader> igual a \ - veja :help leader \ww .... abra a sua HomePage \wi .... abre o Wiki index \wf .... segue uma WikiWords (can be used in any buffer!) \we .... edite um arquivo Wiki \\ .... Fecha o arquivo <CR> .... segue WikiWords embaixo do cursor <CR> igual a Enter <Tab>.... move para a prxima WikiWords
1 Sistema
de acesso remoto
71
11.2
:help potwiki
O valor que est em zero dever car em 1
call s:default(`autowrite',0)
11.3
textos
Dicas
Como eu mantenho o meu wiki oculto .wiki criei um link para a pasta de
ln -s ~/.wiki /home/sergio/docs/textos/wiki
Vez por outra entro na pasta
~/docs/textos/wiki
11.4
Atualmente uso o Ubuntu em casa e ele j usa utf-8. Ao restaurar meu backup do wiki no Kurumin os caracteres caram meio estranhos, da z:
baixei o pacote [recode] # apt-get install recode para recodificar caracteres de utf-8 para isso faa: recode -d u8..l1 arquivo
Captulo 12
Hbitos para edio efetiva
Um dos grandes problemas relacionados com os softwares sua subutilizao. Por inrcia o usurio tende a aprender o mnimo para a utilizao de um programa e deixa de lado recursos que poderiam lhe ser de grande valia. O mante-
1 recentemente publicou vdeos e manuais sobre 2 os 7 hbitos para edio efetiva de textos , este captulo pretende resumir
nedor do Vim Bram Moolenaar alguns conceitos mostrados por Bram Moolenaar em seu artigo.
12.1
12.2
Use marcas
em modo normal cria uma marca `a' move o cursor at a marca `a' deleta at a marca `a' copia at a marca `a'
ma ..... 'a ..... d'a .... y'a .... gg ... G .... 0 .... $ .... fx ... dfx .. g, ... g; ... p .... P .... H .... M .... L ....
vai para a linha 1 do arquivo vai para a ltima linha do arquivo vai para o incio da linha vai para o fim da linha pula at a prxima ocorrncia de ``x'' deleta at a prxima ocorrncia de ``x'' avana na lista de alteraes retrocede na lista de alteraes cola o que foi deletado/copiado abaixo cola o que foi deletado/copiado acima posiciona o cursor no primeiro caractere da tela posiciona o cursor no meio da tela posiciona o cursor na ltima linha da tela
1 http://www.moolenaar.net 2 http://br-linux.org/linux/7-habitos-da-edicao-de-texto-efetiva
73
* Use asterisco para localizar a palavra sob o cursor * Use o percent % serve para localizar fechamento de parntese chaves etc '. apostrofo + ponto retorna ao ltimo local editado '' retorna ao local do ultimo salto
Suponha que voc est procurando a palavra `argc':
/argc
Digita `n' para buscar a prxima ocorrncia
n
Um jeito mais fcil seria:
12.3
Use quanticadores
12.4
O Vim pode abrir vrios arquivos que contenham um determinado padro. Um exemplo seria abrir dezenas de arquivos html e trocar a ocorrncia bgcolor=f Para bgcolor=e Usaramos o seguinte comando
:wn
O w signica gravar e o n signica Veja tambm: 2
next,
74
12.5
O Vim complementa com tab. Veja mais na seo 10.14 na pgina 65. Use macros. Detalhes na seo 8.3 pgina 46. Use abreviaes coloque abreviaes como abaixo em seu mais na seo 10.15. as abreviaes fazem o mesmo que auto-correo e auto-texto em outros editores
~/.vimrc.
Veja
Ctrl-y ....... copia caractere a caractere a linha acima Ctrl-e ....... copia caractere a caractere a linha abaixo Ctrl-x Ctrl-l .. completa linhas inteiras
* Para um trecho muito copiado coloque o seu contedo em um registrador
"ayy ... copia a linha atual para o registrador ``a'' "ap ... cola o registrador ``a''
Crie abreviaes para erros comuns no seu arquivo de congurao ( /.vimrc)
12.6
Use dobras
O Vim pode ocultar partes do texto que no esto sendo utilizadas permitindo uma melhor visualizao do contedo. Mais detalhes no captulo 4 pgina 24.
12.7
Use autocomandos
~/.vimrc
voc pode criar comandos auto-
mticos que sero executados diante de uma determinada circunstncia O comando abaixo ser executado em qualquer arquivo existente, posicionando o cursor no ltimo local editado
"autocmd BufEnter * lcd %:p:h autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif
75
Grupo de comandos para arquivos do tipo html. Observe que o autocomando carrega um arquivo de congurao do Vim exclusivo para o tipo html/htm e no caso de arquivos novos BufNewFile ele j cria um esqueleto puxando do endereo indicado.
augroup html au! <--> Remove all html autocommands au! au BufNewFile,BufRead *.html,*.shtml,*.htm set ft=html au BufNewFile,BufRead,BufEnter *.html,*.shtml,*.htm so ~/docs/vim/.vimrc-html au BufNewFile *.html 0r ~/docs/vim/skel.html au BufNewFile *.html*.shtml,*.htm /body/+ " coloca o cursor aps o corpo <body> au BufNewFile,BufRead *.html,*.shtml,*.htm set noautoindent augroup end
Documentao sobre autocomandos do Vim
autocmd.html.
http://www.vim.org/htmldoc/
12.8
vim .
Voc pode usar j e k para navegar e
12.9
Para cada prtica produtiva procure adquirir um hbito e mantenha-se atento ao que pode ser melhorado. Imagine tarefas complexas, procure um meio melhor de fazer e torne um hbito.
12.10
Referncias
por Bram Moolenaar
http://www.moolenaar.net/habits_2007.pdf http://vim.wikia.com/wiki/Did_you_know
Captulo 13
Plugins
Plugins so um meio de estender as funcionalidades do Vim, h plugins para diversas tarefas, desde wikis para o Vim at ferramentas de auxlio a navegao em arquivos com o caso do plugin
php?script_id=1658
http://www.vim.org/scripts/script.
13.1
:source <path>/<plugin>
Caso o plugin atenda suas necessidades voc pode instala-lo. Este procedimento tambm funciona para temas de cor! No GNU/Linux
~/.vim/plugin/
No Windows
~/vimfiles/plugin/
Obs: Caso no exista a pasta voc pode cri-la! Exemplo no GNU/Linux
:ver
77
AT Xest acessvel aqui: http://vim-latex.sourceforge. Um plugin completo para L E Uma vez adicionado o plugin voc pode inserir seus em:
~/.vim/ftplugin/latex-suite/templates
13.3
.s/^\(\\section\)\({.*}\)/\1\2\r\\label\2
13.4
==seo==
por
\section{seo} :.s/^==\s\?\([^=]*\)\s\?==/\\section{\1}/g : ......... . ......... s ......... ^ ......... == ........ \s\? ...... [^=] ...... * ......... \s\? ...... \\ ........ \1 ........ comando linha atual substitua comeo de linha dois sinais de igual seguido ou no de espao no pode haver = (^ dentro de [] negao) diz que o que vem antes pode vir zero ou mais vezes seguido ou no de espao insere uma barra invertida repete o primeiro trecho entre ()
13.5
13.6
Complementao de cdigos
templates.
alm disso, permitindo saltar para trechos do modelo inserido atravs de um atalho congurvel de modo a agilizar o trabalho do programador.
www.vim.org/scripts/script.php?script_id=1318
http://
78
13.7 Instalao
Plugins
Um artigo ensinando como instalar o plugin snippetsEmu pode ser lido aqui:
http://vivaotux.blogspot.com/2008/03/instalando-o-plugin-snippetsemu-no-vim. html
13.8
O plugin wikipot implementa um wiki para o Vim no qual voc dene um link com a notao WikiWord, onde um link uma palavra que comea com uma letra maiscula e tem outra letra maiscula no meio Obtendo o plugin neste link:
http://www.vim.org/scripts/script.php?script_id=1018.
13.9
http://www.vim.org/scripts/script.php?script_id=910
13.10
http://www.vim.org/scripts/script.php?script_id=2208&rating=helpful# 1.3
Veja como instalar o este plugin no captulo 11.
Captulo 14
Referncias
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=2914
VIM avanado (parte 1)]