Você está na página 1de 79

Pequeno guia do Vim

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

Livre GNU (GFDL).

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

Srgio Luiz Arajo Silva Douglas Adriano Augusto


. . .

<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

Forando a edio de um novo arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Removendo linhas duplicadas

Editando em modo de comando . . . . . . . . . . . . . . . . . . . O arquivo alternativo . . . . . . . . . . . . . . . . . . . . . . . . . Incrementando nmeros em modo normal . . . . . . . . . . . . .

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.17 Dicas extras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.17.1 Abrindo o ltimo arquivo rapidamente . . . . . . . . . . .

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.10 Manipulando registros

5.11 Listando os registros atuais 5.12 Listando arquivos abertos

5.13 Dividindo a janela com o prximo arquivo da lista de buers

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

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Corrigindo a indentao de cdigos . . . . . . . . . . . . . . . . . Usando o le explorer

6.10 Selecionando ou deletando contedo de tags html . . . . . . . . . 6.11 Substituies 6.12 Exemplos 6.14 Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.13 O comando global g

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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 . . . . . . . . . . . . . . . . . . . . . .

CONTEDO 7 Trabalhando com janelas


7.1 7.2 7.3 7.4 7.5 Dividindo a janela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abrindo e fechando janelas File Explorer Manipulando janelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

8.10 Inserindo o ltimo comando

. . . . . . . . . . . . . . . . . . . .

8.11 Para repetir exatamente a ltima insero

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 Como editar preferncias no Vim


10.1 Onde colocar plugins e temas de cor 10.2 Comentrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4 Exibindo caracteres invisveis 10.5 Denindo macros previamente . . . . . . . . . . . . . . . . . . . . 10.6 Mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6.1 Notas sobre mapeamentos . . . . . . . . . . . . . . . . . . 10.6.2 Recarregando o arquivo de congurao . . . . . . . . . . 10.6.3 Limpando o registro de buscas 10.6.4 Destacar palavra sob o cursor 10.6.6 Mapeamentos globais 10.7 Autocomandos 10.8 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52
52 53 53 54 55 55 55 56 57 57 57 58 58 58 59 59 60 60 60 60 61 61

10.6.5 Remover linhas em branco duplicadas

. . . . . . . . . . . . . . . . . . . .

10.6.7 Convertendo as iniciais de um documento para maisculas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10.8.1 Fechamento automtico de parnteses 10.8.3 Rolar outra janela

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11 Um wiki para o Vim


11.1 Como usar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Salvamento automtico para o Wiki . . . . . . . . . . . . . . . . 11.3 Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 Problemas com codicao de caracteres . . . . . . . . . . . . . .

67
67 68 68 68

12 Hbitos para edio efetiva


12.1 Mova-se rapidamente no texto . . . . . . . . . . . . . . . . . . . . 12.2 Use marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 Use quanticadores . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4 Edite vrios arquivos de uma s vez 12.5 No digite duas vezes 12.6 Use dobras 12.7 Use autocomandos 12.8 Use o le explorer 12.10Referncias . . . . . . . . . . . . . . . . . . . . . . . .

69
69 69 70 70 71 71 71 72 72 72

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12.9 Torne as boas prticas um hbito

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

entre outras facilidades.

bastante atuante e , ao lado do Emacs

3 um dos editores mais usados nos siste-

Conta com uma comunidade

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

1 Ambiente de desenvolvimento 2 http://guia-er.sourceforge.net/guia-er.html 3 http://www.gnu.org/software/emacs/ 4 O kernel Linux sem os programas GNU no

serviria para muita coisa

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. . .

:help .... verso longa :h ....... verso abreviada


Ou simplesmente:

<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

Recarregue o arquivo que est sendo editado assim:

<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

Como interpretar atalhos e comandos


Ctrl-L
aparecer assim:

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.

1.5 Modos de operao


1.5 Modos de operao

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>,

mas o Vim tem, em modo normal

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

Entrando em modo de edio


.... .... .... .... .... .... inicia inicia inicia inicia inicia inicia insero insero insero insero insero insero de de de de de de texto texto texto texto texto texto aps o atual antes do caractere atual no final da linha no comeo da linha na linha abaixo na linha acima

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

rea de transferncia. Podemos ter um  buffer para cada letra do al-

Neste modo podemos colar o que est no  buffer , uma espcie de

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

