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

Livre GNU (GFDL).

Use

Licena de Documentao

Este trabalho est em constante aprimoramento,


e fruto da colaborao de voluntrios.

Participe

do desenvolvimento enviando sugestes e melhorias;


acesse o site do projeto no endereo:

http://code.google.com/p/vimbook

Verso gerada em

8 de Janeiro de 2009

Autores

Srgio Luiz Arajo Silva


Douglas Adriano Augusto
.
.
.

<voyeg3r@gmail.com>
<daaugusto@gmail.com>
.
.
.

Contedo

1 Introduo

1.1

Dicas iniciais

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

1.2

Ajuda integrada . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3

Em caso de erros . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4

Como interpretar atalhos e comandos

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

1.5

Modos de operao . . . . . . . . . . . . . . . . . . . . . . . . . .

1.6

Entrando em modo de edio

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

1.7

Erros comuns . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.8

Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Movendo-se no documento

2.1

Big words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2

Os saltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

2.3

Copiar e Deletar

10

2.4

Paginando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

2.5

Usando marcadores . . . . . . . . . . . . . . . . . . . . . . . . . .

13

2.6

Marcas globais

13

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

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

3 Editando

14

3.1

Deletando uma parte do texto . . . . . . . . . . . . . . . . . . . .

14

3.2

Copiando sem deletar

15

3.3

Lista de alteraes

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

15

3.4

Forando a edio de um novo arquivo . . . . . . . . . . . . . . .

16

3.5

Ordenando

16

3.6

Removendo linhas duplicadas

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

17

3.7

Editando em modo de comando . . . . . . . . . . . . . . . . . . .

17

3.8

O arquivo alternativo . . . . . . . . . . . . . . . . . . . . . . . . .

17

3.9

Incrementando nmeros em modo normal

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

18

3.10 Repetindo a digitao de linhas . . . . . . . . . . . . . . . . . . .

18

3.11 Movendo um trecho de forma inusitada

18

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

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

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

3.12 Uma calculadora diferente . . . . . . . . . . . . . . . . . . . . . .

18

3.13 Desfazendo

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

18

3.13.1 Undo tree . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

3.14 Salvando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

3.15 Usando marcas

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

20

3.16 Marcas globais

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

20

3.17 Dicas extras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

3.17.1 Abrindo o ltimo arquivo rapidamente . . . . . . . . . . .

21

CONTEDO
3.17.2 Modelines . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

3.18 Edio avanada de linhas . . . . . . . . . . . . . . . . . . . . . .

22

4 Folders

24

4.1

Mtodos de dobras . . . . . . . . . . . . . . . . . . . . . . . . . .

4.2

Manipulando dobras

4.3

Criando dobras usando o modo visual

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

5 Registros

24
25
25

26

5.1

O registro sem nome  . . . . . . . . . . . . . . . . . . . . . . . .

26

5.2

Registros nomeados de 0 a 9 . . . . . . . . . . . . . . . . . . . . .

27

5.3

Registro de pequenas delees . . . . . . . . . . . . . . . . . . . .

27

5.4

Registros nomeados de a at z ou A at Z

. . . . . . . . . . .

27

5.5

Registros somente leitura : . % # . . . . . . . . . . . . . . . . .

27

5.6

Registro de expresses . . . . . . . . . . . . . . . . . . . . . . . .

28

5.7

Registros de arrastar e mover . . . . . . . . . . . . . . . . . . . .

28

5.8

Registro buraco negro "_

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

28

5.9

Registros de buscas / . . . . . . . . . . . . . . . . . . . . . . . .

28

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

. .

29
29
29
30

5.14 Como colocar um pedao de texto em um registro? . . . . . . . .

30

5.15 Como criar um registro em modo visual? . . . . . . . . . . . . . .

30

5.16 Como denir um registro no vimrc?

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

31

5.17 Como selecionar blocos verticais de texto? . . . . . . . . . . . . .

32

5.18 Referncias