insert) ou  c (change) ou tecla  a (append).

Para

substituir um nico caractere voc pode usar:

Vim a memria chamada de buer, assim como arquivos carregados.

10

Introduo
r<char> ...... onde char pode ser qualquer caractere
Para trocar caracteres de lugar faa:

xp ........... troca letras de lugar


Para acessar este modo:

i,a,I,A,o,O
exibido

Visual

Neste modo podemos selecionar blocos verticais de texto.

um destaque visual. uma das melhores formas de se copiar contedo no Vim. Para acessar (a partir do modo normal):

v ...... v5j .... V ...... Ctrl-v .

seleo de caracteres seleo visual para as poximas 5 linhas (maisculo) - seleo de linhas inteiras Seleciona blocos de texto (use setas)

Comando

Neste modo digitamos comandos como o de salvar

:w
ou para ir para uma linha qualquer:

:100 <Enter>
para acessar

1.7

Erros comuns
Estando em

modo de insero pressionar  j

na inteno de rolar o docu-

mento, neste caso estaremos inserindo simplesmente a letra j. 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.

modo normal acionar acidentalmente o  <Caps Lock>

e ten-

Em

modo normal

tentar digitar

um nmero seguido de uma palavra

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

Para usar um comando do modo normal no modo de insero faa:

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

ou seja, dados carregados

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

i ..... I ..... a ..... A ..... o ..... O ..... <Esc> .

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>.

<Esc> .... lhe leva para o modo normal


As letras h, k, l, j funcionam como setas:

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

so consideradas em separado, por-

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

Deletar est associado letra  d.

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

yy .... copia a linha atual Y ..... copia a linha atual


A maioria dos comandos do Vim pode ser precedida por um quanticador:

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

Podemos pular sentenas:

) .... ( .... } .... { .... y) ... d} ...

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

O que foi deletado ou copiado pode ser colado:

p .... cola o que foi copiado ou deletado abaixo P .... cola o que foi copiado ou deletado acima
Caso tenha uma estrutura como abaixo:

def pot(x): return x**2


E tiver uma referncia qualquer para a funo normal)

pot

denio basta posicionar o cursor sobre a palavra

pot

e desejar mover-se at sua e pressionar (em modo

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

Para rolar uma pgina de cada vez (em modo normal)

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

^ .... equivale a Ctrl ^I ... equivale a Ctrl-I


Retroceder na lista de saltos, incluindo outros arquivos,

^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

........ Mostra a definio mais prxima de uma varivel

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

e fazer algo como gravar e ir para o

prximo arquivo com o comando a seguir:

: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.

mA ....... cria uma marca global A

Captulo 3
Editando
Que tal abrir um arquivo j na linha 10 por exemplo?

vim +10 /caminho/para/o/arquivo


Ou ainda abrir na linha que contm um determinado padro?

vim +/padro arquivo


Obs: caso o padro tenha espaos no nome coloque entre parnteses ou use escape  \ a m de no obter erro.

3.1

Deletando uma parte do texto

O comando d remove o contedo para a memria.

x .... d5x .. dd .. 5dd .. dw .. 5dw .. dl .. 5dl .. d0 .. d^ .. d$ .. dgg .. dG .. D ....

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

invs de deletar ser feita uma mudana de contedo. Por exemplo:

ciw .............. cip .............. cis .............. C ................

modifica modifica modifica modifica

uma palavra um pargrafo uma sentena at o final da linha

3.2

Copiando sem deletar

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

Para recuar nas alteraes

g;
Para visualizar a lista de alteraes

:changes
Para mais detalhes

:h changes

3.4 Forando a edio de um novo arquivo


3.4 Forando a edio de um novo arquivo

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

De modo similar voc pode

desejar ignorar todas as alteraes feitas desde a abertura do arquivo

: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

Editando em modo de comando

Para mover um trecho usando o modo de comandos faa:

: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!

3.9 Incrementando nmeros em modo normal


3.9 Incrementando nmeros em modo normal

21

Posicione o cursor sobre um nmero e pressione

Ctrl-a ..... incrementa o nmero Ctrl-x ..... decrementa o nmero

3.10

Repetindo a digitao de linhas


......... ......... Ctrl-l .. ......... repete repete repete repete linha acima linha abaixo linhas inteiras a ltima insero

Ctrl-y Ctrl-e Ctrl-x Ctrl-a

Para saber mais sobre repetio de comandos veja o captulo 8, na pgina 45.

3.11

Movendo um trecho de forma inusitada

: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

Uma calculadora diferente

Sempre que desejar inserir um clculo voc pode usar o atalho

Ctrl-r= Ctrl-r=5*850

3.13

Desfazendo

Se voc cometer um erro, no se preocupe! Use o comando u:

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>,

ou seja, saia do modo de insero)

Passo 1 Passo 2 Passo 3

- digite na linha 1 o seguinte texto

# controle de fluxo <Esc>


- digite na linha 2 o seguinte texto

# um lao for <Esc>


- Nas linhas 3 e 4 digite...

for i in range(10): print i <Esc>

Passo 4 Passo 5

- pressione u duas vezes (voc voltar ao passo 1) - Na linha 2 digite

# operador ternrio <Esc>

Passo 6

- na linha 3 digite

var = (1 if teste == 0 else 2)


Obs: A necessidade do refazer

<Esc>

Esc

para demarcar as aes, pois o Vim considera

cada insero uma ao. Agora usando o atalho de desfazer tradicional u e de

Ctrl-r observe que no mais possvel acessar todas as alteraes efetu-

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

gDessa forma voc acessar todas as alteraes ocorridas no texto!

3.14

Salvando

A maneira mais simples de salvar um arquivo, usar o comando

:w
Para especicar um novo nome para o arquivo, simplesmente digite

3.15 Usando marcas


:w! >> ``file''

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

Abrindo o ltimo arquivo rapidamente

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!

3.18 Edio avanada de linhas


3.17.2 Modelines

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

modeline algo como:

.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!

modelines pode ser um grande recurso para o

3.18

Edio avanada de linhas

Seja o seguinte texto:

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:

:5,$ normal 0wd3w


Explicando o comando acima:

:5,$ .... normal .. 0 ....... w ....... d3w .....

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 

(sada do modo de insero). Por exemplo,

suponha agora que deseja-se mudar a frase 

no um texto velho; pode ser feito assim:


:5,$ normal 02wino ^[$ciwvelho
Decompondo o comando acima temos:

este um texto novo

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

forma literal, prevenindo-se assim a interpretao destes neste exato momento.

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

folders descritos no manual do Vim como

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

Shift-v ............ j .................. zf ................. zo .................

seleo por linha desce linha cria o folder abre o folder

4.1

Mtodos de dobras

O Vim tem seis modos

fold, so eles:

Sintaxe (

syntax) indent)

Indentao ( Marcas ( Manual

marker)

Para determinar o tipo de dobra faa

: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.

Deve haver um espao

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

nnoremap <space> @=((foldclosed(line(".")) < 0) ? 'zc' : 'zo')<CR>

4.3

Criando dobras usando o modo visual

Para iniciar a seleo visual

Esc ........ shift-v .... j .......... zf .........

vai para o modo normal inicia seleo visual aumenta a seleo visual (desce) cria a dobra na seleo ativa

Um modo inusitado de se criar dobras :

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

O registro sem nome 

Armazena o contedo de aes como:

d ....... s ....... c ....... x ....... yy ......

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

Registro de pequenas delees

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

Voc pode armazenar uma linha em modo normal assim:

"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.

"ayip .. "a ..... y ...... ip .....

copia o pargrafo atual para o registro ``a'' registro a yank (copia) inner paragraph (este pargrafo)

5.5

Registros somente leitura : . % #


": ". "% "# ..... ..... ..... ..... % : / a armazena armazena contm o contm o .... .... .... .... o ltimo comando uma cpia do ltimo texto inserido nome do arquivo corrente nome do arquivo alternativo Ctrl-r o o a o nome do arquivo atual ltimo comando digitado ltima busca efetuada registro `a'

Uma forma prtica de usar registros em modo de insero usando

Ctrl-r Ctrl-r Ctrl-r Ctrl-r


pressionando

insere insere insere insere

Em modo de insero voc pode repetir a ltima insero de texto simplesmente

Ctrl-a

5.6 Registro de expresses


5.6 Registro de expresses
"=
Este registro na verdade usado em algumas funes avanadas.

31

5.7

Registros de arrastar e mover

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

encontrada em muitas aplicaes.

Finalmente, o

"~

and-drop).
5.8