32

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

6 Buscas e substituies

33

6.1

Usando Expresses Regulares em buscas . . . . . . . . . . . . .

6.2

Editando em nova janela . . . . . . . . . . . . . . . . . . . . . . .

34

6.3

inserindo linha antes e depois . . . . . . . . . . . . . . . . . . . .

34

6.4

Obtendo informaes do arquivo

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

34

6.5

Trabalhando com registradores

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

35

6.6

Edies complexas

6.7

Indentando

6.8

Corrigindo a indentao de cdigos . . . . . . . . . . . . . . . . .

36

6.9

Usando o le explorer

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

36

6.10 Selecionando ou deletando contedo de tags html . . . . . . . . .

36

6.11 Substituies

36

6.12 Exemplos

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

35

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

36

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

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

6.13 O comando global g


6.14 Dicas

33

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

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

6.15 Filtrando arquivos com o vimgrep

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

37
39
40
40

6.16 Copiar a partir de um ponto . . . . . . . . . . . . . . . . . . . . .

40

6.17 Dicas das lista vi-br

40

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

6.18 Dicas do dicas-l . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

6.19 Juno de linhas com Vim . . . . . . . . . . . . . . . . . . . . . .

41

CONTEDO

7 Trabalhando com janelas

43

7.1

Dividindo a janela

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

7.2

Abrindo e fechando janelas

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

43

7.3

Manipulando janelas . . . . . . . . . . . . . . . . . . . . . . . . .

43

7.4

File Explorer

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

44

7.5

Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

8 Repetio de comandos

43

45

8.1

Repetindo a digitao de uma linha

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

8.2

Guardando trechos em registros . . . . . . . . . . . . . . . . . .

46

8.3

Macros: gravando comandos . . . . . . . . . . . . . . . . . . . . .

46

8.4

Repetindo substituies

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

47

8.5

Repetindo comandos . . . . . . . . . . . . . . . . . . . . . . . . .

48

8.6

Scripts Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

8.7

Usando o comando bufdo

48

8.8

Colocando a ltima busca em um comando

8.9

Inserindo o nome do arquivo no comando

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

8.10 Inserindo o ltimo comando

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

46

48

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

49

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

49

8.11 Para repetir exatamente a ltima insero

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

9 Comandos externos

49

50

9.1

Ordenando

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

9.2

Removendo linhas duplicadas

9.3

Ordenando e removendo linhas duplicadas no Vim 7

. . . . . . .

51

9.4

Beautiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51

9.5

Referncias

51

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

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

10 Como editar preferncias no Vim


10.1 Onde colocar plugins e temas de cor

50
50

52
. . . . . . . . . . . . . . . .

52

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

53

10.3 Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53

10.4 Exibindo caracteres invisveis

54

10.2 Comentrios

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

10.5 Denindo macros previamente . . . . . . . . . . . . . . . . . . . .

55

10.6 Mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

55

10.6.1 Notas sobre mapeamentos . . . . . . . . . . . . . . . . . .

55

10.6.2 Recarregando o arquivo de congurao . . . . . . . . . .

56

10.6.3 Limpando o registro de buscas

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

57

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

57

10.6.4 Destacar palavra sob o cursor

10.6.5 Remover linhas em branco duplicadas

. . . . . . . . . . .

57

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

58

10.6.7 Convertendo as iniciais de um documento para maisculas

58

10.6.6 Mapeamentos globais


10.7 Autocomandos
10.8 Funes

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

58

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

59

10.8.1 Fechamento automtico de parnteses

. . . . . . . . . . .

59

10.8.2 Funo para barra de status . . . . . . . . . . . . . . . . .

60

10.8.3 Rolar outra janela

60

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

10.8.4 Funo para numerar linhas . . . . . . . . . . . . . . . . .

60

10.8.5 Funo para trocar o esquema de cores . . . . . . . . . . .

60

10.8.6 Uma funo para inserir cabealho de script . . . . . . . .

61