armazena o texto colado pela operao mais recente de arrastar-e-soltar (

drag-

Registro buraco negro "_

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

Registros de buscas /

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

:let :let :let :let :let :let :let :reg

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

<C-R><C-R>[0-9a-z] <C-R>% <C-R>=somevar


coloque em seu

: : : :

Insere Insere Insere Insere

o registro de pequenas delees registros 0-9 e a-z o nome do arquivo o contedo de uma varivel n.

Um exemplo: pr-carregando o nome do arquivo no registro

~/.vimrc

let @n=@%
Como foi atribudo ao registro

n o contedo de @%, ou seja, o nome do arquivo,

voc pode fazer algo assim em modo de insero:

Ctrl-r n
E o nome do arquivo ser inserido

5.11

Listando os registros atuais

Digitando o comando

:reg
ou ainda

:ls
O Vim mostrar os registros numerados e nomeados atualmente em uso

5.12

Listando arquivos abertos

Suponha que voc abriu vrios arquivos txt assim:

vim *.txt
Para listar os arquivos aberto faa:

:buffers

5.13 Dividindo a janela com o prximo arquivo da lista de buers 33


Usando o comando acima o Vim exibir a lista de todos os arquivos abertos, aps exibir a lista voc pode escolher um dos arquivos da lista, algo como:

: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

Dividindo a janela com o prximo arquivo da lista de buers

:sn
O comando acima uma abreviao de

split next, ou seja, dividir e prximo.

5.14

Como colocar um pedao de texto em um registro?

<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

Como criar um registro em modo visual?

Inicie a seleo visual com o atalho

Shift-v ..... seleciona linhas inteiras


pressione a letra  j at chegar ao ponto desejado, agora faa

"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

inserido manualmente apenas uma

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

let @d=strftime("c")<cr> imap ,d <cr-r>d nmap ,d "dp


As atribuies acima correspondem a: 1. Guarda a data na varivel d 2. Mapeamento para o modo de insero imap digite ,d 3. Mapeamento para o modo normal nmap digite ,d E digitar ,d normalmente Desmisticando o strftime

" 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

5.17 Como selecionar blocos verticais de texto?


5.17

35

Como selecionar blocos verticais de texto?

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

http://rayninfo.co.uk/vimtips.html http://aprendolatex.wordpress.com http://pt.wikibooks.org/wiki/Latex

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

Usando Expresses Regulares em buscas


/ ............ inicia uma busca (modo normal) \%x69 ........ cdigo da letra `i' /\%x69 ...... localiza a letra `i' - hexadecimal 069 \d .......... ^ ........... $ ........... \+ .......... /^\d\+$ ..... localiza nmeros comeo de linha final de linha um ou mais localiza somente dgitos

\s .......... localiza espaos /\s\+$ ...... localiza espaos no final da linha


Para aprender mais sobre Expresses Regulares leia: 1.

http://guia-er.sourceforge.net

2. :help regex

6.2 Editando em nova janela


o cursor, teclar cursor, tecle

37

Um meio mais rpido para encontrar a prxima ocorrncia de uma palavra sob

#.

*.

Para encontrar uma ocorrncia anterior da palavra sob o

(Para isso, o cursor deve estar posicionado sobre a palavra que

deseja procurar.)

6.2

Editando em nova janela

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

inserindo linha antes e depois

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

Obtendo informaes do arquivo


ga ............. mostra o cdigo do caractere em decimal hexa e octal ^g ............. mostra o caminho e o nome do arquivo

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

Trabalhando com registradores

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 ..

apaga apaga cola" cola" apaga copia copia copia copia

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

Trocando palavras de lugar: coloque o cursor no espao antes da 1

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

Corrigindo a indentao de cdigos

Selecione o bloco de cdigo, por exemplo

vip ..... visual ``h'' (selecione este pargrafo) = ....... corrija a indentao do que selecionei :)

6.9

Usando o le explorer

O Vim navega na rvore de diretrios com o comando

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

Selecionando ou deletando contedo de tags html

<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

Para substituir foo por bar da primeira ltima linha do arquivo:

: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

* Busca usando alternativas:

/end\(if\|while\|for\) \|
Buscar if , while e for. Observe que necessrio `escapar' os caracteres e

\),

\(,

caso contrrio eles sero interpretados como caracteres comuns.

* 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.

set set set set

ignorecase .. smartcase ... hlsearch .... incsearch ...

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

/^.\{,30\}$ ^ ...... representa comeo de linha


* Apaga todas as tags html/xml de um arquivo

:%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

que tem cdigo hexadecimal igual a

:%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

buscando um padro e gravando em outro arquivo

:'a,'b g/^Error/ . w >> errors.txt


Apenas imprimir linhas que contm determinada palavra, isto til quando voc quer ter uma viso sobre um determina aspecto do seu arquivo vejamos:

:set nu ..... habilita numerao :g/Error/p .. apenas mostra as linhas correspondentes


numerar linhas

:let i=1 | g/^/s//\=i."\t"/ | let i=i+1


Para copiar linhas comeadas com

Error para o nal do arquivo faa:

: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.

global, ignore case

conrm,

podendo ser omi-

Pegar caracteres numricos e jogar no nal do arquivo?

: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/pattern/ normal "Ayy


Copiar linhas que contm um padro e a linha subsequente para o nal

:g/padro/;+1 copy $

6.14 Dicas
6.14 Dicas

43

Para colocar a ltima busca em uma substituio faa:

:%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

Filtrando arquivos com o vimgrep

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'.

~/ ............ equivale a /home/user :lvimgrep /dicas/ ~/**/*.txt | ls

6.16

Copiar a partir de um ponto

: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:

Dicas das lista vi-br


http://groups.yahoo.com/group/vi-br/message/853

Problema: Essa deve ser uma pergunta comum. Suponha o seguinte contedo de arquivo:

... // vrias linhas texto1000texto // texto1000texto // texto1000texto // texto1000texto // texto1000texto // ... // vrias linhas

linha linha linha linha linha

i i+1 i+2 i+3 i+4

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

linha linha linha linha linha

i i+1 i+2 i+3 i+4

Ou seja, somasse 1 a cada um dos nmeros entre os textos especicando como

: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:

:let i=1 | 10,20 g/texto\d\+texto/s/\d\+/\=submatch(0)+i/ | let i=i+1


Observao: 10,20 o intervalo, ou seja, da linha 10 at a linha 20

:help / :help :s :help pattern

6.18
fonte:

Dicas do dicas-l
http://www.dicas-l.com.br/dicas-l/20081228.php

6.19

Juno de linhas com Vim

Colaborao: Rubens Queiroz de Almeida Recentemente precisei combinar, em um arquivo, duas linhas consecutivas. O arquivo original continha linhas como:

Matrcula: 123456 Senha: yatVind7kned Matrcula: 123456 Senha: invanBabnit3


E assim por diante. Eu precisava converter este arquivo para algo como:

Matrcula: 123456 - Senha: yatVind7kned Matrcula: 123456 - Senha: invanBabnit3


Para isto, basta executar o comando:

:g/^Matrcula/s/\n/ - /
Explicando:

6.19 Juno de linhas com Vim


s/isto/aquilo/g .. g ................ /................. ^ ................ Matrcula ........ s ................ /\n/ - / ......... substitui isto por aquilo comando global inicia padro de busca indica comeo de linha palavra a ser buscada inicia substituio troca quebra de linha (\n), por -

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

Abrindo e fechando janelas


Ctrl-w-n Ctrl-w-q Ctrl-w-c Abre uma nova janela acima Fecha a janela atual Fecha a janela atual (:close)

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

7.4 File Explorer


7.4 File Explorer

47

Para abrir o gerenciador de arquivos do Vim use:

: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.

map <F2> <Esc>:Vex<cr>


Maiores informaes:

:help buffers :help windows

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

e por m samos do modo de insero

<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

8.1 Repetindo a digitao de uma linha


8.1 Repetindo a digitao de uma linha

49

Para repetir a linha acima (modo de insero) use

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

Guardando trechos em registros

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

Macros: gravando comandos

Imagine que voc tem o seguinte trecho de cdigo:

stdio.h fcntl.h unistd.h stdlib.h


e quer que ele que assim:

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

novamente (no modo Normal).

Assim, podemos solucionar nosso problema:

<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.

Para executar quatro vezes, digite:

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

Se voc zer uma substituio em um intervalo como abaixo

:5,32s/isto/aquilo/g
Pode repetir esta substituio em qualquer linha que estiver apenas usando este smbolo

8.5 Repetindo comandos


&
O Vim substituir na linha corrente isto por aquilo. ltima substituio globalmente assim:

51

Podemos repetir a

g&

8.5

Repetindo comandos
@:

O atalho acima repete o ltimo comando no prprio modo de comandos

8.6

Scripts Vim

Usando um

script para modicar um nome em vrios arquivos:

Crie um arquivo

chamado `subst.vim' contendo os comandos de substituio e o comando de salvamento :wq.