10.8.7 Funo para inserir cabealhos Python . . . . . . . . . . .

61

CONTEDO
10.8.8 Funo para pular para uma linha

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

10.8.9 Funo para gerar backup . . . . . . . . . . . . . . . . . .


10.9 Como adicionar o Python ao
10.10Criando um menu

path do Vim?

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

62
62
63

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

63

10.11Criando menus para um modo especco . . . . . . . . . . . . . .

64

10.12Exemplo de menu . . . . . . . . . . . . . . . . . . . . . . . . . . .

64

10.13Outros mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . .

64

10.14Complementao com tab

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

65

10.15Abreviaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

10.16Referncias

66

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

11 Um wiki para o Vim

67

11.1 Como usar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


11.2 Salvamento automtico para o Wiki

67

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

68

11.3 Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

68

11.4 Problemas com codicao de caracteres . . . . . . . . . . . . . .

68

12 Hbitos para edio efetiva

69

12.1 Mova-se rapidamente no texto . . . . . . . . . . . . . . . . . . . .


12.2 Use marcas

69

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

69

12.3 Use quanticadores . . . . . . . . . . . . . . . . . . . . . . . . . .

70

12.4 Edite vrios arquivos de uma s vez

70

12.5 No digite duas vezes


12.6 Use dobras

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

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

71

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

71

12.7 Use autocomandos

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

71

12.8 Use o le explorer

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

72

12.9 Torne as boas prticas um hbito


12.10Referncias

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

72

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

72

13 Plugins

73

13.1 Como testar um plugin sem instal-lo? . . . . . . . . . . . . . . .

73

AT X . . . . . . . . . . . . . . . . . . . . . . . . . .
13.2 Plugin para L
E
AT X . . . . . . . . . . . . . . . .
13.3 Criando folders para arquivos L
E
A
13.4 Criando sees L TEX . . . . . . . . . . . . . . . . . . . . . . . . .

74

13.5 Plugin para manipular arquivos . . . . . . . . . . . . . . . . . . .

74

13.6 Complementao de cdigos . . . . . . . . . . . . . . . . . . . . .

74

13.7 Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

75

74
74

13.8 Um wiki para o Vim . . . . . . . . . . . . . . . . . . . . . . . . .

75

13.9 Acessando documentao do python no Vim . . . . . . . . . . . .

75

13.10Formatando textos planos com syntax

75

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 ,

entre outras facilidades.

Conta com uma comunidade

3 um dos editores mais usados nos siste-

bastante atuante e , ao lado do Emacs

mas GNU/Linux , mas pode ser tambm instalado em outros sistemas, como o
Windows e o Macintosh. O site ocial do Vim :

1.1

http://www.vim.org.

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

Introduo

quase todos os comandos podem ser abreviados, no caso  help pode ser chamado por  h e assim por diante. Para chamar a ajuda do Vim:
Pressione

<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

A tecla  <Ctrl> representada na maioria dos manuais e na ajuda pelo caractere  ^ circunexo, ou seja, o atalho

Ctrl-L

aparecer assim:

^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

<Esc>,

mas o Vim tem, em modo normal

teclas de direo mais prticas

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

Entrando em modo de edio


a
i
A
I
o
O

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

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

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

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

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

Insero

buffers

veja o captulo 5.

Neste modo feita a insero de texto. Para entrar neste modo basta

pressionar a tecla  i (

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

substituir um nico caractere voc pode usar:

5 No

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

Para

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:

Visual

i,a,I,A,o,O

Neste modo podemos selecionar blocos verticais de texto.

exibido

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 .

Comando

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

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

modo normal acionar acidentalmente o  <Caps Lock>

e ten-

tar rolar o documento usando a letra  J, o efeito a juno das linhas,
alis um timo recurso quando a inteno de fato esta.

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, se voc quiser digitar 10 vezes  isto

um teste

faa

assim:

<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

11

Dicas

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

Para o Vim 

palavras-separadas-por-hfen

so consideradas em separado, por-

tanto se voc usar, em modo normal  w avanar entre as palavras ele pular

uma de cada vez, no entanto se usar  W em maisculo (como visto) ele pular
a a-palavra-inteira :)