%s/bgcolor="e"/bgcolor="e"/g wq
Para executar um

script, digite o comando

:source nome_do_script.vim

8.7

Usando o comando bufdo


No exemplo a seguir, abriremos todos os arquivos

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.

vim *.html :bufdo %s/bgcolor="e"/bgcolor="e"/g | :wall


Para fechar todos os arquivos faa:

: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

Colocando a ltima busca em um comando


Ctrl = ^

Observao: lembre-se

:^r/

52
8.9

Repetio de comandos
Inserindo o nome do arquivo no comando
:^r%

8.10
^r:

Inserindo o ltimo comando

Se preceder com :

voc repete o comando, equivale a acessar o histrico de

comandos com as setas

:^r:

8.11

Para repetir exatamente a ltima insero

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):

:!ls .... visualiza o contedo do diretrio


Lembrando que o anexando um simples ponto, a sada do comando torna-se o domcumento que est sendo editado:

:.!ls .... imprime na tela o contedo do diretrio


A seguir, veja alguns exemplos de utilizao:

9.1

Ordenando

Podemos usar o comando

sort que ordena o contedo de um arquivo dessa forma:

:5,15!sort ..... odena da linha 5 at a linha 15


O comando acima ordena da linha 5 at a linha 15. O comando simplesmente

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

sort --help ou man sort (no Unix) ou sort /? (no Windows).

9.2

Removendo linhas duplicadas


:%!uniq

O caractere % representa a regio equivalente ao arquivo atual inteiro. verso do Vim 7 em diante tem um comando duplicadas

uniq

sort

que permite remover linhas

e ordenar, sem a necessidade de usar comandos externos, para

mais detalhes:

:h sort

54
9.3

Comandos externos
Ordenando e removendo linhas duplicadas no Vim 7
:sort u

Quando a ordenao envolver nmeros faa:

:sort n

9.4
madas

Beautiers

A maior parte das linguagens de programao possui ferramentas externas cha-

beautiers, que servem para embelezar o cdigo, atravs da indentao e

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 :

~\_vimrc c:\documents and settings\seuusuario\_vimrc

10.1

Onde colocar plugins e temas de cor

No Windows procure ou crie uma pasta chamada vimles que ca em

c:\documents and settings\seuusuario\


No GNU/Linux procure ou crie uma pasta chamada .vim que deve car em

/home/user/.vim
Nesta pasta '.vim' ou 'vimles' deve haver pastas tipo

vimfiles | +--color | +--doc | +--syntax | +--plugin


Na seo Plugins 13 pgina 73 esto descritos alguns plugins interessantes!

56
10.2 Comentrios

Como editar preferncias no Vim

" 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:

Os comandos `set' podem ser colocados no

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

ajusta o pargrafo atual em modo normal

" * coloca 2 espaos aps o . quando usando o gq "set nojoinspaces

10.4 Exibindo caracteres invisveis

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

Exibindo caracteres invisveis

:set list

58
10.5

Como editar preferncias no Vim


Denindo macros previamente
s
para ordenar e retirar linhas duplicadas

Denindo uma macro de nome

let @s=":sort u"


Para executar a macro

denida acima faa:

@s
O Vim colocar no comando

:sort -u
Bastando pressionar

<Enter>.

Observao:

esta macro prvia pode car no

vimrc ou ser digitada em comando :

: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

Notas sobre mapeamentos

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

Para ler mais sobre atalhos de tecla no Vim acesse

: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

Recarregando o arquivo de congurao

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

Como editar preferncias no Vim


\&amp; &amp;amp; \&lt; &amp;lt; \&gt; &amp;gt; \. &amp;middot;
signica: em modo de insero no remapear, ou seja ele

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:

map <F11> <Esc>:set nu!<cr>


Permite habilitar ou desabilitar nmeros de linha do arquivo corrente. A exclamao ao nal torna o comando booleano, ou seja, se a numerao estiver ativa ser desabilitada, caso contrrio ser ativada. O  <cr> ao nal representa um

Enter.

10.6.3

Limpando o registro de buscas

A cada busca, se a opo `hls' estiver habilitada o Vim faz um destaque colorido, mas se voc quiser limpar pode fazer este mapeamento

nno <S-F11> <Esc>:let @/=""<CR>


um mapeamento para o modo normal que faz com que a combinao de teclas Shift-F11 limpe o registro`' de buscas

10.6.4

Destacar palavra sob o cursor

nmap <s-f> :let @/=">"<CR>


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

10.6.5

Remover linhas em branco duplicadas

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:

map ......... ,d .......... <Esc> ....... : ........... % ........... s ...........

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

Podemos fazer mapeamentos globais ou que funcionam em apenas um modo:

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:

Como editar preferncias no Vim

au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim


No exemplo acima o Vim aplica autocomandos para arquivos novos BufNewle ou existentes BufReadd do tipo `txt' e para estes tipos carrega um arquivo de syntax, ou seja, um esquema de cores especco.

" http://aurelio.net/doc/vim/txt.vim coloque em ~/.vim/syntax au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim


Para arquivos do tipo txt `*.txt' use um arquivo de syntax em particular O autocomando abaixo coloca um cabealho para scripts `bash' caso a linha 1 esteja vazia, observe que os arquivos em questo tem que ter a extenso .sh

au BufNewFile,BufRead *.sh if getline(1) == "" | normal ,sh

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

set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]


Caso este cdigo no funcione acesse este link:

120126.

http://www.linux.com/feature/

10.8.3

Rolar outra janela

Se voc dividir janelas tipo

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

Funo para numerar linhas

link para a dica:

http://vim.wikia.com/wiki/Number_a_group_of_lines

10.8.5

Funo para trocar o esquema de cores

function! <SID>SwitchColorSchemes() if exists(``e'') if g:colors_name == 'native' colorscheme billw elseif g:colors_name == 'billw'

64

Como editar preferncias no Vim


colorscheme desert elseif g:colors_name == 'desert' colorscheme navajo-night elseif g:colors_name == 'navajo-night' colorscheme zenburn elseif g:colors_name == 'zenburn' colorscheme bmichaelsen elseif g:colors_name == 'bmichaelsen' colorscheme wintersday elseif g:colors_name == 'wintersday' colorscheme summerfruit elseif g:colors_name == 'summerfruit' colorscheme native endif endif endfunction map <silent> <F6> :call <SID>SwitchColorSchemes()<CR>

baixe os esquemas aqui:

http://nanasi.jp/old/colorscheme_0.html

10.8.6

Uma funo para inserir cabealho de script

para chamar a funo basta pressionar, sh em modo normal

" 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

Como editar preferncias no Vim

<leader>
em geral a barra invertida  \, na dvida

:help <leader>

10.9
fonte:

Como adicionar o Python ao

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

Ctrl-w Ctrl-F para abrir um arquivo sob o cursor

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 Ferramentas.ExibirNomeDoTema :echo g:colors_name<cr>


O comando acima diz:

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

amenu Ferramentas.Exibir\ nome\ do\ tema :echo g:colors_name<cr>

10.11 Criando menus para um modo especco


10.11

67

Criando menus para um modo especco


Normal, Visual e Operator-pending Modo Normal Modo Visual Operator-pending modo Insert e Comando Modo de insero Modo de comando Todos os modos

: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>

Destaca espaos e tabulaes redundantes

highlight RedundantWhitespace ctermbg=red guibg=red match RedundantWhitespace /\s\+$\| \+\ze\t/


Explicando com detalhes

68
\s ..... \+ ..... $ ...... \| ..... `` '' .. \+ ..... \ze .... \t .....

Como editar preferncias no Vim


espao uma ou mais vezes no final da linha ou espao (veja imagem acima) uma ou mais vezes at o fim tabulao

Portanto a expresso regular acima localizar espaos ou tabulaes no nal de linha e destacar em vermelho. "Remove espaos redundantes no m das linhas

map <F7> <Esc>mz:%s/\s\+$//g<cr>`z


Um detalhe importante

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

map <F6> <Esc>:vne .<cr><bar>:vertical resize -30<cr><bar>:set nonu<cr>


Podemos usar Expresses Regulares  em buscas do Vim veja um exemplo para retirar todas as tags html

"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

Complementao com tab

"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

auto-texto para o Vim.

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

O potwiki um wiki completo para o Vim, fun-

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