2.2 Os saltos

13

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

:n<Enter> ..... vai para linha ``n''


ngg ............ vai para linha ``n''
onde  n corresponde ao nmero da linha.
Para retornar ao modo normal pressione

2.2

<Esc>

ou use

Ctrl-[ (^[).

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

Deletar est associado letra  d.

dd .... deleta linha atual


D ..... deleta restante da linha
Dica: Voc pode combinar o comando de deleo  d com o comando de movimento (considere o modo normal) para apagar at a prxima vrgula use:  df,.

14

Movendo-se no documento

Copiar est associado letra  y.

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

pot

denio basta posicionar o cursor sobre a palavra

e desejar mover-se at sua

pot

e pressionar (em modo

normal)

gd
Se a varivel for global, ou seja, estive fora do documento (provavelmente em
outro) use:

2.4 Paginando

15

gD
Quando denimos uma varivel tipo

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

Movendo-se no documento
'0

Abrir o penltimo arquivo editado

'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

Editando
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

change

mudana ao

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

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

3.2

modifica
modifica
modifica
modifica

uma palavra
um pargrafo
uma sentena
at o final da linha

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

O Vim mantm uma lista de alteraes, para avanar nas alteraes use

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

19

Forando a edio de um novo arquivo

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

Ordenando

O Vim 7 passa a ter um comando de ordenao que tambm retira linhas duplicadas

: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

Editando
Removendo linhas duplicadas
:sort u

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

21

Incrementando nmeros em modo normal

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-y
Ctrl-e
Ctrl-x
Ctrl-a

.........
.........
Ctrl-l ..
.........

repete
repete
repete
repete

linha acima
linha abaixo
linhas inteiras
a ltima insero

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

branch ou galho, derivao de alterao criado. Basicamente,


branches nos permitem acessar quaisquer alteraes ocorrida no arquivo.

um novo

os

22

Editando

Um exemplo didtico
Siga estes passos (para cada passo

Passo 1

<Esc>,

ou seja, saia do modo de insero)

- digite na linha 1 o seguinte texto

# controle de fluxo <Esc>

Passo 2

- digite na linha 2 o seguinte texto

# um lao for <Esc>

Passo 3

- Nas linhas 3 e 4 digite...

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

Passo 4

- pressione u duas vezes (voc voltar ao passo 1)

Passo 5

- Na linha 2 digite

# operador ternrio <Esc>

Passo 6

- na linha 3 digite

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


Obs: A necessidade do

Esc

<Esc>

para demarcar as aes, pois o Vim considera

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

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

23

:w! >> ``file''


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

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

Para maiores informaes, digite:

: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

Editando
'A

Isto far o Vim dar um salto at a marca A mesmo que esteja em outro arquivo,
bastando apenas que o mesmo esteja aberto.

Para abrir vrios arquivos uma

soluo seria:

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

25

Modelines

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

modelines pode ser um grande recurso para o

seu dia-a-dia pois voc pode coloca-las dentro dos comentrios!

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

Editando

Obs: claro que um comando de substituio simples

: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

ou

a)

Ctrl-v Esc,

e retornar

de forma a

(sada do modo de insero). Por exemplo,

suponha agora que deseja-se mudar a frase 

no um texto velho; pode ser feito assim:

este um texto novo

para 

este

:5,$ normal 02wino ^[$ciwvelho


Decompondo o comando acima temos:

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

Ctrl-v

utilizada para inserir caracteres de controle na sua

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

4.1

seleo por linha


desce linha
cria o folder
abre o folder

Mtodos de dobras

O Vim tem seis modos

fold, so eles:

syntax)

Sintaxe (

Indentao (

Marcas (

Manual

indent)

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

Folders

Outro modo para determinar o mtodo de dobra seria colocando na ltima linha
do seu arquivo algo assim:

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

modeline,

leia mais na seo  3.17.2 modelines na pgina 22.

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)

Para abrir e fechar as dobras usando a barra de espaos coloque o trecho abaixo
no seu arquivo de congurao do Vim

.vimrc

- veja 10.

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
Registros nomeados de 0 a 9

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

5.5

copia o pargrafo atual para o registro ``a''


registro a
yank (copia)
inner paragraph (este pargrafo)

Registros somente leitura : . % #


":
".
"%
"#

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

armazena
armazena
contm o
contm o

o ltimo comando
uma cpia do ltimo texto inserido
nome do arquivo corrente
nome do arquivo alternativo

Uma forma prtica de usar registros em modo de insero usando

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

%
:
/
a

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

insere
insere
insere
insere

o
o
a
o

Ctrl-r

nome do arquivo atual


ltimo comando digitado
ltima busca efetuada
registro `a'

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


pressionando

Ctrl-a

5.6 Registro de expresses


5.6

31

Registro de expresses
"=

Este registro na verdade usado em algumas funes avanadas.

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

Ctrl-v

encontrada em muitas aplicaes.

Finalmente, o

registro

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

and-drop).
5.8

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

Registros

5.10

Manipulando registros

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

@a=@_
@a=``''
@a=@"
@*=@a
@*=@:
@*=@/
@*=@%

:
:
:
:
:
:
:
:

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

:
:
:
:

Insere
Insere
Insere
Insere

Em modo de insero

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

o registro de pequenas delees


registros 0-9 e a-z
o nome do arquivo
o contedo de uma varivel

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


coloque em seu

~/.vimrc

n.

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

5.13

`grave' --> w

e prximo

`next' --> n

Dividindo a janela com o prximo arquivo


da lista de buers

:sn
O comando acima uma abreviao de

5.14

split next, ou seja, dividir e prximo.

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

Registros

5.16

Como denir um registro no vimrc?

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

37

Um meio mais rpido para encontrar a prxima ocorrncia de uma palavra sob
o cursor, teclar
cursor, tecle

#.

*.

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

nha DOS/Windows  \%x0d. Voc pode apagar os caracteres de nal de linha


Dos/Windows usando uma simples substituio, veja mais adiante:

38

Buscas e substituies
:%s/\%x0d//g

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

Edies complexas

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


digite:

deep
Trocando letras de lugar:

xp
Trocando linhas de lugar:

ddp
Tornando todo o texto maisculo gggUG

a palavra e

6.7 Indentando
6.7

39

Indentando
>> .....
^T .....
^D .....
>ip ....

6.8

Indenta a linha atual


Indenta a linha atual em modo de insero
Remove indentao em modo de insero
indenta o pargrafo atual

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

\|

\),

\(,

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

41

Hello World
Hello

World

Hello
World
* Buscar linhas de at 30 caracteres de comprimento

/^.\{,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

^M

que tem cdigo hexadecimal igual a

0d

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

Buscas e substituies

6.13

O comando global g

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

copy pode ser abreviado `co' ou ainda voc pode usar `t' para

mais detalhes leia

: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

43

Dicas

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

Buscas e substituies

Gostaria de um comando que mudasse para

... // vrias linhas


texto1001texto
//
texto1002texto
//
texto1003texto
//
texto1004texto
//
texto1005texto
//
... // vrias linhas

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


range as linhas i,i+4

:10,20! awk 'BEGIN{i=1}{if (match($0, ``+'')) print ``o''


(substr($0, RSTART, RLENGTH) + i++) ``o'``}''
Mas muitos sistemas no tem awk, e logo a melhor soluo mesmo usar o Vim:

: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

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

fonte:

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

Observao:

Ctrl = ^

Ctrl-w-s
Ctrl-w-o

Divide a janela atual em duas (:split)


Faz a janela atual ser a nica (:only)

Caso tenha duas janelas e use o atalho acima

^wo

lembre-se de salvar tudo

ao fechar, pois apesar de a outra janela estar fechada o arquivo ainda estar
carregado, portanto faa:

: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

7.3

Abre uma nova janela acima


Fecha a janela atual
Fecha a janela atual (:close)

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

47

File Explorer

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

49

Repetindo a digitao de uma linha

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

Repetio de comandos
#include
#include
#include
#include

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

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.

Para comear a gravar uma macro no registro 'a ',

digitamos

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

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
esta

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

51

&
O Vim substituir na linha corrente isto por aquilo.

Podemos repetir a

ltima substituio globalmente assim:

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

Com o comando :bufdo podemos executar um comando em um conjunto de


arquivos de forma rpida.

No exemplo a seguir, abriremos todos os arquivos

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

Observao: lembre-se

:^r/

Ctrl = ^

52

Repetio de comandos

8.9

Inserindo o nome do arquivo no comando


:^r%

8.10

Inserindo o ltimo comando

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

sort existe tanto no Windows quanto nos sistemas Unix. Digitando


sort, sem argumentos, o comportamento padro de classicar

simplesmente

na ordem alfabtica (baseando-se na linha inteira). Para maiores informaes


sobre argumentos do comando

sort, digite

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

mais detalhes:

:h sort

sort

que permite remover linhas

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

54

Comandos externos

9.3

Ordenando e removendo linhas duplicadas no


Vim 7
:sort u

Quando a ordenao envolver nmeros faa:

:sort n

9.4

Beautiers

A maior parte das linguagens de programao possui ferramentas externas chamadas

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

Como editar preferncias no Vim

10.2

Comentrios

" linhas comeadas com aspas so comentrios


" e portanto sero ignoradas pelo Vim
Ao fazer modicaes comente usando aspas duplas no comeo da linha, os
comentrios lhe ajudaro mais tarde, pois medida que o seu vimrc cresce
podem aparecer dvidas sobre o que determinado trecho faz :)
As alteraes no vimrc s ser efetivadas na prxima vez que o Vim for aberto a
no ser que voc faa um mapeamento para recarregar, mais adiante voc ver
isto por enquanto faa

:source ~/vimrc ....... se estiver no GNU/Linux


:source ~/_vimrc ...... caso use o sitema virtico

10.3

Set

Os comandos `set' podem ser colocados no

.vimrc:

set nu
ou digitados como comandos:

:set nu

set nu
"mostra numerao de linhas
set showmode "mostra o modo em que estamos
set showcmd "mostra no status os comandos inseridos
set ts=4
"tamanho das tabulaes
syntax on
"habilita cores
set hls
"destaca com cores os termos procurados
set incsearch "habilita a busca incremental
set ai
"auto identao
set aw
"salvamento automtico - veja :help aw
set ignorecase "faz o Vim ignorar maisculas e minsculas nas buscas
set smartcase "Se comear uma busca em maisculo ele habilita o case
set ic
"ignora maiscula e minsculas em uma busca
set scs
"ao fazer uma busca com maisculos considerar case sensitive
set backup
set backupext=.backup
set backupdir=~/.backup,./
set cul
"abreviao de cursor line (destaca linha atual)
set ve=all
"permite mover o cursor para reas onde no h texto
set ttyfast
"Envia mais caracteres ao terminal, melhorando o redraw de janelas
set columns=88 "Determina a largura da janela.
set mousemodel=popup "exibe o contedo de folders e sugestes spell
O comando

gqap

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

Como editar preferncias no Vim

10.5

Denindo macros previamente

Denindo uma macro de nome

para ordenar e retirar linhas duplicadas

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>

:
:
:
:
:
:
:

59
salta um caractere para esquerda
equivale clicar em 'seta acima'
a tecla alt -> m mais a tecla f4
Ctrl-f
backspace
espao
tab

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

10.6.2

cmap.

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

Como editar preferncias no Vim


inoremap
inoremap
inoremap
inoremap

O termo

\&amp; &amp;amp;
\&lt; &amp;lt;
\&gt; &amp;gt;
\. &amp;middot;

inoremap

signica: em modo de insero no remapear, ou seja ele

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

61
quebra de linha
duas ou mais vezes
trocado por \r Enter
globalmente
confirmao do comando

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

Como editar preferncias no Vim

Veja um exemplo:

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.

10.8.3

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

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:

10.8.5

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

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:

10.8.6

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

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

65

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

Como editar preferncias no Vim

O atalho

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

:help <leader>

10.9

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

* ~/.vim/after/ftplugin/python.vim
(on Unix systems)
%* $HOME/vimfiles/after/ftplugin/python.vim
(on Windows systems)
python << EOF
import os
import sys
import vim
for p in sys.path:
# Add each directory in sys.path, if it exists.
if os.path.isdir(p):
# Command 'set' needs backslash before each space.
vim.command(r``s'' % (p.replace(`` '', r`` '')))
EOF
Isto lhe permite usar 'gf ' ou

10.10

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

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

Criando menus para um modo especco

:menu ....
:nmenu ...
:vmenu ...
:omenu ...
:menu! ...
:imenu ...
:cmenu ...
:amenu ...

10.12

67

Normal, Visual e Operator-pending


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

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

Destaca espaos e tabulaes redundantes

<br>

highlight RedundantWhitespace ctermbg=red guibg=red


match RedundantWhitespace /\s\+$\| \+\ze\t/
Explicando com detalhes

68

Como editar preferncias no Vim


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

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>


1

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

69

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>

10.15

Abreviaes

Tambm no

.vimrc

voc pode colocar abreviaes, que so uma espcie de

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/

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.

Mais ou menos na linha 53 do potwiki

~/.vim/plugin/potwiki.vim voc dene


/home/docs/textos/wiki. a linha

onde ele guardar os arquivos, no meu caso


cou assim:

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

71

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


\wr .... recarrega WikiWords

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

Dicas

Como eu mantenho o meu wiki oculto .wiki criei um link para a pasta de
textos

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

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

em modo normal cria uma marca `a'


move o cursor at a marca `a'
deleta at a marca `a'
copia at a marca `a'

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

12.4

desce 10
apaga as
vai para
vai para

linhas
prximas 5 linhas
a linha 50
a linha 50

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

next,

ou seja, gravaria-mos o que foi

modicado no arquivo atual e mudaramos para o prximo.


Veja tambm: 2

74

Hbitos para edio efetiva

12.5

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

~/.vimrc.

Veja

mais na seo 10.15.

as abreviaes fazem o mesmo que auto-correo e auto-texto em outros


editores

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

No arquivo de congurao do Vim

~/.vimrc

voc pode criar comandos auto-

mticos que sero executados diante de uma determinada circunstncia


O comando abaixo ser executado em qualquer arquivo existente, posicionando
o cursor no ltimo local editado

"autocmd BufEnter * lcd %:p:h


autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\
exe "normal g`\"" |
\ endif

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.

12.8

http://www.vim.org/htmldoc/

Use o le explorer

O Vim pode navegar em pastas assim:

vim .
Voc pode usar j e k para navegar e

12.9

Enter para editar o arquivo selecionado

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

http://www.moolenaar.net/habits_2007.pdf
http://vim.wikia.com/wiki/Did_you_know

por Bram Moolenaar

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

13.2 Plugin para LATEX


13.2

77

ATEX
Plugin para L

AT Xest acessvel aqui: http://vim-latex.sourceforge.


Um plugin completo para L
E
Uma vez adicionado o plugin voc pode inserir seus
em:

templates

net/

~/.vim/ftplugin/latex-suite/templates

13.3

ATEX
Criando folders para arquivos L

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

labels) s sees de um documento LATEX

Adicionar marcadores (

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

13.5

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

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

Plugins
Instalao

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:

13.9

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

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