~/.vim/plugin. ~/.vim/plugin/potwiki.vim voc dene /home/docs/textos/wiki. a linha

Mais ou menos na linha 53 do potwiki cou assim:

onde ele guardar os arquivos, no meu caso

call s:default('home',"~/.wiki/HomePage")
Outra forma de indicar a pgina inicial seria colocar no seu .virmc

let potwiki_home = "$HOME/.wiki/HomePage"

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

11.2 Salvamento automtico para o Wiki


<BS> .... move para os WikiWords anteriores (mesma pgina) \wr .... recarrega WikiWords

71

11.2

Salvamento automtico para o Wiki

Procure por uma seo

autowrite no manual do potwiki

: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

e crio um pacote tar.gz e

mando para web como forma de manter um backup.

11.4

Problemas com codicao de caracteres

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

Mova-se rapidamente no texto

Leia sobre como mover-se no documento no captulo 2

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'

veja a seo 3.15 na pgina 20.

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

12.3 Use quanticadores

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:

"coloque a linha abaixo no seu vimrc :set hlsearch


Agora use asterisco para destacar todas as ocorrncias do padro desejado e use a letra `n' para pular entre ocorrncias, caso deseje seguir o caminho inverso use `N'.

12.3

Use quanticadores

Em modo normal voc pode fazer

10j ..... 5dd ..... :50 ..... 50gg ....

desce 10 apaga as vai para vai para

linhas prximas 5 linhas a linha 50 a linha 50

12.4

Edite vrios arquivos de uma s vez

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

vim *.html :bufdo :%s/bgcolor=``f''/bgcolor=``e''/g :wall :qall


Ainda com relao edio de vrios arquivos poderia-mos abrir alguns arquivos txt e mudar de um para o outro assim:

:wn
O w signica gravar e o n signica Veja tambm: 2

next,

ou seja, gravaria-mos o que foi

modicado no arquivo atual e mudaramos para o prximo.

74
12.5

Hbitos para edio efetiva


No digite duas vezes

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

iab tambem tambm iab linux GNU/Linux


* No modo de insero voc pode usar

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)

iabbrev teh the syntax keyword WordError teh


As linhas acima criam uma abreviao para erro de digitao da palavra 'the' e destaca textos que voc abrir que contenham este erro.

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-

No arquivo de congurao do Vim

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

12.8 Use o le explorer

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

Use o le explorer

O Vim pode navegar em pastas assim:

vim .
Voc pode usar j e k para navegar e

Enter para editar o arquivo selecionado

12.9

Torne as boas prticas um hbito

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.

NerdTree, que divide uma janela que permite navegar

pelos diretrios do sistema a m de abrir arquivos a serem editados.

13.1

Como testar um plugin sem instal-lo?

: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

+ /HOME/USER | | + .VIM | | + PLUGIN


Obs: Alguns plugins dependem da verso do Vim, para saber qual a que est atualmente instalada:

:ver

ATEX 13.2 Plugin para L


13.2
net/

77

ATEX Plugin para L


templates

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

ATEX Criando folders para arquivos L

set foldmarker=\\begin,\\end set foldmethod=marker


Adicionar marcadores (

AT X labels) s sees de um documento L E

.s/^\(\\section\)\({.*}\)/\1\2\r\\label\2

13.4

ATEX Criando sees L

o comando abaixo substitui

==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

Plugin para manipular arquivos

http://www.vim.org/scripts/script.php?script_id=2337#0.1.9 Para entender este plugin acesse este vdeo: http://www.screencast.com/t/P6nJkJ0DE

13.6

Complementao de cdigos

O plugin snippetsEmu um misto entre complementao de cdigos e os chamados modelos ou

templates.

Insere um trecho de cdigo pronto, mas vai

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

Um wiki para o Vim

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

Acessando documentao do python no Vim

http://www.vim.org/scripts/script.php?script_id=910

13.10

Formatando textos planos com syntax

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)]

http://www.rayninfo.co.uk/vimtips.html http://www.geocities.com/yegappan/vim_faq.txt http://br.geocities.com/cesarakg/vim-cook-ptBR.html http://larc.ee.nthu.edu.tw/~cthuang/vim/files/vim-regex/vim-regex. htm http://aurelio.net/vim/vimrc-ivan.txt http://vivaotux.blogspot.com/search/label/vim http://www.tug.dk/FontCatalogue/seriffonts.html

Você também pode gostar