SlideShare uma empresa Scribd logo
Editor de Textos vim
o editor de texto Vim
“Um livro escrito em portuguˆes sobre o editor de
texto Vim. A ideia ´e que este material cres¸ca e
torne-se uma referˆencia confi´avel e pr´atica. Use este
livro nos termos da Licen¸ca de Documenta¸c˜ao Livre
GNU (GFDL).”
Este trabalho est´a em constante aprimoramento,
e ´e fruto da colabora¸c˜ao de volunt´arios. Participe
do desenvolvimento enviando sugest˜oes e melhorias;
acesse o site do projeto no endere¸co:
http://code.google.com/p/vimbook
Vers˜ao gerada em
31 de Agosto de 2009
Autores
S´ergio Luiz Ara´ujo Silva <voyeg3r@gmail.com>
Douglas Adriano Augusto <daaugusto@gmail.com>
Eust´aquio Rangel <eustaquiorangel@gmail.com>
Eduardo Otubo <eduardo.otubo@gmail.com>
Gustavo Dutra <gustavotkg@gmail.com>
Jo˜ao Felipe Mitre <jfmitre@gmail.com>
Willian Molinari <willian.molinari@gmail.com>
...
...
Conte´udo
1 Introdu¸c˜ao 1
1.1 Instala¸c˜ao do Vim . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Instala¸c˜ao no Windows . . . . . . . . . . . . . . . . . . . 2
1.1.2 Instala¸c˜ao no GNU/Linux . . . . . . . . . . . . . . . . . . 3
1.2 Dicas iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Ajuda integrada . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Em caso de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Como interpretar atalhos e comandos . . . . . . . . . . . . . . . 4
1.6 Modos de opera¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.7 Entrando em modo de edi¸c˜ao . . . . . . . . . . . . . . . . . . . . 5
1.8 Erros comuns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Editando 7
2.1 Abrindo o arquivo para a edi¸c˜ao . . . . . . . . . . . . . . . . . . 7
2.2 Escrevendo o texto . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Copiar, Colar e Deletar . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Deletando uma parte do texto . . . . . . . . . . . . . . . 9
2.3.2 Copiando sem deletar . . . . . . . . . . . . . . . . . . . . 10
2.3.3 Usando a ´area de transferˆencia Clipboard . . . . . . . . . 11
2.3.4 Removendo linhas duplicadas . . . . . . . . . . . . . . . . 11
2.4 For¸cando a edi¸c˜ao de um novo arquivo . . . . . . . . . . . . . . . 11
2.5 Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6 Usando o grep interno do Vim . . . . . . . . . . . . . . . . . . . 13
2.7 Lista de altera¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.8 Substituindo tabula¸c˜oes por espa¸cos . . . . . . . . . . . . . . . . 13
2.9 Convertendo para mai´usculas . . . . . . . . . . . . . . . . . . . . 14
2.10 Editando em modo de comando . . . . . . . . . . . . . . . . . . . 14
CONTE ´UDO v
2.11 O arquivo alternativo . . . . . . . . . . . . . . . . . . . . . . . . 15
2.12 Lendo um arquivo para a linha atual . . . . . . . . . . . . . . . . 16
2.13 Incrementando n´umeros em modo normal . . . . . . . . . . . . . 16
2.14 Repetindo a digita¸c˜ao de linhas . . . . . . . . . . . . . . . . . . . 16
2.15 Movendo um trecho de forma inusitada . . . . . . . . . . . . . . 16
2.16 Uma calculadora diferente . . . . . . . . . . . . . . . . . . . . . . 17
2.17 Desfazendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.17.1 Undo tree . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.17.2 M´aquina do tempo . . . . . . . . . . . . . . . . . . . . . . 18
2.18 Salvando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.19 Abrindo o ´ultimo arquivo rapidamente . . . . . . . . . . . . . . . 20
2.20 Modelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.21 Edi¸c˜ao avan¸cada de linhas . . . . . . . . . . . . . . . . . . . . . . 21
2.22 Comentando rapidamente um trecho . . . . . . . . . . . . . . . . 22
2.23 Comparando arquivos com o vimdiff . . . . . . . . . . . . . . . . 22
3 Movendo-se no Documento 24
3.1 Paginando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2 Usando marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.1 Marcas globais . . . . . . . . . . . . . . . . . . . . . . . . 29
4 Folders 30
4.1 M´etodos de dobras . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2 Manipulando dobras . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3 Criando dobras usando o modo visual . . . . . . . . . . . . . . . 32
5 Registros 33
5.1 O registro sem nome “” . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2 Registros nomeados de 0 a 9 . . . . . . . . . . . . . . . . . . . . . 34
5.3 Registro de pequenas dele¸c˜oes - . . . . . . . . . . . . . . . . . . . 34
5.4 Registros nomeados de “a at´e z” ou “A at´e Z” . . . . . . . . . . . 34
5.5 Registros somente leitura “: . % #” . . . . . . . . . . . . . . . . . 34
5.6 Registro de express˜oes ”= . . . . . . . . . . . . . . . . . . . . . . 35
5.7 Registros de arrastar e mover . . . . . . . . . . . . . . . . . . . . 36
5.8 Registro buraco negro ” . . . . . . . . . . . . . . . . . . . . . . . 36
5.9 Registros de buscas “/” . . . . . . . . . . . . . . . . . . . . . . . . 36
5.10 Manipulando registros . . . . . . . . . . . . . . . . . . . . . . . . 37
vi CONTE ´UDO
5.11 Listando os registros atuais . . . . . . . . . . . . . . . . . . . . . 37
5.12 Listando arquivos abertos . . . . . . . . . . . . . . . . . . . . . . 38
5.13 Dividindo a janela com o pr´oximo arquivo da lista de buffers . . 38
5.14 Como colocar um peda¸co de texto em um registro? . . . . . . . . 38
5.15 Como criar um registro em modo visual? . . . . . . . . . . . . . . 39
5.16 Como definir um registro no vimrc? . . . . . . . . . . . . . . . . 39
5.17 Como selecionar blocos verticais de texto? . . . . . . . . . . . . . 41
5.18 Referˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6 Buscas e Substitui¸c˜oes 42
6.1 Usando “Express˜oes Regulares” em buscas . . . . . . . . . . . . . 42
6.1.1 Evitando escapes ao usar Express˜oes regulares . . . . . . 43
6.2 Destacando padr˜oes . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.3 Inserindo linha antes e depois . . . . . . . . . . . . . . . . . . . . 45
6.4 Obtendo informa¸c˜oes do arquivo . . . . . . . . . . . . . . . . . . 46
6.5 Trabalhando com registradores . . . . . . . . . . . . . . . . . . . 47
6.6 Edi¸c˜oes complexas . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.7 Indentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.8 Corrigindo a indenta¸c˜ao de c´odigos . . . . . . . . . . . . . . . . . 48
6.9 Usando o File Explorer . . . . . . . . . . . . . . . . . . . . . . . . 48
6.10 Selecionando ou deletando conte´udo de tags HTML . . . . . . . . 49
6.11 Substitui¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.12 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.13 O comando global “g” . . . . . . . . . . . . . . . . . . . . . . . . 52
6.14 Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.15 Filtrando arquivos com o vimgrep . . . . . . . . . . . . . . . . . 54
6.16 Copiar a partir de um ponto . . . . . . . . . . . . . . . . . . . . . 54
6.17 Dicas das lista vi-br . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.18 Jun¸c˜ao de linhas com Vim . . . . . . . . . . . . . . . . . . . . . . 56
6.19 Buscando em um intervalo de linhas . . . . . . . . . . . . . . . . 56
7 Trabalhando com Janelas 57
7.1 Alternando entre Buffers de arquivo . . . . . . . . . . . . . . . . 57
7.2 Modos de divis˜ao da janela . . . . . . . . . . . . . . . . . . . . . 57
7.2.1 Utilizando abas tab . . . . . . . . . . . . . . . . . . . . . . 58
7.2.2 Utilizando split horizontal . . . . . . . . . . . . . . . . . . 58
CONTE ´UDO vii
7.2.3 Utilizando split vertical . . . . . . . . . . . . . . . . . . . 58
7.3 Abrindo e fechando janelas . . . . . . . . . . . . . . . . . . . . . 58
7.4 Salvando e saindo . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.5 Manipulando janelas . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.6 File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
8 Repeti¸c˜ao de Comandos 60
8.1 Repetindo a digita¸c˜ao de uma linha . . . . . . . . . . . . . . . . 61
8.2 Guardando trechos em “registros” . . . . . . . . . . . . . . . . . . 61
8.3 Gravando comandos . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.4 Repetindo substitui¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . 63
8.5 Repetindo comandos . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.6 Scripts Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.7 Usando o comando bufdo . . . . . . . . . . . . . . . . . . . . . . 64
8.8 Colocando a ´ultima busca em um comando . . . . . . . . . . . . 64
8.9 Inserindo o nome do arquivo no comando . . . . . . . . . . . . . 64
8.10 Inserindo o ´ultimo comando . . . . . . . . . . . . . . . . . . . . 64
8.11 Inserindo a palavra sob o cursor em um comando . . . . . . . . . 64
8.12 Para repetir exatamente a ´ultima inser¸c˜ao . . . . . . . . . . . . 65
9 Comandos Externos 66
9.1 Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
9.2 Removendo linhas duplicadas . . . . . . . . . . . . . . . . . . . . 67
9.3 Ordenando e removendo linhas duplicadas no Vim 7 . . . . . . . 67
9.4 Beautifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
9.5 Editando comandos longos no Linux . . . . . . . . . . . . . . . . 67
9.6 Compilando e verificando erros . . . . . . . . . . . . . . . . . . . 68
9.7 Grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
9.8 Indent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.9 Calculadora Cient´ıfica com o Vim . . . . . . . . . . . . . . . . . . 69
9.10 Editando sa´ıdas do Shell . . . . . . . . . . . . . . . . . . . . . . . 69
9.11 Log do Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . 70
9.12 Referˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
10 Verifica¸c˜ao Ortogr´afica 71
10.1 Habilitando a verifica¸c˜ao ortogr´afica . . . . . . . . . . . . . . . . 71
10.1.1 Habilita¸c˜ao autom´atica na inicializa¸c˜ao . . . . . . . . . . 72
viii CONTE ´UDO
10.2 O dicion´ario de termos . . . . . . . . . . . . . . . . . . . . . . . . 72
10.2.1 Dicion´ario portuguˆes segundo o acordo ortogr´afico . . . . 73
10.3 Comandos relativos `a verifica¸c˜ao ortogr´afica . . . . . . . . . . . . 74
10.3.1 Encontrando palavras desconhecidas . . . . . . . . . . . . 74
10.3.2 Tratamento de palavras desconhecidas . . . . . . . . . . . 74
11 Salvando Sess˜oes de Trabalho 76
11.1 O que uma sess˜ao armazena? . . . . . . . . . . . . . . . . . . . . 76
11.2 Criando sess˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
11.3 Restaurando sess˜oes . . . . . . . . . . . . . . . . . . . . . . . . . 77
11.4 Viminfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
12 Como Editar Preferˆencias no Vim 79
12.1 Onde colocar plugins e temas de cor . . . . . . . . . . . . . . . . 79
12.2 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
12.3 Efetiva¸c˜ao das altera¸c˜oes no vimrc . . . . . . . . . . . . . . . . . 80
12.4 Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
12.5 Ajustando par´agrafos em modo normal . . . . . . . . . . . . . . . 82
12.6 Exibindo caracteres invis´ıveis . . . . . . . . . . . . . . . . . . . . 82
12.7 Definindo registros previamente . . . . . . . . . . . . . . . . . . . 83
12.8 Mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
12.8.1 Recarregando o arquivo de configura¸c˜ao . . . . . . . . . . 84
12.8.2 Limpando o “registro” de buscas . . . . . . . . . . . . . . 85
12.8.3 Destacar palavra sob o cursor . . . . . . . . . . . . . . . 85
12.8.4 Contar ocorrˆencias de uma palavra . . . . . . . . . . . . . 85
12.8.5 Remover linhas em branco duplicadas . . . . . . . . . . . 86
12.8.6 Mapeamento para Calcular Express˜oes . . . . . . . . . . . 86
12.8.7 Mapeamentos globais . . . . . . . . . . . . . . . . . . . . 87
12.8.8 Convertendo as iniciais de um documento para mai´usculas 87
12.9 Autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
12.9.1 Exemplos pr´aticos de autocomandos . . . . . . . . . . . . 88
12.10Fun¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
12.10.1Fechamento autom´atico de parˆenteses . . . . . . . . . . . 89
12.10.2Fun¸c˜ao para barra de status . . . . . . . . . . . . . . . . . 90
12.10.3Rolar outra janela . . . . . . . . . . . . . . . . . . . . . . 90
12.10.4Fun¸c˜ao para numerar linhas . . . . . . . . . . . . . . . . . 90
CONTE ´UDO ix
12.10.5Fun¸c˜ao para trocar o esquema de cores . . . . . . . . . . . 91
12.10.6Uma fun¸c˜ao para inserir cabe¸calho de script . . . . . . . . 91
12.10.7Fun¸c˜ao para inserir cabe¸calhos Python . . . . . . . . . . . 91
12.10.8Fun¸c˜ao para pular para uma linha . . . . . . . . . . . . . 92
12.10.9Fun¸c˜ao para gerar backup . . . . . . . . . . . . . . . . . . 93
12.11Como adicionar o Python ao path do Vim? . . . . . . . . . . . . 93
12.12Criando um menu . . . . . . . . . . . . . . . . . . . . . . . . . . 93
12.13Criando menus para um modo espec´ıfico . . . . . . . . . . . . . . 94
12.14Exemplo de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
12.15Outros mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . 95
12.16Complementa¸c˜ao com “tab” . . . . . . . . . . . . . . . . . . . . . 96
12.17Abrevia¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
12.18Evitando arquivos de backup no disco . . . . . . . . . . . . . . . 96
12.19Mantendo apenas um Gvim aberto . . . . . . . . . . . . . . . . . 97
12.20Referˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
13 Um Wiki para o Vim 99
13.1 Como usar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
13.2 Salvamento autom´atico para o Wiki . . . . . . . . . . . . . . . . 100
13.3 Problemas com codifica¸c˜ao de caracteres . . . . . . . . . . . . . . 100
14 H´abitos para Edi¸c˜ao Efetiva 101
14.1 Mova-se rapidamente no texto . . . . . . . . . . . . . . . . . . . . 101
14.2 Use marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
14.3 Use quantificadores . . . . . . . . . . . . . . . . . . . . . . . . . . 102
14.4 Edite v´arios arquivos de uma s´o vez . . . . . . . . . . . . . . . . 103
14.5 N˜ao digite duas vezes . . . . . . . . . . . . . . . . . . . . . . . . 103
14.6 Use dobras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
14.7 Use autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . 104
14.8 Use o File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . 104
14.9 Torne as boas pr´aticas um h´abito . . . . . . . . . . . . . . . . . 105
14.10Referˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
15 Plugins 106
15.1 Como testar um plugin sem instal´a-lo? . . . . . . . . . . . . . . . 106
15.2 Atualizando a documenta¸c˜ao dos plugins . . . . . . . . . . . . . . 107
15.3 Plugin para LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . 107
x CONTE ´UDO
15.4 Criando folders para arquivos LATEX . . . . . . . . . . . . . . . . 107
15.5 Criando se¸c˜oes LATEX . . . . . . . . . . . . . . . . . . . . . . . . . 108
15.6 Plugin para manipular arquivos . . . . . . . . . . . . . . . . . . . 108
15.7 Complementa¸c˜ao de c´odigos . . . . . . . . . . . . . . . . . . . . . 108
15.7.1 Instala¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
15.8 Um wiki para o Vim . . . . . . . . . . . . . . . . . . . . . . . . . 109
15.9 Acessando documenta¸c˜ao do Python no Vim . . . . . . . . . . . 109
15.10Formatando textos planos com syntax . . . . . . . . . . . . . . . 109
15.11Movimentando em camel case . . . . . . . . . . . . . . . . . . . . 109
15.12Plugin FuzzyFinder . . . . . . . . . . . . . . . . . . . . . . . . . . 109
15.13O plugin EasyGrep . . . . . . . . . . . . . . . . . . . . . . . . . . 110
15.14O plugin SearchComplete . . . . . . . . . . . . . . . . . . . . . . 110
15.15O plugin AutoComplete . . . . . . . . . . . . . . . . . . . . . . . 111
15.16O plugin Ctags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
15.17O Plugin Project . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
15.18O plugin pydiction . . . . . . . . . . . . . . . . . . . . . . . . . . 112
15.19O plugin FindMate . . . . . . . . . . . . . . . . . . . . . . . . . . 113
15.20Atualizando a documenta¸c˜ao dos plugins . . . . . . . . . . . . . . 113
16 Referˆencias 114
Colaboradores 118
Cap´ıtulo 1
Introdu¸c˜ao
A edi¸c˜ao de texto ´e uma das tarefas mais frequentemente executadas por seres
humanos em ambientes computacionais, em qualquer n´ıvel. Usu´arios finais,
administradores de sistemas, programadores de software, desenvolvedores web,
e tantas outras categorias, todos eles, constantemente, necessitam editar textos.
Usu´arios finais editam texto para criar documentos, enviar e-mails, atualizar
o blog, escrever recados ou simplesmente trocar mensagens instantˆaneas pela
internet. Administradores de sistemas editam arquivos de configura¸c˜ao, criam
regras de seguran¸ca, editam scripts e manipulam sa´ıdas de comandos arma-
zenados em arquivos de texto. Programadores desenvolvem c´odigos-fonte e a
documenta¸c˜ao de programas essencialmente em editores de texto. Desenvolve-
dores web interagem com editores de texto para criarem layout e dinˆamica de
sites.
Tamanha ´e a frequˆencia e onipresen¸ca da tarefa de edi¸c˜ao de texto que a efici-
ˆencia, flexibilidade e o repert´orio de ferramentas de editores de texto tornam-se
quesitos cr´ıticos para se atingir produtividade e conforto na edi¸c˜ao de textos.
Qualquer tarefa de aprendizado requer um certo esfor¸co. Todo programa intro-
duz novos conceitos, op¸c˜oes e configura¸c˜oes que transformam o modus operanti
do usu´ario. Em princ´ıpio, quanto maior o esfor¸co, maior o benef´ıcio. Quem quer
apenas escrever textos, pode-se contentar com um editor b´asico, cuja as ´unicas
op¸c˜oes s˜ao digitar o texto, abrir e salvar o documento ou pode utilizar um editor
que permita pr´e-configurar a¸c˜oes, formatar o conte´udo, revisar a ortografia, etc,
al´em da a¸c˜ao b´asica que ´e escrever textos.
Qualquer usu´ario de computador pode abrir o primeiro tipo de editor e imediata-
mente come¸car a escrever, a curto prazo, sua a¸c˜ao ter´a consequˆencias imediatas
e n˜ao requer conhecimentos adicionais. Por outro lado, esse usu´ario ter´a que
fazer esfor¸co para digitar o mesmos cabe¸calho todos os dias.
O outro tipo de editor permite que o usu´ario pr´e-configure o cabe¸calho do do-
cumento e todos os dias esse trecho j´a estar´a digitado. Em contrapartida, o
usu´ario deve aprender como pr´e-configurar o editor. O que requer esfor¸co para
aprender a utilizar o programa escolhido. O benef´ıcio somente ser´a observado
a m´edio/longo prazo, quando o tempo ganho ao utilizar a configura¸c˜ao ser´a
superior ao tempo consumido aprendendo sobre o programa.
2 Introdu¸c˜ao
O “Vim”1
´e um editor de texto extremamente configur´avel, criado para permitir
a edi¸c˜ao de forma eficiente, tornando-a produtiva e confort´avel. Tamb´em ´e uma
aprimora¸c˜ao do editor “Vi”, um tradicional programa dos sistemas Unix. Possui
uma s´erie de mudan¸cas em rela¸c˜ao a este ´ultimo. O pr´oprio slogan do Vim ´e
Vi IMproved, ou seja, Vi Melhorado. O Vim ´e t˜ao conhecido e respeitado entre
programadores, e t˜ao ´util para programa¸c˜ao, que muitos o consideram uma ver-
dadeira “IDE (Integrated Development Environment, em portuguˆes, Ambiente
Integrado de Desenvolvimento)”.
Ele ´e capaz de reconhecer mais de 500 sintaxes de linguagens de programa¸c˜ao
e marca¸c˜ao, possui mapeamento para teclas, macros, abrevia¸c˜oes, busca por
Express˜oes Regulares2
, entre outras facilidades.
A figura 1.1 mostra o vim sendo usando para editar o arquivo o desse livro sobre
vim.
Figura 1.1: Usando o vim para editar o c´odigo em LATEX
O Vim conta com uma comunidade bastante atuante e ´e, ao lado do Emacs3
,
um dos editores mais usados nos sistemas GNU/Linux4
, embora esteja tamb´em
dispon´ıvel em outros sistemas, como o Windows e o Macintosh.
1.1 Instala¸c˜ao do Vim
:h install
1.1.1 Instala¸c˜ao no Windows
H´a uma vers˜ao gr´afica do Vim dispon´ıvel para v´arios sistemas operacionais,
incluindo o Windows; esta vers˜ao pode ser encontrada no site oficial [1]. Para
1Vim - http://www.vim.org
2Express˜oes Regulares - http://guia-er.sourceforge.net/guia-er.html
3Emacs - http://www.gnu.org/software/emacs/
4O kernel Linux sem os programas GNU n˜ao serviria para muita coisa.
1.2 Dicas iniciais 3
instal´a-lo basta baixar o instalador no link indicado e dispar´a-lo com um duplo
clique (este procedimento requer privil´egios de administrador).
1.1.2 Instala¸c˜ao no GNU/Linux
A maioria das distribui¸c˜oes GNU/Linux traz o Vim em seus reposit´orios, sendo
que ´e bastante comum o Vim j´a vir inclu´ıdo na instala¸c˜ao t´ıpica da distribui¸c˜ao.
A forma de instala¸c˜ao prefer´ıvel depende do Vim:
• J´a vir instalado por default – neste caso nada precisa ser feito.
• Estar dispon´ıvel no reposit´orio, mas n˜ao instalado – em distribui¸c˜oes de-
rivadas da Debian GNU/Linux5
, a instala¸c˜ao do Vim atrav´es dos reposi-
t´orios ´e usualmente executada digitando-se ‘apt-get install vim’6
em
um terminal (este procedimento requer privil´egios de administrador e, ti-
picamente, conex˜ao com a internet).
Algumas distribui¸c˜oes GNU/Linux dividem o programa vim em v´arios pa-
cotes. Pacotes adicionais como gvim, vim-enhanced, vim-phython7
, entre
outros, representam diferentes vers˜oes do mesmo aplicativo. O gvim ´e a
vers˜ao gr´afica do Vim e o vim-enhanced ´e uma vers˜ao do vim compilada
com um suporte interno ao Python8
. A alternativa para resolver esse
problema ´e buscar na documenta¸c˜ao da distribui¸c˜ao o que significa cada
pacote.
• N˜ao estar dispon´ıvel no reposit´orio da distribui¸c˜ao – cen´ario muito im-
prov´avel, mas nas sua ocorrˆencia o Vim pode ser instalado atrav´es da
compila¸c˜ao do c´odigo-fonte; basta seguir as instru¸c˜oes do site oficial [1].
1.2 Dicas iniciais
Ao longo do livro alguns comandos ou dicas podem estar duplicados, o que ´e ´util
devido ao contexto e tamb´em porque o aprendizado por satura¸c˜ao ´e um ´otimo
recurso. Ao perceber uma dica duplicada, antes de reclamar veja se j´a sabe o
que est´a sendo passado. Contudo dicas e sugest˜oes ser˜ao bem vindas!
Para abrir um arquivo com Vim digite num terminal:
vim texto.txt
onde texto.txt ´e o nome do arquivo que deseja-se criar ou editar.
Em algumas distribui¸c˜oes, pode-se usar o comando vi ao inv´es de vim.
5Debian GNU/Linux - http://www.debian.org/index.pt.html
6Recomenda-se tamb´em instalar a documenta¸c˜ao em HTML do Vim: ‘apt-get install
vim-doc’
7Para ubuntu e Debian
8O Python (http://www.python.org) ´e uma linguagem de programa¸c˜ao orientada a objetos
muito comum no meio profissional e acadˆemico
4 Introdu¸c˜ao
1.3 Ajuda integrada
O Vim possui uma ajuda integrada muito completa, s˜ao mais de 100 arquivos
somando milhares de linhas. O ´unico inconveniente ´e n˜ao haver ainda tradu¸c˜ao
para o portuguˆes, sendo o inglˆes seu idioma oficial; entretanto, as explica¸c˜oes
costumam ser sint´eticas e diretas, de forma que no¸c˜oes em inglˆes seriam sufici-
entes para a compreens˜ao de grande parte do conte´udo da ajuda integrada.
Obs: No Vim quase todos os comandos podem ser abreviados, no caso “help”
pode ser chamado por“h”e assim por diante. Um comando s´o pode ser abreviado
at´e o ponto em que este nome mais curto n˜ao coincida com o nome de algum
outro comando existente. Para chamar a ajuda do Vim pressione ‘Esc’ e em
seguida:
:help .... vers~ao longa, ou
:h ....... vers~ao abreviada
ou simplesmente ‘F1’.
Siga os links usando o atalho ‘ctrl+]’, em modo gr´afico o clique com o mouse
tamb´em funciona, e para voltar use ‘ctrl+o’ ou ‘ctrl+t’ Para as situa¸c˜oes de
desespero pode-se digitar:
:help!
 Quando um comando puder ser abreviado poder´a aparecer desta forma:
‘:so[urce]’. Deste modo se est´a indicando que o comando ‘:source’ pode ser
usado de forma abreviada, no caso ‘:so’.
1.4 Em caso de erros
Recarregue o arquivo que est´a sendo editado pressionando ‘Esc’ e em seguida
usando o comando ‘:e’. ou simplesmente inicie outro arquivo ignorando o atual,
com o comando ‘:enew!’, ou saia do arquivo sem modifica-lo, com ‘:q!’. Pode-se
ainda tentar gravar for¸cado com o comando ‘:wq!’
1.5 Como interpretar atalhos e comandos
A tecla “Ctrl” ´e representada na maioria dos manuais e na ajuda pelo carac-
tere “^” circunflexo, ou seja, o atalho Ctrl-L aparecer´a assim:
^L
No arquivo de configura¸c˜ao do Vim, um “Enter” pode aparecer como:
cr
Para saber mais sobre como usar atalhos no Vim veja a se¸c˜ao 12.8 na p´agina 83
e para ler sobre o arquivo de configura¸c˜ao veja o cap´ıtulo 12 na p´agina 79.
1.6 Modos de opera¸c˜ao 5
1.6 Modos de opera¸c˜ao
A tabela abaixo mostra uma referˆencia r´apida para os modos de opera¸c˜ao do
Vim, a seguir mais detalhes sobre cada um dos modos.
Modo Descri¸c˜ao Atalho
Normal Para deletar, copiar, formatar, etc Esc
Inser¸c˜ao Prioritariamente, digita¸c˜ao de texto i,a,I,A,o,O
Visual Sele¸c˜ao de blocos verticais e linhas inteiras V, v, Ctrl-v
Comando Uma verdadeira linguagem de programa¸c˜ao Esc:
Em oposi¸c˜ao `a esmagadora maioria dos editores o Vim ´e um editor que tra-
balha com “modos de opera¸c˜ao (modo de inser¸c˜ao, modo normal, modo visual
e etc)”, o que a princ´ıpio dificulta a vida do iniciante, mas abre um universo
de possibilidades, pois ao trabalhar com modos distintos uma tecla de atalho
pode ter v´arios significados, exemplificando: Em modo normal pressionar ‘dd’
apaga a linha atual, j´a em modo de inser¸c˜ao ele ir´a se comportar como se vocˆe
estivesse usando qualquer outro editor, ou seja, ir´a inserir duas vezes a letra ‘d’.
Em modo normal pressionar a tecla ‘v’ inicia uma sele¸c˜ao visual (use as setas
de dire¸c˜ao). Para sair do novo visual Esc. Como um dos princ´ıpios do vim
´e agilidade pode-se usar ao inv´es de setas (em modo normal) as letras h,l,k,j
como se fossem setas:
k
h l
j
Imagine as letras acima como teclas de dire¸c˜ao, a letra ‘k’ ´e uma seta acima a
letra ‘j’ ´e uma seta abaixo e assim por diante.
1.7 Entrando em modo de edi¸c˜ao
Estando no modo normal, digita-se:
a .... inicia inser¸c~ao de texto ap´os o caractere atual
i .... inicia inser¸c~ao de texto antes do caractere atual
A .... inicia inser¸c~ao de texto no final da linha
I .... inicia inser¸c~ao de texto no come¸co da linha
o .... inicia inser¸c~ao de texto na linha abaixo
O .... inicia inser¸c~ao de texto na linha acima
Outra possibilidade ´e utilizar a tecla Insert para entrar no modo de inser¸c˜ao
de texto antes do caractere atual, ou seja, o mesmo que a tecla i. Uma vez no
modo de inser¸c˜ao, a tecla Insert permite alternar o modo de digita¸c˜ao de
inser¸c˜ao de simples de caracteres para substitui¸c˜ao de caracteres.
Agora come¸camos a sentir o gostinho de usar o Vim, uma tecla seja mai´uscula
ou min´uscula, faz muita diferen¸ca se vocˆe n˜ao estiver em modo de inser¸c˜ao, e
para sair do modo de inser¸c˜ao e voltar ao modo normal sempre use Esc.
6 Introdu¸c˜ao
1.8 Erros comuns
• Estando em modo de inser¸c˜ao pressionar ‘j’ na inten¸c˜ao 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 ´e a jun¸c˜ao das linhas,
ali´as um ´otimo recurso quando a inten¸c˜ao ´e de fato esta.
• Em modo normal tentar digitar um n´umero seguido de uma palavra e ao
perceber que nada est´a sendo digitado, iniciar o modo de inser¸c˜ao, digi-
tando por fim o que se queria, o resultado ´e que o n´umero que foi digitado
inicialmente vira um quantificador para o que se digitou ao entrar no modo
de inser¸c˜ao. A palavra aparecer´a repetida na quantidade do n´umero di-
gitado. Assim, se vocˆe quiser digitar 10 vezes “isto ´e um teste” fa¸ca
assim:
Esc ........... se assegure de estar em modo normal
10 .............. quantificador
i ............... entra no modo de inser¸c~ao
isto ´e um teste Enter Esc
 Alguns atalhos ´uteis. . .
Ctrl-O ..... comando do modo normal no modo insert
i Ctrl-a ... repetir a ´ultima inser¸c~ao
@: ......... repetir o ´ultimo comando
Shift-insert colar texto da ´area de transfer^encia
gi ......... modo de inser¸c~ao no mesmo ponto da ´ultima vez
gv ......... repete sele¸c~ao visual
Para saber mais sobre repeti¸c˜ao de comandos veja o cap´ıtulo 8, na p´agina 60.
No Vim, cada arquivo aberto ´e chamado de buffer, ou seja, dados carregados
na mem´oria. Vocˆe pode acessar o mesmo buffer em mais de uma janela, bem
como dividir a janela em v´arios buffers distintos o que veremos mais adiante.
Cap´ıtulo 2
Editando
A principal fun¸c˜ao de um editor de textos ´e editar textos. Parece ´obvio, mas
em meio a in´umeros recursos extras essa simples e crucial fun¸c˜ao perde-se entre
todos os demais.
2.1 Abrindo o arquivo para a edi¸c˜ao
Portanto, a primeira coisa a fazer ´e abrir um arquivo. Como visto, para abrir
um arquivo com Vim, digite em um terminal:
vim texto.txt
onde texto.txt ´e o nome do arquivo que deseja-se criar ou editar.
Caso deseje abrir o arquivo na linha 10, usa-se:
vim +10 /caminho/para/o/arquivo
se quiser abrir o arquivo na linha que cont´em um determinado padr˜ao , digite:
vim +/padr~ao arquivo
 Caso o padr˜ao tenha espa¸cos no nome coloque entre aspas ou use escape “”
a fim de n˜ao obter erro.
 Se o vim for aberto sem indica¸c˜ao de arquivo pode-se indicar o arquivo a ser
editado em modo de comando desta forma:
:e /home/usuario/arquivo
2.2 Escrevendo o texto
O Vim ´e um editor que possu´ı diferentes modos de edi¸c˜ao. Entre eles est´a o
modo de inser¸c˜ao, que ´e o modo onde escreve-se o texto naturalmente.
8 Editando
Para se entrar em modo de inser¸c˜ao, estando em modo normal, pode-se pressi-
onar qualquer uma das teclas abaixo:
i ..... entra no modo de inser¸c~ao antes do caractere atual
I ..... entra no modo de inser¸c~ao no come¸co da linha
a ..... entra no modo de inser¸c~ao ap´os o caractere atual
A ..... entra no modo de inser¸c~ao no final da linha
o ..... entra no modo de inser¸c~ao uma linha abaixo
O ..... entra em modo de inser¸c~ao uma linha cima
Esc . sai do modo de inser¸c~ao
Uma vez no modo de inser¸c˜ao todas as teclas s˜ao exatamente como nos outros
editores simples, caracteres que constituem o conte´udo do texto sendo digitado.
O que inclui as teclas de edi¸c˜ao de caracteres.
Para salvar o conte´udo escrito, digite a tecla Esc para sair do modo de inser¸c˜ao
e digite o comando ‘:w’ para gravar o conte´udo. Caso queira sair do editor, digite
o comando: ‘:q’ caso tenha ocorrido modifica¸c˜oes no arquivo desde que ele foi
salvo pela ´ultima vez haver´a uma mensagem informando que o documento foi
modificado e n˜ao foi salvo, nesse caso, digite o comando ‘:q! para fechar o Vim
sem salvar as ´ultimas modifica¸c˜oes feitas. Caso queira salvar e sair do arquivo,
digite o comando ‘:wq’
Nesse ponto, conhece-se o vim de forma suficiente para editar qualquer coisa
nele. Daqui por diante o que existe s˜ao as formas de realizar a edi¸c˜ao do arquivo
com maior naturalidade e produtividade.
O usu´ario iniciante do Vim pode cometer o erro de tentar decorar todos os
comandos que ser˜ao apresentados. N˜ao fa¸ca isso. Tentar decorar comando ´e
exatamente o caminho contr´ario da naturalidade exigida por um editor texto
para aumentar a produtividade.
Ao contr´ario, sugere-se que leia-se todo o conte´udo. Identifique quais s˜ao as
atividades de maior recorrˆencia no estilo individual de escrita e busque como
realizar tais fun¸c˜oes com mais fluˆencia nesse editor. A pr´atica levar´a ao uso de
fluente desse comandos principais, abrindo espa¸co para os demais comandos.
Isso n˜ao impede que o usu´ario experimente cada comando conforme for lendo.
De fato, essa pr´atica pode ajudar a selecionar as formas de edi¸c˜ao que lhe s˜ao
mais simp´aticas ao uso.
2.3 Copiar, Colar e Deletar
:h delete, d
No modo normal, o ato de deletar ou eliminar o texto est´a associado `a letra
“d”. No modo de inser¸c˜ao as teclas usuais tamb´em funcionam.
dd .... deleta linha atual
D ..... deleta restante da linha
d$ .... deleta do ponto atual at´e o final da linha
d^ .... deleta do cursor ao primeiro caractere n~ao-nulo da
2.3 Copiar, Colar e Deletar 9
linha
d0 .... deleta do cursor ao in´ıcio da linha
 Pode-se combinar o comando de dele¸c˜ao “d” com o comando de movimento
(considere o modo normal) para apagar at´e a pr´oxima v´ırgula use: “df,”.
Copiar est´a associado `a letra “y”.
yy .... copia a linha atual
Y ..... copia a linha atual
ye .... copia do cursor ao fim da palavra
yb .... copia do come¸co da palavra ao cursor
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
[p ... cola o que foi copiado ou deletado antes do cursor
]p ... cola o que foi copiado ou deletado ap´os o cursor
2.3.1 Deletando uma parte do texto
:h deleting
O comando ‘d’ remove o conte´udo para a mem´oria.
x .... apaga o caractere sob o cursor
xp ... troca letras de lugar
ddp .. troca linhas de lugar
d5x .. apaga os pr´oximos 5 caracteres
dd .. apaga a linha atual
5dd .. apaga 5 linhas (tamb´em pode ser: d5d)
d5G .. apaga at´e a linha 5
dw .. apaga uma palavra
5dw .. apaga 5 palavras (tamb´em pode ser: d5w)
dl .. apaga uma letra (sin^onimo: x)
5dl .. apaga 5 letras (tamb´em pode ser: d5l ou 5x)
d0 .. apaga at´e o in´ıcio da linha
d^ .. apaga at´e o primeiro caractere da linha
d$ .. apaga at´e o final da linha (sin^onimo: D)
dgg .. apaga at´e o in´ıcio do arquivo
dG .. apaga at´e o final do arquivo
D .... apaga o resto da linha
d% ... deleta at´e o pr´oximo (,[,{
da .. deleta aspas com conte´udo
Depois do texto ter sido colocado na mem´oria, digite ‘p’ para ‘inserir’ o texto
em uma outra posi¸c˜ao. Outros comandos:
10 Editando
diw .. apaga palavra mesmo que n~ao esteja posicionado no
in´ıcio
dip .. apaga o par´agrafo atual
d4b .. apaga as quatro palavras anteriores
dfx .. apaga at´e o pr´oximo ‘‘x’’
d/casa/+1 - deleta at´e a linha ap´os a palavra casa
Trocando a letra ‘d’ nos comandos acima por ‘c’ de change “mudan¸ca” ao inv´es
de deletar ser´a feita uma mudan¸ca de conte´udo. Por exemplo:
:h change
ciw .............. modifica uma palavra
cip .............. modifica um par´agrafo
cis .............. modifica uma senten¸ca
C ................ modifica at´e o final da linha
2.3.2 Copiando sem deletar
:h yank
O comando ‘y’ (yank) permite copiar uma parte do texto para a mem´oria sem
deletar. Existe uma semelhan¸ca muito grande entre os comandos ‘y’ e os coman-
dos ‘d’, um ativa a ‘c´opia’ e outro a ‘exclus˜ao’ de conte´udo, suportando ambos
quantificadores:
yy .... copia a linha atual (sin^onimo: Y)
5yy .... copia 5 linhas (tamb´em pode ser: y5y ou 5Y)
y/pat .. copia at´e ‘pat’
yw .... copia uma palavra
5yw .... copia 5 palavras (tamb´em pode ser: y5w)
yl .... copia uma letra
5yl .... copia 5 letras (tamb´em pode ser: y5l)
y^ .... copia da posi¸c~ao atual at´e o in´ıcio da linha
(sin^onimo: y0)
y$ .... copia da posi¸c~ao atual at´e o final da linha
ygg .... copia da posi¸c~ao atual at´e o in´ıcio do arquivo
yG .... copia da posi¸c~ao atual at´e o final do arquivo
Digite ‘P’ (p mai´usculo) para colar o texto rec´em copiado na posi¸c˜ao onde
encontra-se o cursor, ou ‘p’ para colar o texto na posi¸c˜ao imediatamente ap´os o
cursor.
yi .... copia trecho entre aspas (atual - inner)
vip .... sele¸c~ao visual para par´agrafo atual
‘inner paragraph’
yip .... copia o par´agrafo atual
yit .... copia a tag agual ‘inner tag’ ´util para arquivos
HTML, XML, etc.
2.4 For¸cando a edi¸c˜ao de um novo arquivo 11
2.3.3 Usando a ´area de transferˆencia Clipboard
:h paste, clipboard, quoteplus
Exemplos para o modo visual:
Ctrl-insert .... copia ´area selecionada
Shift-insert ... cola o que est´a no clipboard
Ctrl-del ....... recorta para o clipboard
Caso obtenhamos erro ao colar textos da ´area de transferˆencia usando os co-
mandos acima citados podemos usar outra alternativa. Os comandos abaixo
preservam a indenta¸c˜ao1
.
+p ............ cola preservando indenta¸c~ao
+y ............ copia ´area selecionada
 Para evitar erros ao colar usando Shift-insert use este comando ‘:set
paste’.
2.3.4 Removendo linhas duplicadas
:sort u
2.4 For¸cando a edi¸c˜ao de um novo arquivo
:h edit!
O Vim, como qualquer outro editor, ´e muito exigente no que se refere a altera¸c˜oes
de arquivo. Ao tentar abandonar um arquivo editado e n˜ao salvo, o Vim ir´a se
certificar da a¸c˜ao. Para abrir um novo arquivo sem salvar o antigo:
:enew!
O comando acima ´e uma abrevia¸c˜ao de edit new. De modo similar pode-se
ignorar todas as altera¸c˜oes feitas desde a abertura do arquivo:
:e!
1Espa¸camento entre o come¸co da linha e o in´ıcio do texto
12 Editando
2.5 Ordenando
:h sort
O Vim, vers˜ao 7 ou superior, passa a ter um comando de ordena¸c˜ao que tamb´em
permite a retirada de linhas duplicadas, tal como foi apresentado.
:sort u ... ordena e retira linhas duplicadas
:sort n ... ordena numericamente
Obs: a ordena¸c˜ao num´erica ´e diferente da ordena¸c˜ao alfab´etica se em um trecho
contendo algo como:
8
9
10
11
12
Vocˆe tentar fazer:
:sort
O Vim colocar´a nas trˆes primeiras linhas
10
11
12
Portanto lembre-se que se a ordena¸c˜ao envolver n´umeros use:
:sort n
Vocˆe pode fazer a ordena¸c˜ao em um intervalo assim:
:1,15 sort n
O comando acima diz “Ordene numericamente da linha 1 at´e a linha 15”. Po-
demos ainda ordenar `a partir de uma coluna:
:sort /.*%8v/ ..... ordena `a partir do 8o
caractere
2.6 Usando o grep interno do Vim 13
2.6 Usando o grep interno do Vim
:h vimgrep, lvimgrep
Para editar todos os arquivos que contenham a palavra “inusitada”:
:vimgrep /cinusitada/ *
a op¸c˜ao ‘c’ torna a busca indiferente a letras mai´usculas e min´usculas.
Obs: o Vim busca `a partir do diret´orio atual, para se descobrir o diret´orio atual
ou mud´a-lo:
:pwd ........... exibe o diret´orio atual
:cd /diret´orio muda de diret´orio
2.7 Lista de altera¸c˜oes
:h changelist, changes
O Vim mant´em uma lista de altera¸c˜oes, veremos agora como usar este recurso.
g, ................. avan¸ca na lista de altera¸c~oes
g; ................. recua na lista de altera¸c~oes
:changes ........... visualiza a lista de altera¸c~oes
2.8 Substituindo tabula¸c˜oes por espa¸cos
:h expandtab, retab
Se houver necessidade2
de trocar tabula¸c˜oes por espa¸cos fazemos assim:
:set expandtab
:retab
Para fazer o contr´ario usamos algo como:
:%s/s{4,}/pressiona-se ctrl-i/g
onde
Ctrl-i...... insere uma tabula¸c~ao
Explicando:
2Em c´odigos Python por exemplo n˜ao se pode misturar espa¸cos e tabula¸c˜oes
14 Editando
: ............ comando
% ............ em todo arquivo
s ............ substitua
/ ............ padr~ao de busca
s ........... localiza espa¸co
{4,} ........ quatro vezes
/ ............ inicio da substitui¸c~ao
Ctrl-i ..... pressione Ctrl-i para inserir Tab
/ ............ fim da substitui¸c~ao
g ............ global
2.9 Convertendo para mai´usculas
:h case
gUU ....... converte a linha para mai´usculo
guu ....... converte a linha para min´usculo
gUiw ...... converte a palavra atual para mai´usculo
~ ......... altera o case do caractere atual
2.10 Editando em modo de comando
:h put, move, global, holy-grail
Para mover um trecho usando o modo de comandos fa¸ca:
:10,20m $
O comando acima move ‘m’ da linha 10 at´e a linha 20 para o final $.
:g /palavra/ m 0
Move as linhas contendo ‘palavra’ para o come¸co (linha zero)
:10,20y a
Copia da linha ‘10’ at´e a linha ‘20’ para o registro ‘a’
:56pu a
Cola o registro ‘a’ na linha 56
:g/padr~ao/d
O comando acima deleta todas as linhas contendo a palavra ‘padr˜ao’.
Podemos inverter a l´ogica do comando global g:
2.11 O arquivo alternativo 15
:g!/padr~ao/d
N˜ao delete as linhas contendo padr˜ao, ou seja, delete tudo menos as linhas
contendo a palavra ‘padr˜ao’.
:v/padr~ao/d ........ apaga linhas que n~ao contenham padr~ao
:v/S/d ............ apaga linhas vazias
S ................. significa string
A op¸c˜ao acima equivale a “:g!/padr~ao/d”. Para ler mais sobre o comando
“global” utilizado nesta se¸c˜ao veja o cap´ıtulo 6.13.
:7,10copy $
Da linha 7 at´e a linha 10 copie para o final.  Veja mais sobre edi¸c˜ao no modo
de comando na se¸c˜ao “6 Buscas e substitui¸c˜oes na p´agina 42”.
Gerando sequˆencias
Para inserir uma sequˆencia de 1 a 10 `a partir da linha inicial “zero” fazemos:
:0put =range(1,10)
Caso queira inserir sequˆencias como esta:
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5
Usamos este comando:
:for i in range(1,5) | .put =’192.168.0.’.i | endfor
2.11 O arquivo alternativo
:h Ctrl-6, alternate-file
´E muito comum um usu´ario concluir a edi¸c˜ao em um arquivo no Vim e ino-
centemente imaginar que n˜ao vai mais modificar qualquer coisa nele, ent˜ao este
usu´ario abre um novo arquivo:
:e novo-arquivo.txt
Mas de repente o usu´ario lembra que seria necess´ario adicionar uma linha no
arquivo rec´em editado, neste caso usa-se o atalho
16 Editando
Ctrl-6
cuja fun¸c˜ao ´e alternar entre o arquivo atual e o ´ultimo editado. Para retornar
ao outro arquivo basta portanto pressionar Ctrl-6 novamente. Pode-se abrir o
arquivo alternativo em nova janela usando-se o atalho:
Ctrl-w Ctrl-6
 Mais informa¸c˜oes sobre “janelas” leia a se¸c˜ao 7 na p´agina 57.
2.12 Lendo um arquivo para a linha atual
:h :r[ead]
Se desejamos inserir na linha atual um arquivo qualquer fazemos:
:r /caminho/para/arquivo.txt .. insere o arquivo na linha atual
:0r arquivo ................... insere o arquivo na primeira
linha
2.13 Incrementando n´umeros em modo normal
:h Ctrl-a, Ctrl-x
Posicione o cursor sobre um n´umero e pressione
Ctrl-a ..... incrementa o n´umero
Ctrl-x ..... decrementa o n´umero
2.14 Repetindo a digita¸c˜ao de linhas
 atalhos para o modo insert
Ctrl-y ......... repete linha acima
Ctrl-e ......... repete linha abaixo
Ctrl-x Ctrl-l .. repete linhas inteiras
Ctrl-a ......... repete a ´ultima inser¸c~ao
 Para saber mais sobre repeti¸c˜ao de comandos veja o cap´ıtulo 8, na p´agina
60.
2.15 Movendo um trecho de forma inusitada
:20,30m 0 ..... move da linha ‘20’ at´e ‘30’ para o come¸co
:20,/pat/m 5 .. move da linha ‘20’ at´e ‘pat’ para a linha 5
:m-5 .......... move a linha atual 5 posi¸c~oes acima
:m0 ........... move a linha atual para o come¸co
:m$ ........... move para o final do documento
2.16 Uma calculadora diferente 17
2.16 Uma calculadora diferente
Sempre que for necess´ario digitar o resultado de uma express˜ao matem´atica
(portanto no modo de inser¸c˜ao) pode-se usar o atalho “Ctrl-r =”, ele ativa o
registro de express˜oes, na linha de comando do Vim aparece um sinal de igual,
digita-se ent˜ao uma express˜ao matem´atica qualquer tipo “35*6” e em seguida
pressiona-se “Enter”, o Vim coloca ent˜ao o resultado da express˜ao no lugar
desejado. Portanto n˜ao precisa-se recorrer a nenhuma calculadora para fazer
c´alculos. Pode-se fazer uso do “Registro de Express˜oes” dentro de macros, ou
seja, ao gravar a¸c˜oes pode-se fazer uso deste recurso, aumentando assim sua
complexidade e poder! Para ler sobre “macros” acesse a se¸c˜ao 8.3 na 62. Para
saber mais sobre o “registro de express˜oes” leia a se¸c˜ao 5.6 na p´agina 35.
 Na se¸c˜ao 9.9 “Calculadora Cient´ıfica com o vim” p´agina 69 h´a uma descri¸c˜ao
sobre como fazer c´alculos com maior precis˜ao e complexidade.
 Se a inten¸c˜ao for apenas exibir um calculo na barra de comandos ´e poss´ıvel
fazer algo assim:
:echo 5.2 * 3
2.17 Desfazendo
:h undo
Se vocˆe cometer um erro, n˜ao se preocupe! Use o comando ‘u’:
u ............ desfazer
U ............ desfaz mudan¸cas na ´ultima linha editada
Ctrl-r ...... refazer
2.17.1 Undo tree
Um novo recurso muito interessante foi adicionado ao Vim“a partir da vers˜ao 7”
´e a chamada ´arvore do desfazer. Se vocˆe desfaz alguma coisa, fez uma altera¸c˜ao
um novo branch ou galho, deriva¸c˜ao de altera¸c˜ao ´e criado. Basicamente, os
branches nos permitem acessar quaisquer altera¸c˜oes ocorridas no arquivo.
Um exemplo did´atico
Siga estes passos (para cada passo Esc, ou seja, saia do modo de inser¸c˜ao)
Passo 1 - digite na linha 1 o seguinte texto
# controle de fluxo Esc
Passo 2 - digite na linha 2 o seguinte texto
18 Editando
# um la¸co 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ˆe voltar´a ao passo 1)
Passo 5 - Na linha 2 digite
# operador tern´ario Esc
Passo 6 - na linha 3 digite
var = (1 if teste == 0 else 2) Esc
Obs: A necessidade do Esc ´e para demarcar as a¸c˜oes, pois o Vim considera
cada inser¸c˜ao uma a¸c˜ao. Agora usando o atalho de desfazer tradicional “u” e de
refazer Ctrl-r observe que n˜ao ´e mais poss´ıvel acessar todas as altera¸c˜oes efetu-
adas. Em resumo, se vocˆe fizer uma nova altera¸c˜ao ap´os um desfazer (altera¸c˜ao
derivada) o comando refazer n˜ao mais vai ser poss´ıvel para aquele momento.
Agora volte at´e a altera¸c˜ao 1 e use seguidas vezes:
g+
e/ou
g-
Dessa forma vocˆe acessar´a todas as altera¸c˜oes ocorridas no texto.
2.17.2 M´aquina do tempo
O Vim possui muitas formas para desfazer e refazer, e uma das mais interessantes
´e a m´aquina do tempo! A m´aquina do tempo ´e extremamente ´util quando no
meio de um texto se percebe que boa parte do que foi adicionado ´e in´util e
que nos ultimos 10 minutos n˜ao h´a nada que se possa aproveitar. Utilizando a
m´aquina do tempo ´e poss´ıvel eliminar os ´ultimos 10 minutos de texto in´util do
seu documento facilmente, utilizando:
:earlier 10m
Com esse comando o documento ficar´a exatamente como ele estava 10 minutos
atr´as! Caso ap´os a exclus˜ao perceba-se que foi exclu´ıdo um minuto a mais, ´e
poss´ıvel utilizar o mesmo padr˜ao novamente para avan¸car no tempo:
2.18 Salvando 19
:later 60s
Note que dessa vez foi utilizado later ao inv´es de earlier, e passando segundos
como argumento para viajar no tempo. Portanto o comando acima avan¸ca 60
segundos no tempo.
Para uma melhor vis˜ao de quanto se deve voltar, pode ser usado o comando:
:undolist
O comando acima mostra a lista com as informa¸c˜oes sobre Desfazer e Refazer.
E com essas informa¸c˜oes pode-se voltar no tempo seguindo cada modifica¸c˜ao:
:undo 3
Esse comando far´a o documento regredir 3 modifica¸c˜oes.
2.18 Salvando
:h writing
A maneira mais simples de salvar um arquivo, ´e usar o comando:
:w
Para especificar um novo nome para o arquivo, simplesmente digite:
:w!  ‘‘file’’
O conte´udo ser´a gravado no arquivo“file”e vocˆe continuar´a no arquivo original.
Tamb´em existe o comando
:sav[eas] nome
salva o arquivo com um novo nome e muda para esse novo arquivo (o arquivo
original n˜ao ´e apagado). Para sair do editor, salvando o arquivo atual, digite :x
(ou :wq).
:w ............................ salva
:wq .......................... salva e sai
:w nome ....................... salvar como
:saveas nome .................. salvar como
:sav nome ..................... mesmo que saveas nome
:x ............................ salva se existirem
modifica¸c~oes
:10,20 w! ~/Desktop/teste.txt . salva um trecho para outro
arquivo
:w! ........................... salvamento for¸cado
:e! ........................... reinicia a edi¸c~ao ignorando
altera¸c~oes
20 Editando
2.19 Abrindo o ´ultimo arquivo rapidamente
O Vim guarda um registro para cada arquivo editado veja mais no cap´ıtulo 5
na p´agina 33.
’0 ........ abre o ´ultimo arquivo editado
’1 ........ abre o pen´ultimo arquivo editado
Ctrl-6 .... abre o arquivo alternativo (booleano)
Bom, j´a que abrimos o nosso ´ultimo arquivo editado com o comando
‘0
podemos, e provavelmente o faremos, editar no mesmo ponto em que est´avamos
editando da ´ultima vez:
gi
 Pode-se criar um ‘alias’3
para que ao abrir o vim o mesmo abra o ´ultimo ar-
quivo editado: ‘alias lvim=vim -c normal ’0’. No cap´ıtulo 6 p´agina
42 vocˆe encontra mais dicas de edi¸c˜ao.
2.20 Modelines
:h modeline
S˜ao um modo de guardar preferˆencias no pr´oprio arquivo, suas preferˆencias
viajam literalmente junto com o arquivo, basta usar em uma das 5 primeiras
linhas ou na ´ultima linha do arquivo algo como:
# vim:ft=sh:
OBS: Vocˆe deve colocar um espa¸co entre a palavra ‘vim’ e a primeira coluna,
ou seja, a palavra ‘vim’ deve vir precedida de um espa¸co, da´ı em diante cada
op¸c˜ao fica assim:
:op¸c~ao:
Por exemplo: posso salvar um arquivo com extens˜ao .sh e dentro do mesmo
indicar no modeline algo como:
# vim:ft=txt:nu:
Apesar de usar a extens˜ao ‘sh’ o Vim reconhecer´a este arquivo como ‘txt’, e
caso eu n˜ao tenha habilitado a numera¸c˜ao, ainda assim o Vim usar´a por causa
da op¸c˜ao ‘nu’. Portanto o uso de modelines pode ser um grande recurso para o
seu dia-a-dia pois vocˆe pode coloca-las dentro dos coment´arios!
3Abrevia¸c˜ao para um comando do GNU/Linux
2.21 Edi¸c˜ao avan¸cada de linhas 21
2.21 Edi¸c˜ao avan¸cada de linhas
Seja o seguinte texto:
1 este ´e um texto novo
2 este ´e um texto novo
3 este ´e um texto novo
4 este ´e um texto novo
5 este ´e um texto novo
6 este ´e um texto novo
7 este ´e um texto novo
8 este ´e um texto novo
9 este ´e um texto novo
10 este ´e um texto novo
Suponha que queira-se apagar “´e um texto” da linha 5 at´e o fim (linha 10).
Isto pode ser feito assim:
:5,$ normal 0wd3w
Explicando o comando acima:
:5,$ .... indica o intervalo que ´e da linha 5 at´e o fim ‘$’
normal .. executa em modo normal
0 ....... move o cursor para o come¸co da linha
w ....... pula uma palavra
d3w ..... apaga 3 palavras ‘w’
Obs: ´E claro que um comando de substitui¸c˜ao simples
:5,$s/´e um texto//g
Resolveria neste caso, mas a vantagem do m´etodo anterior ´e que ´e v´alido para
trˆes palavras, sejam quais forem. Tamb´em ´e poss´ıvel empregar comandos de
inser¸c˜ao como ‘i’ ou ‘a’ e retornar ao modo normal, bastando para isso usar o
recurso Ctrl-v Esc, de forma a simular o acionamento da tecla Esc (sa´ıda do
modo de inser¸c˜ao). Por exemplo, suponha agora que deseja-se mudar a frase
“este ´e um texto novo” para “este n˜ao ´e um texto velho”; pode ser feito assim:
:5,$ normal 02win~ao ^[$ciwvelho
Decompondo o comando acima temos:
:5,$ .... indica o intervalo que ´e da linha 5 at´e o fim ‘$’
normal .. executa em modo normal
0 ....... move o cursor para o come¸co da linha
2w ...... pula duas palavras (vai para a palavra ´e)
22 Editando
i ....... entra no modo de inser¸c~ao
n~ao .... insere a palavra n~ao seguida de espa¸co  
^[ ...... sai do modo de inser¸c~ao (atrav´es de Ctrl-v seguido
de Esc)
$ ....... vai para o fim da linha
ciw ..... apaga a ´ultima palavra (novo) e entra em modo de
inser¸c~ao
velho ... insere a palavra velho no lugar de novo
A combina¸c˜ao Ctrl-v ´e utilizada para inserir caracteres de controle na sua forma
literal, prevenindo-se assim a interpreta¸c˜ao destes neste exato momento.
2.22 Comentando rapidamente um trecho
Tomando como exemplo um trecho de c´odigo como abaixo:
1 input{capitulo1}
2 input{capitulo2}
3 input{capitulo3}
4 input{capitulo4}
5 input{capitulo5}
6 input{capitulo6}
7 input{capitulo7}
8 input{capitulo8}
9 input{capitulo9}
Se desejamos comentar da linha 4 at´e a linha 9 podemos fazer:
posicionar o cursor no come¸co da linha 4
Ctrl-v ........... inicia sele¸c~ao por blocos
5j ............... estende a sele¸c~ao at´e o fim
Shift-i .......... inicia inser¸c~ao no come¸co da linha
% ................ insere coment´ario (LaTeX)
Esc .............. sai do modo de inser¸c~ao
2.23 Comparando arquivos com o vimdiff
:h diff
O vim possui um modo para checagem de diferen¸cas entre arquivos, ´e bastante
´util especialmente para programadores, para saber quais s˜ao as diferen¸cas entre
dois arquivos faz-se:
vimdiff arquivo1.txt arquivo2.txt .. exibe as diferen¸cas
]c ................................. mostra pr´oxima diferen¸ca
vim -d ............................. outro modo de abrir o
vimdiff mode
2.23 Comparando arquivos com o vimdiff 23
Para usu´arios do GNU/Linux ´e poss´ıvel ainda checar diferen¸cas remotamente
assim:
vimdiff projeto scp://usuario@estacao//caminho/projeto
O comando acima ir´a exibir lado a lado o arquivo local chamado ‘projeto’ e o
arquivo remoto contido no computador de nome ‘estacao’ de mesmo nome.
Cap´ıtulo 3
Movendo-se no Documento
:h motion.txt
A fim de facilitar o entendimento acerca das teclas e atalhos de movimenta¸c˜ao,
faz-se ´util uma breve recapitula¸c˜ao de conceitos relacionados. Para se entrar em
modo de inser¸c˜ao, estando em modo normal, pode-se pressionar qualquer uma
das teclas abaixo:
i ..... entra no modo de inser¸c~ao antes do caractere atual
I ..... entra no modo de inser¸c~ao no come¸co da linha
a ..... entra no modo de inser¸c~ao ap´os o caractere atual
A ..... entra no modo de inser¸c~ao no final da linha
o ..... entra no modo de inser¸c~ao uma linha abaixo
O ..... entra em modo de inser¸c~ao uma linha cima
Esc . sai do modo de inser¸c~ao
Uma vez no modo de inser¸c˜ao todas as teclas s˜ao exatamente como nos outros
editores simples, caracteres que constituem o conte´udo do texto sendo digitado.
Para sair do modo de inser¸c˜ao e retornar ao modo normal digita-se Esc ou
Ctrl-[. As letras h, k, l, j funcionam como setas:
k
h l
j
ou seja, a letra ‘k’ ´e 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 ideia
´e que se consiga ir para qualquer lugar do texto sem tirar as m˜aos do teclado,
sendo portanto alternativas para as setas de movimenta¸c˜ao usuais do teclado.
Ao inv´es de manter os quatro dedos sobre H, J, K e L, ´e aconselh´avel manter
o padr˜ao de digita¸c˜ao com o indicador da m˜ao esquerda sobre a tecla F e o da
m˜ao direita sobre a letra J, sendo que seu indicador da m˜ao direita vai alternar
entre a tecla J e H para a movimenta¸c˜ao.
Para ir para linhas espec´ıficas ‘em modo normal’ digite:
25
:nEnter ..... vai para linha ‘n’
ngg ............ vai para linha ‘n’
nG ............. vai para linha ‘n’
onde “n” corresponde ao n´umero da linha. Para retornar ao modo normal pres-
sione Esc ou use Ctrl-[ (^[).
No vim ´e poss´ıvel realizar diversos tipos de movimentos, tamb´em conhecidos
como saltos no documento. A lista abaixo aponta o comandos de salto t´ıpicos.
gg .... vai para o in´ıcio do arquivo
G ..... vai para o final do arquivo
0 ..... vai para o in´ıcio da linha
^ ..... vai para o primeiro caractere da linha (ignora
espa¸cos)
$ ..... vai para o final da linha
25gg .. salta para a linha 25
’’ .... salta para a linha da ´ultima posi¸c~ao em que o cursor
estava
fx .... para primeira ocorr^encia de x
tx .... Para ir para uma letra antes de x
Fx .... Para ir para ocorr^encia anterior de x
Tx .... Para ir para uma letra ap´os o ´ultimo x
* ..... Pr´oxima ocorr^encia de palavra sob o cursor
‘’ .... salta exatamente para a posi¸c~ao em que o cursor
estava
gd .... salta para declara¸c~ao de vari´avel sob o cursor
gD .... salta para declara¸c~ao (global) de vari´avel sob o
cursor
w ..... move para o in´ıcio da pr´oxima palavra
W ..... pula para pr´oxima palavra (desconsidera h´ıfens)
E ..... pula para o final da pr´oxima palavra (desconsidera
hifens)
e ..... move o cursor para o final da pr´oxima palavra
zt .... movo o cursor para o topo da p´agina
zm .... move o cursor para o meio da p´agina
zz .... move a p´agina de modo com que o cursor fique no
centro
n ..... move o cursor para a pr´oxima ocorr^encia da busca
N ..... move o cursor para a ocorr^encia anterior da busca
Tamb´em ´e poss´ıvel efetuar saltos e fazer algo mais ao mesmo tempo, a lista
abaixo aponta algumas dessas possibilidades.
gv .... repete a ´ultima sele¸c~ao visual e posiciona o cursor
neste local
% ..... localiza par^enteses correspondente
o ..... letra ‘o’, alterna extremos de sele¸c~ao visual
yG .... copia da linha atual at´e o final do arquivo
d$ .... deleta do ponto atual at´e o final da linha
26 Movendo-se no Documento
gi .... entra em modo de inser¸c~ao no ponto da ´ultima edi¸c~ao
gf .... abre o arquivo sob o cursor
Para o Vim “palavras-separadas-por-h´ıfen” s˜ao consideradas em separado, por-
tanto se vocˆe usar, em modo normal “w” para avan¸car entre as palavras ele
pular´a uma de cada vez, no entanto se usar “W” em mai´usculo (como visto) ele
pular´a a “a-palavra-inteira” :)
E .... pula para o final de palavras com hifen
B .... pula palavras com hifen (retrocede)
W .... pula palavras hifenizadas (come¸co)
Podemos pular senten¸cas:
) .... pula uma senten¸ca para frente
( .... pula uma senten¸ca para tr´as
} .... pula um par´agrafo para frente
{ .... pula um par´agrafo para tr´as
y) ... copia uma senten¸ca para frente
d} ... deleta um par´agrafo para frente
Caso tenha uma estrutura como abaixo:
def pot(x):
return x**2
E tiver uma referˆencia qualquer para a fun¸c˜ao pot e desejar mover o cursor at´e
sua defini¸c˜ao basta posicionar o cursor sobre a palavra pot e pressionar (em
modo normal):
gd
Se a vari´avel for global, ou seja, estiver fora do documento (provavelmente em
outro) use:
gD
Quando definimos uma vari´avel tipo
var = ‘teste’
e em algum ponto do documento houver referˆencia a esta vari´avel e se desejar
ver seu conte´udo fazemos
[i
27
Na verdade o atalho acima lhe mostrar´a o ´ultimo ponto onde foi feita a atribui¸c˜ao
`aquela vari´avel que est´a sob o cursor, uma m˜ao na roda para os programadores
de plant˜ao!  Observe a barra de status do Vim se o tipo de arquivo est´a
certo, tipo. Para detalhes sobre como personalizar a barra de status na se¸c˜ao
12.10.2.
ft=python
a busca por defini¸c˜oes de fun¸c˜ao s´o funciona se o tipo de arquivo estiver correto
:set ft=python
 Um mapeamento interessante que facilita a movimenta¸c˜ao at´e linahas que
contenham determinada palavra de um modo bem simples, bastando pressionar
,f pode ser feito assim:
map ,f [I:let nr = input(Which one: )Barexe normal  . nr .[tCR
Uma vez definido o mapeamento acima e pressionando-se o atalho associado,
que neste caso ´e ,f o vim exibir´a as uma opp¸c˜ao para pular para as ocorrˆencias
da palavra assim:
1: trecho contendo a palavra
2: outro trecho contendo a palavra
Which one:
outro detalhe para voltar ao ´ultimo ponto em que vocˆe estava
’’
A maioria dos comandos do Vim pode ser precedida por um quantificador:
5j ..... desce 5 linhas
d5j .... deleta as pr´oximas 5 linhas
k ...... em modo normal sobe uma linha
5k ..... sobe 5 linhas
y5k .... copia 5 linhas (para cima)
w ...... pula uma palavra para frente
5w ..... pula 5 palavras
d5w .... deleta 5 palavras
b ...... retrocede uma palavra
5b ..... retrocede 5 palavras
fx ..... posiciona o cursor em ‘‘x’’
dfx .... deleta at´e o pr´oximo ‘‘x’’
dgg .... deleta da linha atual at´e o come¸co do arquivo
dG ..... deleta at´e o final do arquivo
yG ..... copia at´e o final do arquivo
yfx .... copia at´e o pr´oximo ‘‘x’’
y5j .... copia 5 linhas
28 Movendo-se no Documento
3.1 Paginando
Para rolar uma p´agina 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 posi¸c~ao mais recente
Ctrl-o ... salta para a posi¸c~ao mais antiga
’0 ....... abre o ´ultimo arquivo editado
’1 ....... abre o pen´ultimo arquivo editado
gd ....... pula para a defini¸c~ao de uma vari´avel
} ........ pula para o fim do par´agrafo
10| ...... pula para a coluna 10
[i ....... pula para defini¸c~ao de vari´avel sob o cursor
Observa¸c˜ao: lembre-se
^ .... equivale a Ctrl
^I ... equivale a Ctrl-I
´E poss´ıvel abrir v´arios arquivos tipo vim *.txt. Editar algum arquivo, salvar
e ir para o pr´oximo arquivo com o comando `a seguir:
:wn
Ou voltar ao arquivo anterior
:wp
´E poss´ıvel ainda “rebobinar” sua lista de arquivos.
:rew[wind]
Ir para o primeiro
:fir[st]
Ou para o ´ultimo
:la[st]
3.2 Usando marcas 29
3.2 Usando marcas
:h mark-motions
As marcas s˜ao um meio eficiente de se pular para um local no arquivo. Para
criar uma, estando em modo normal faz-se:
ma
Onde ‘m’ indica a cria¸c˜ao de uma marca e ‘a’ ´e o nome da marca. Para pular
para a marca ‘a’:
‘a
Para voltar ao ponto do ´ultimo salto:
’’
Para deletar de at´e a marca ‘a’ (em modo normal):
d’a
3.2.1 Marcas globais
Durante a edi¸c˜ao de v´arios arquivos pode-se definir uma marca global com o
comando:
mA
Onde ‘m’ cria a marca e ‘A’ (mai´usculo) define uma marca ‘A’ acess´ıvel a qualquer
momento com o comando:
’A
Isto far´a o Vim dar um salto at´e a marca ‘A’ mesmo que esteja em outro arquivo,
mesmo que vocˆe tenha acabado de fecha-lo. Para abrir e editar v´arios arquivos
do Vim fazemos:
vim *.txt ......... abre todos os arquivos ‘txt’
:bn ............... vai para o pr´oximo da lista
:bp ............... volta para o arquivo anterior
:ls ............... lista todos os arquivos abertos
:wn ............... salva e vai para o pr´oximo
:wp ............... salva e vai para o pr´evio
Cap´ıtulo 4
Folders
Folders s˜ao 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 visualiza¸c˜ao completa do texto. Um modo de entender
rapidamente como funcionam as dobras no Vim seria criando uma “dobra” para
as pr´oximas 10 (dez) linhas com o comando abaixo:
zf10j
Vocˆe pode ainda criar uma sele¸c˜ao visual
Shift-v ............ sele¸c~ao por linha
j .................. desce linha
zf ................. cria o folder
zo ................. abre o folder
4.1 M´etodos de dobras
O Vim tem seis modos fold, s˜ao eles:
• Sintaxe (syntax)
• Identa¸c˜ao (indent)
• Marcas (marker)
• Manual (manual)
• Diferen¸cas (diff)
• Express˜oes Regulares (expr)
4.2 Manipulando dobras 31
Para determinar o tipo de dobra fa¸ca
:set foldmethod=tipo
onde o tipo pode ser um dos tipos listados acima, exemplo:
:set foldmethod=marker
Outro modo para determinar o m´etodo de dobra seria colocando na ´ultima linha
do seu arquivo algo assim:
vim:fdm=marker:fdl=0:
Obs: fdm significa foldmethod, e fdl significa foldlevel. Deve haver um espa¸co
entre a palavra inicial“vim”e o come¸co da linha este recurso chama-se modeline,
leia mais na se¸c˜ao “2.20 modelines” na p´agina 20.
4.2 Manipulando dobras
Os principais comandos relativos ao uso de dobras s˜ao:
zo ................ abre a dobra
zO ................ abre a dobra, recursivamente
za ................ abre/fecha (alterna) a dobra
zA ................ abre/fecha (alterna) a dobra,
recursivamente
zR ................ abre todas as dobras do arquivo atual
zM ................ fecha todas as dobras do arquivo atual
zc ................ fecha uma dobra
zC ................ fecha a dobra abaixo do cursor,
recursivamente
zfap .............. cria uma dobra para o par´agrafo ‘ap’
atual
zf/casa ........... cria uma dobra at´e a palavra casa
zf’a .............. cria uma dobra at´e a marca ‘a’
zd ................ apaga a dobra (n~ao o seu conte´udo)
zj ................ move para o in´ıcio da pr´oxima dobra
zk ................ move para o final da dobra anterior
[z ................ move o cursor para in´ıcio da dobra
aberta
]z ................ move o cursor para o fim da dobra aberta
zi ................ desabilita ou habilita as dobras
zm, zr ............ diminui/aumenta n´ıvel da dobra ‘fdl’
:set fdl=0 ........ n´ıvel da dobra 0 (foldlevel)
:set foldcolumn=4 . mostra uma coluna ao lado da numera¸c~ao
Para abrir e fechar as dobras usando a barra de espa¸cos coloque o trecho abaixo
no seu arquivo de configura¸c˜ao do Vim (.vimrc) - veja o cap´ıtulo 12, p´agina 79.
32 Folders
nnoremap space @=((foldclosed(line(.))  0) ?
 ’zc’ : ’zo’)CR
A barra, , nesse comando representa o particionamento do comando em mais
de uma linha.
Para abrir e fechar as dobras utilizando o clique do mouse no gvim, basta acres-
centar na configura¸c˜ao do seu .vimrc:
set foldcolumn=2
o que adiciona uma coluna ao lado da coluna de enumera¸c˜ao das linhas.
4.3 Criando dobras usando o modo visual
Para iniciar a sele¸c˜ao visual
Esc ........ vai para o modo normal
shift-v .... inicia sele¸c~ao visual
j .......... aumenta a sele¸c~ao visual (desce)
zf ......... cria a dobra na sele¸c~ao ativa
Um modo inusitado de se criar dobras ´e:
Shift-v ..... inicia sele¸c~ao visual
/chapter/-2 . extende a sele¸c~ao at´e /chapter -2 linhas
zf .......... cria a dobra
Cap´ıtulo 5
Registros
O Vim possui nove tipos de registros, cada tipo tem uma utilidade espec´ıfica, por
exemplo vocˆe pode usar um registro que guarda o ´ultimo comando digitado, pode
ainda imprimir dentro do texto o nome do pr´oprio arquivo, armazenar por¸c˜oes
distintas de texto (´area de transferˆencia m´ultipla) etc. Vamos aos detalhes.
• O registro sem nome “”
• 10 registros nomeados de “9”
• O registro de pequenas dele¸c˜oes -
• 26 registros nomeados de “z” ou de “Z”
• 4 registros somente leitura
• O registro de express˜oes ”=
• Os registro de sele¸c˜ao e ”*, ”+ and ”
• O registro “o”
• Registro do ´ultimo padr˜ao de busca ”/
5.1 O registro sem nome “”
Armazena o conte´udo de a¸c˜oes como:
d ....... dele¸c~ao
s ....... substitui¸c~ao
c ....... modifica¸c~ao ‘change’
x ....... apaga um caractere
yy ...... copia uma linha inteira
Para acessar o conte´udo deste registro basta usar as letras “p” ou “P” que na
verdade s˜ao comandos para colar abaixo da linha atual e acima da linha atual
(em modo normal).
34 Registros
5.2 Registros nomeados de 0 a 9
:h registers
O registro zero armazena o conte´udo da ´ultima c´opia ‘yy’, `a partir do registro
1 v˜ao sendo armazenadas as dele¸c˜oes sucessivas de modo que a mais recente
dele¸c˜ao ser´a armazenada no registro 1 e os registros v˜ao sendo incrementados
em dire¸c˜ao ao nono. Dele¸c˜ao menores que uma linha n˜ao s˜ao armazenadas
nestes registros, caso em que o Vim usa o registro de pequenas dele¸c˜oes ou que
se tenha especificado algum outro registro.
5.3 Registro de pequenas dele¸c˜oes -
Quando se deleta algo menor que uma linha o Vim armazena os dados deletados
neste registro.
5.4 Registros nomeados de “a at´e z” ou “A at´e
Z”
Pode-se armazenar uma linha em modo normal assim:
ayy
Desse modo o Vim guarda o conte´udo da linha no registro ‘a’ caso queira arma-
zenar mais uma linha no registro ‘a’ use este comando:
Add
Neste caso a linha corrente ´e apagada ‘dd’ e adicionada ao final do registro “a”.
ayip .. copia o par´agrafo atual para o registro ‘‘a’’
a ..... registro a
y ...... yank (copia)
ip ..... inner paragraph (este par´agrafo)
5.5 Registros somente leitura “: . % #”
: ..... armazena o ´ultimo comando
. ..... armazena uma c´opia do ´ultimo texto inserido
% ..... cont´em o nome do arquivo corrente
# ..... cont´em o nome do arquivo alternativo
Uma forma pr´atica de usar registros em modo de inser¸c˜ao ´e usando: Ctrl-r
5.6 Registro de express˜oes ”= 35
Ctrl-r % .... insere o nome do arquivo atual
Ctrl-r : .... insere o ´ultimo comando digitado
Ctrl-r / .... insere a ´ultima busca efetuada
Ctrl-r a .... insere o registro ‘a’
Em modo de inser¸c˜ao pode-se repetir a ´ultima inser¸c˜ao de texto simplesmente
pressionando:
Ctrl-a
5.6 Registro de express˜oes ”=
=
O registro de express˜oes permite efetuar c´alculos diretamente no editor, usando o
atalho“Ctrl-r =”no modo de inser¸c˜ao, o editor mostrar´a um sinal de igualdade
na barra de status e o usu´ario digita ent˜ao uma express˜ao matem´atica como uma
multiplica¸c˜ao “6*9” e em seguida pressiona Enter para que o editor finalize a
opera¸c˜ao. Veja um v´ıdeo demonstrando sua utiliza¸c˜ao neste link [2].
Para entender melhor como funciona o registro de express˜oes tomemos um exem-
plo. Para fazer uma sequˆencia como abaixo:
linha 1 tem o valor 150,
linha 2 tem o valor 300,
linha 3 tem o valor 450,
...
Acompanhe os passos para a cria¸c˜ao de uma macro permite fazer uma sequˆencia
de quantas linhas forem necess´arias com o incremento proposto acima.
Esc ......... sai do modo de inser¸c~ao
qa ............. inicia a macro
yy ............. copia a primeira linha
p .............. cola a linha copiada
w .............. pula para o n´umero ‘1’
Ctrl-a ....... incrementa o n´umero (agora 2)
4w ............. avan¸ca 4 palavras at´e 150
ndw ........... apaga o ‘150’ para o registro n
a .............. entra em modo de inser¸c~ao
Ctrl-r = ....... abre o registro de express~oes
Ctrl-r n + 150 insere dentro do registro de express~oes
o registro n
Enter ........ executa o registro de express~oes
Esc ........... sai do modo de inser¸c~ao
0 ............... vai para o come¸co da linha
q ............... para a grava¸c~ao da macro
36 Registros
Agora posicione o cursor no come¸co da linha e pressione “10@a”.
 Na se¸c˜ao 12.8.6 p´agina 86 h´a mais dicas sobre o uso do registro de express˜oes
c´alculos matem´aticos.
5.7 Registros de arrastar e mover
O registro
*
´e respons´avel por armazenar o ´ultimo texto selecionado (p.e., atrav´es do mouse).
J´a o registro
+
´e o denominado“´area de transferˆencia”, normalmente utilizado para se transferir
conte´udos entre aplica¸c˜oes—este registro ´e preenchido, por exemplo, usando-se
a t´ıpica combina¸c˜ao Ctrl-v encontrada em muitas aplica¸c˜oes. Finalmente, o
registro
~
armazena o texto colado pela opera¸c˜ao mais recente de“arrastar-e-soltar”(drag-
and-drop).
5.8 Registro buraco negro ”
Use este registro quando n˜ao quiser alterar os demais registros, por exemplo: se
vocˆe deletar a linha atual,
dd
Esta a¸c˜ao ir´a colocar a linha atual no registro numerado 1, caso n˜ao queira
alterar o conte´udo do registro 1 apague para o buraco negro assim:
_dd
5.9 Registros de buscas “/”
Se desejar inserir em uma substitui¸c˜ao uma busca pr´evia, vocˆe poderia fazer
assim em modo de comandos:
:%s,Ctrl-r/,novo-texto,g
5.10 Manipulando registros 37
Observa¸c˜ao: veja que estou trocando o delimitador da busca para deixar claro
o uso do registro de buscas “/”.  Pode-se usar um registro nomeado de ‘a-z’
assim:
let @a=new
:%s/old/=@a/g ...... substitui ’old’ por new
=@a ................ faz refer^encia ao registro ‘a’
5.10 Manipulando registros
:let @a=@_ ... limpa o registro a
:let @a=‘‘’’ ... limpa o registro a
:let @a=@ ... salva registro sem nome *N*
:let @*=@a ... copia o registro para o buffer de colagem
:let @*=@: ... copia o ultimo comando para o buffer de
colagem
:let @*=@/ ... copia a ´ultima busca para o buffer de
colagem
:let @*=@% ... copia o nome do arquivo para o buffer de
colagem
:reg ... mostra o conte´udo de todos os registros
Em modo de inser¸c˜ao
C-R- ....... Insere o registro de pequenas dele¸c~oes
C-R[0-9a-z] .. Insere registros 0-9 e a-z
C-R% .. Insere o nome do arquivo
C-R=somevar .. Insere o conte´udo de uma vari´avel
C-RC-A ..... Insere ‘Big-Words’ veja se¸c~ao 2.1
Um exemplo: pr´e-carregando o nome do arquivo no registro n.
coloque em seu ~/.vimrc
let @n=@%
Como foi atribu´ıdo ao registro n o conte´udo de @%, ou seja, o nome do arquivo,
vocˆe pode fazer algo assim em modo de inser¸c˜ao:
Ctrl-r n
E o nome do arquivo ser´a inserido
5.11 Listando os registros atuais
Digitando o comando
38 Registros
:reg
ou ainda
:ls
O Vim mostrar´a os registros numerados e nomeados atualmente em uso
5.12 Listando arquivos abertos
Suponha que vocˆe abriu v´arios arquivos txt assim:
vim *.txt
Para listar os arquivos aberto fa¸ca:
:buffers
Usando o comando acima o Vim exibir´a a lista de todos os arquivos abertos,
ap´os exibir a lista vocˆe pode escolher um dos arquivos da lista, algo como:
:buf 3
Para editar arquivos em sequˆencia fa¸ca as altera¸c˜oes no arquivo atual e acesso
o pr´oximo assim:
:wn
O comando acima diz → ‘w gravar’ → ‘n pr´oximo’
5.13 Dividindo a janela com o pr´oximo arquivo
da lista de buffers
:sn
O comando acima ´e uma abrevia¸c˜ao de split next, ou seja, dividir e pr´oximo.
5.14 Como colocar um peda¸co de texto em um
registro?
Esc ...... vai para o modo normal
a10j ...... coloca no registro ‘a’ as pr´oximas 10 linhas
‘10j’
5.15 Como criar um registro em modo visual? 39
Pode-se fazer:
Esc ...... para ter certeza que est´a em modo normal
ap ........ registro a ‘paste’, ou seja, cole
Em modo de inser¸c˜ao faz-se:
Ctrl-r a
 H´a situa¸c˜oes em que se tem caracteres n˜ao “ascii ” que s˜ao complicados de
se colocar em uma busca ou substitui¸c˜ao, nestes casos pode-se usar os seguintes
comandos:
ayl ............. copia para o registro ‘a’ o caractere sob
o cursor
:%s/c-ra/char .. subsitui o conte´udo do registro ‘a’ por
char
Pode-se ainda usar esta t´ecnica para copiar rapidamente coment´arios do“bash1
”,
representados pelo caracteres #, em modo normal usando o atalho “0yljP”.
0 ............... posiciona o cursor no in´ıcio a linha
yl .............. copia o caractere sob o cursor
j ............... desce uma linha
P ............... cola o caractere copiado
5.15 Como criar um registro em modo visual?
Inicie a sele¸c˜ao visual com o atalho
Shift-v ..... seleciona linhas inteiras
pressione a letra “j” at´e chegar ao ponto desejado, agora fa¸ca
ay
pressione “v” para sair do modo visual.
5.16 Como definir um registro no vimrc?
Se vocˆe n˜ao sabe ainda como editar preferˆencias no Vim leia antes o cap´ıtulo
12.
Vocˆe pode criar uma vari´avel no vimrc assim:
1Interpretador de comandos do GNU/Linux
40 Registros
let var=foo ...... define foo para var
echo var ........... mostra o valor de var
Pode tamb´em dizer ao Vim algo como...
:let @d=strftime(c)Enter
Neste caso estou dizendo a ele que guarde na vari´avel ‘d’ at d, o valor da data
do sistema ‘strftime(c)’ ou ent˜ao cole isto no vimrc:
let @d=strftime(c)cr
A diferen¸ca entre digitar diretamente um comando e adicion´a-lo ao vimrc ´e
que uma vez no vimrc o registro em quest˜ao estar´a sempre dispon´ıvel, observe
tamb´em as sutis diferen¸cas, um Enter inserido manualmente ´e apenas uma
indica¸c˜ao de uma a¸c˜ao que vocˆe far´a pressionando a tecla especificada, j´a 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-rd
nmap ,d dp
As atribui¸c˜oes acima correspondem a:
1. Guarda a data na vari´avel ‘d’
2. Mapeamento para o modo de inser¸c˜ao “imap” digite ,d
3. Mapeamento para o modo normal “nmap” digite ,d
E digitar ,d normalmente
Desmistificando 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 inser¸c˜ao assim:
Ctrl-r d
5.17 Como selecionar blocos verticais de texto? 41
5.17 Como selecionar blocos verticais de texto?
Ctrl-v
agora use as letras h,l,k,j como setas de dire¸c˜ao at´e finalizar podendo guardar
a sele¸c˜ao em um registro que vai de ‘a’ a ‘z’ exemplo:
ay
Em modo normal vocˆe pode fazer assim para guardar um par´agrafo inteiro em
um registro
ayip
O comando acima quer dizer
para o registro ‘a’ ...... a
copie ...................... ‘y’
o par´agrafo atual .......... ‘inner paragraph’
5.18 Referˆencias
• http://rayninfo.co.uk/vimtips.html
• http://aprendolatex.wordpress.com
• http://pt.wikibooks.org/wiki/Latex
Cap´ıtulo 6
Buscas e Substitui¸c˜oes
Para fazer uma busca, certifique-se de que est´a em modo normal, pressione “/”
e digite a express˜ao a ser procurada.
Para encontrar a primeira ocorrˆencia 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 trˆes linhas ap´os a ocorrˆencia da palavra “teste”
/casa
A busca acima localiza ‘casa’ mas n˜ao ‘casamento’. Em express˜oes regulares,
 e  s˜ao representadas por b, que representa, por sua vez, borda de palavras.
Ou seja, ‘casa,‘, ‘casa!‘ seriam localizado, visto que sinais de pontua¸c˜ao n˜ao
fazem parte da palavra.
6.1 Usando “Express˜oes Regulares” em buscas
:h regex, pattern
/ ........... inicia uma busca (modo normal)
%x69 ....... c´odigo da letra ‘i’
/%x69 ...... localiza a letra ‘i’ - hexadecimal 069
d .......... localiza n´umeros
[3-8] ....... localiza n´umeros de 3 at´e 8
6.1 Usando “Express˜oes Regulares” em buscas 43
^ ........... come¸co de linha
$ ........... final de linha
+ .......... um ou mais
/^d+$ ..... localiza somente d´ıgitos
/r$ ........ localiza linhas terminadas com ^M
/^s*$ ...... localiza linhas vazias ou contendo apenas espa¸cos
/^t+ ...... localiza linhas que iniciam com tabs
s .......... localiza espa¸cos
/s+$ ...... localiza espa¸cos no final da linha
6.1.1 Evitando escapes ao usar Express˜oes regulares
O Vim possui um modo chamado“very magic”para uso em express˜oes regulares
que evita o uso excessivo de escapes, alternativas etc. Usando apenas uma op¸c˜ao:
veja “:h /v”.
Em um trecho com d´ıgitos + texto + d´ıgitos no qual se deseja manter s´o as
letras.
12345aaa678
12345bbb678
12345aac678
Sem a op¸c˜ao “very magic” far´ıamos:
:%s/d{5}(D+)d{3}/1/
J´a com a op¸c˜ao “very magic”“v” usa-se bem menos escapes:
:%s/vd{5}(D+)d{3}/1/
 explica¸c~ao do comando acima
: ......... comando
% ......... em todo arquivo
s ......... substitua
/ ......... inicia padr~ao de busca
v ........ use very magic mode
d ........ d´ıgitos
{5} ....... 5 vezes
( ........ inicia um grupo
D ........ seguido de n~ao d´ıgitos
) ........ fecha um grupo
+ ......... uma ou mais vezes
d ........ novamente d´ıgitos
{3} ....... tr^es vezes
/ ......... inicio da substitui¸c~ao
1 ........ referencia o grupo 1
44 Buscas e Substitui¸c˜oes
Analisando o exemplo anterior, a linha de racioc´ınio foi a de “manter o texto
entre os d´ıgitos”, o que pode ser traduzido, em uma outra forma de racioc´ınio,
como “remover os d´ıgitos”.
:%s/d//g
 explica¸c~ao do comando acima
% ......... em todo arquivo
s ......... substitua
/ ......... inicia padr~ao de busca
d ........ ao encontrar um d´ıgito
/ ......... subtituir por
vazio ..... exato, substituir por vazio
/g ........ a express~ao se torna gulosa
Por guloso - /g - se entende que ele pode e deve tentar achar mais de uma ocor-
rˆencia do padr˜ao de busca na mesma linha. Caso n˜ao seja gulosa, a express˜ao
ir´a apenas casar com a primeira ocorrˆencia em cada linha.
Classes POSIX para uso em Express˜oes Regulares
Ao fazermos substitui¸c˜oes em textos poderemos nos deparar com erros, pois [a-z]
n˜ao inclui caracteres acentuados, as classes POSIX s˜ao a solu¸c˜ao para este pro-
blema, pois adequam o sistema ao idioma local, esta ´e a m´agica implementada
por estas classes.
[:lower:] ...... letras min´usculas incluindo acentos
[:upper:] ...... letras mai´usculas incluindo acentos
[:punct:] ...... ponto, virgula, colchete, etc
Para usar estas classes fazemos:
:%s/[[:lower:]]/U/g
Explicando o comando acima:
: ....... modo de comando
% ....... em todo o arquivo atual
s ....... substitua
/ ....... inicia o padr~ao a ser buscado
[ ....... inicia um grupo
[: ...... inicia uma classe POSIX
lower ... letras min´usculas
:] ...... termina a classe POSIX
] ....... termina o grupo
/ ....... inicia substitui¸c~ao
U ...... para mai´usculo
 ....... correponde ao que foi buscado
6.2 Destacando padr˜oes 45
Nem todas as classes POSIX conseguem pegar caracteres acentuados, portanto
deve-se habilitar o destaque colorido para buscas usando:
:set hlsearch .... destaque colorido para buscas
:set incsearch ... busca incremental
Dessa forma podemos testar nossas buscas antes de fazer uma substitui¸c˜ao.
Para aprender mais sobre Express˜oes Regulares leia:
• Guia sobre Espress˜oes Regulares [3]
• :help regex
• :help pattern
 Uma forma r´apida para encontrar a pr´oxima ocorrˆencia de uma palavra sob
o cursor ´e teclar ‘*’. Para encontrar uma ocorrˆencia anterior da palavra sob
o cursor, existe o # (em ambos os casos o cursor deve estar posicionado sobre
a palavra que deseja procurar). As duas op¸c˜oes citadas localizam apenas se
a palavra corresponder totalmente ao padr˜ao sob o cursor, pode-se bucar por
trechos de palavras que fa¸cam parte de palavras maiores usando-se ‘g*’. Pode-
se ainda exibir “dentro do contexto” todas as ocorrˆencias de uma palavra sob o
cursor usando-se o seguinte atalho em modo normal:
[ Shift-i
6.2 Destacando padr˜oes
:h %
Vocˆe pode destacar linhas com mais de 30 caracteres assim:
:match ErrorMsg /%30v/ . destaca linhas maiores que 30 caracteres
:match none .............. remove o destaque
6.3 Inserindo linha antes e depois
Suponha que se queira um comando, considere “,t”, que fa¸ca com que a linha
indentada corrente passe a ter uma linha em branco antes e depois; isto pode
ser obtido pelo seguinte mapeamento:
:map ,t Esc:.s/^(s+)(.*)/r12r/gcr
Explicando:
46 Buscas e Substitui¸c˜oes
: ................ entra no modo de comando
map ,t ........... mapeia ,t para a fun¸c~ao desejada
Esc ............ ao executar sai do modo de inser¸c~ao
s/isto/aquilo/g .. substitui isto por aquilo
: ................ inicia o modo de comando
. ................ na linha corrente
s ................ substitua
^ ................ come¸co de linha
s+ ............. um espa¸co ou mais (barras s~ao escapes)
.* ............... qualquer coisa depois
(grupo) ........ agrupo para referenciar com 1
1 ............... repete na substitui¸c~ao o grupo 1
r ............... insere uma quebra de linha
g ................ em todas as ocorr^encias da linha
cr ............. Enter
6.4 Obtendo informa¸c˜oes do arquivo
ga ............. mostra o c´odigo do caractere em decimal hexa e octal
^g ............. mostra o caminho e o nome do arquivo
g^g ............ mostra estat´ısticas detalhadas do arquivo
Obs: O c´odigo do caractere pode ser usado para substitui¸c˜oes, especialmente
em se tratando de caracteres de controle como tabula¸c˜oes “^I” ou final de li-
nha DOS/Windows “%x0d”. Vocˆe pode apagar os caracteres de final de linha
Dos/Windows usando uma simples substitui¸c˜ao, veja mais adiante:
:%s/%x0d//g
Uma forma mais pr´atica de substituir o terminador de linha DOS para o termi-
nador de linha Unix:
:set ff=unix
:w
Na se¸c˜ao 12 p´agina 79 h´a um c´odigo para a barra de status que faz com que a
mesma exiba o c´odigo do caractere sob o cursor na se¸c˜ao 12.10.2.  O caractere
de final de linha do Windows/DOS pode ser inserido com a seguinte combina¸c˜ao
de teclas:
i ............ entra em modo de inser¸c~ao
INSERT ..... entra em modo de inser¸c~ao
Ctrl-v Ctrl-m insere o simbolo ^M (terminador de linha DOS)
6.5 Trabalhando com registradores 47
6.5 Trabalhando com registradores
Pode-se guardar trechos do que foi copiado ou apagado para registros distintos
(´area de transferˆencia m´ultipla). Os registros s˜ao indicados por aspas seguido
por uma letra. Exemplos: a, b, c, etc.
Como copiar o texto para um registrador? ´E simples: basta especificar o nome
do registrador antes:
add ... apaga linha para o registrador a
bdd ... apaga linha para o registrador b
ap .... cola o conte´udo do registrador a
bp .... cola o conte´udo do registrador b
x3dd .. apaga 3 linhas para o registrador ‘‘x’’
ayy .. copia linha para o registrador ‘a’
a3yy .. copia 3 linhas para o registrador ‘a’
ayw .. copia uma palavra para o registrador ‘a’
a3yw .. copia 3 palavras para o registrador ‘a’
No “modo de inser¸c˜ao”, como visto anteriormente, pode-se usar um atalho para
colar rapidamente o conte´udo de um registrador.
Ctrl-r (registro)
Para colar o conte´udo do registrador ‘a’
Ctrl-r a
Para copiar a linha atual para a ´area de transferˆencia
+yy
Para colar da ´area de transferˆencia
+p
Para copiar o arquivo atual para a ´area de transferˆencia “clipboard”:
:%y+
6.6 Edi¸c˜oes complexas
Trocando palavras de lugar: Posiciona-se o cursor no espa¸co antes da 1a
palavra
e digita-se:
deep
48 Buscas e Substitui¸c˜oes
Trocando letras de lugar:
xp .... com a letra seguinte
xh[p .. com a letra anterior
Trocando linhas de lugar:
ddp ... com a linha de baixo
ddkP .. com a linha de cima
Tornando todo o texto mai´usculo
gggUG
ggVGU
6.7 Indentando
 ..... Indenta a linha atual
^t ..... Indenta a linha atual em modo de inser¸c~ao
^d ..... Remove indenta¸c~ao em modo de inser¸c~ao
ip .... indenta o par´agrafo atual
6.8 Corrigindo a indenta¸c˜ao de c´odigos
Selecione o bloco de c´odigo, por exemplo
vip ..... visual ‘‘inner paragraph’’ (selecione este par´agrafo)
= ....... corrige a indenta¸c~ao do bloco de texto selecionado
ggVG= .... corrige a identa¸c~ao do arquivo inteiro
6.9 Usando o File Explorer
O Vim navega na ´arvore de diret´orios com o comando
vim .
Use o ‘j’ para descer e o ‘k’ para subir ou Enter para editar o arquivo selecio-
nado.  Pressionando F1 ao abrir o FileExplorer do Vim, vocˆe encontra dicas
adicionais sobre este modo de opera¸c˜ao do Vim.
6.10 Selecionando ou deletando conte´udo de tags HTML 49
6.10 Selecionando ou deletando conte´udo de tags
HTML
tag conte´udo da tag /tag
basta usar (em modo normal) as teclas
vit ............... visual ‘inner tag | esta tag’
Este recurso tamb´em funciona com parˆenteses
vi( ..... visual select
vi ..... visual select
di( ..... delete inner (, ou seja, seu conte´udo
6.11 Substitui¸c˜oes
Para fazer uma busca, certifique-se de que est´a em modo normal, em seguida
digite use o comando ‘s’, conforme ser´a explicado.
Para substituir “foo” por “bar” na linha atual:
:s/foo/bar
Para substituir “foo” por “bar” da primeira `a d´ecima linha do arquivo:
:1,10 s/foo/bar
Para substituir “foo” por “bar” da primeira `a ´ultima 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 op¸c˜oes que modificam seu comportamento.
6.12 Exemplos
Busca usando alternativas:
/end(if|while|for)
50 Buscas e Substitui¸c˜oes
Buscar´a ‘if’, ‘while’ e ‘for’. Observe que ´e necess´ario ‘escapar’ os caracteres
(, | e ), caso contr´ario eles ser˜ao interpretados como caracteres comuns.
Quebra de linha
/quebrande linha
Ignorando mai´usculas e min´usculas
/cpalavra
Usando c o Vim encontrar´a “palavra”, “Palavraa” ou at´e mesmo “PALAVRA”.
Uma dica ´e colocar no seu arquivo de configura¸c˜ao “vimrc” veja o cap´ıtulo 12
na p´agina 79.
set ignorecase .. ignora mai´usculas e min´usculas na bucsca
set smartcase ... se busca contiver mai´usculas ele passa a
consider´a-las
set hlsearch .... mostra o que est´a sendo buscado em cores
set incsearch ... ativa a busca incremental
se vocˆe n˜ao sabe ainda como colocar estas preferˆencias no arquivo de confi-
gura¸c˜ao pode ativa-las em modo de comando precedendo-as com dois pontos,
assim:
:set ignorecaseEnter
Substitui¸c˜oes com confirma¸c˜ao:
:%s/word/palavra/c ..... o ‘c’ no final habilita a confirma¸c~ao
Procurando palavras repetidas
/(w*) 1
Multilinha
/Hello_s+World
Buscar´a ‘World’, separado por qualquer n´umero de espa¸cos, incluindo quebras
de linha. Buscar´a as trˆes sequˆencias:
Hello World
Hello World
Hello
World
6.12 Exemplos 51
Buscar linhas de at´e 30 caracteres de comprimento
/^.{,30}$
^ ..... representa come¸co de linha
. ..... representa qualquer caractere
:%s/[^]*//g ... apaga tags HTML/XML
:%g/^$/d ......... apaga linhas vazias
:%s/^[ t]*n//g apaga linhas vazias
Remover duas ou mais linhas vazias entre par´agrafos diminuindo para uma s´o
linha vazia.
:%s/(^n{2,})/r/g
Vocˆe pode criar um mapeamento e colocar no seu /.vimrc
map ,s Esc:%s/(^n{2,})/r/gcr
No exemplo acima, ‘,s’ ´e um mapeamento para reduzir linhas em branco suces-
sivas para uma s´o
Remove n˜ao d´ıgitos (n˜ao pega n´umeros)
:%s/^D.*//g
Remove final de linha DOS/Windows ^M que tem c´odigo hexadecimal igual a
‘0d’
:%s/%x0d//g
Troca palavras de lugar usando express˜oes regulares:
:%s/(.+)s(.+)/2 1/
Modificando todas as tags HTML para min´usculo:
:%s/([^]*)/L1/g
Move linhas 10 a 12 para al´em da linha 30:
:10,12m30
52 Buscas e Substitui¸c˜oes
6.13 O comando global “g”
Buscando um padr˜ao e gravando em outro arquivo:
:’a,’b g/^Error/ . w  errors.txt
Apenas imprimir linhas que cont´em determinada palavra, isto ´e ´util quando
vocˆe quer ter uma vis˜ao sobre um determina aspecto do seu arquivo vejamos:
:set nu ..... habilita numera¸c~ao
:g/Error/p .. apenas mostra as linhas correspondentes
 Para mostrar o as linhas correspondentes a um padr˜ao, mesmo que a nume-
ra¸c˜ao de linha n˜ao esteja habilitada use “:g/padr~ao/#”.
numerar linhas:
:let i=1 | g/^/s//=i.t/ | let i=i+1
Outro modo de inserir n´umeros de linha
:%s/^/=line(’.’).’ ’
: ............ comando
% ............ em todo o arquivo
s ............ substitui¸c~ao
/ ............ inicio da busca
^ ............ come¸co de linha
/ ............ inicio da substitui¸c~ao
=line(’.’) .. corresponde ao no
da linha atual
.’ ’ ........ concatena um espa¸co ap´os o no
Para copiar linhas come¸cadas com Error para o final do arquivo fa¸ca:
:g/^Error/ copy $
Obs: O comando ‘copy’ pode ser abreviado ‘co’ ou ainda pode-se usar ‘t’ para
mais detalhes:
:h co
Como adicionar um padr˜ao copiado com ‘yy’ ap´os um determinado padr˜ao?
:g/padrao/+put!
:g/padrao/.put=’teste’
Entre as linhas que contiverem ‘fred’ e ‘joe’ substitua:
6.13 O comando global “g” 53
:g/fred/,/joe/s/isto/aquilo/gic
As op¸c˜oes ‘gic’ correspondem a global, ignore case e confirm, podendo ser omi-
tidas deixando s´o o global.
Pegar caracteres num´ericos e jogar no final do arquivo:
:g/^d+.*/m $
Inverter a ordem das linhas do arquivo:
:g/^/m0
Apagar as linhas que cont´em Line commented:
:g/Line commented/d
Apagar todas as linhas comentadas
:g/^s*#/d
Copiar determinado padr˜ao para um registro:
:g/pattern/ normal Ayy
Copiar linhas que cont´em um padr˜ao e a linha subsequente para o final:
:g/padr~ao/;+1 copy $
Deletar linhas que n˜ao contenham um padr˜ao:
:v/dicas/d ..... deleta linhas que n~ao contenham ‘dicas’
Incrementar n´umeros no come¸co da linha:
:.,20g/^d/exe normal! c-a
Sublinhar linhas come¸cadas com Chapter:
:g/^Chapter/t.|s/./-/g
: ........ comando
g ........ global
/ ........ inicio de um padr~ao
^ ........ come¸co de linha
Chapter .. palavra literal
54 Buscas e Substitui¸c˜oes
/ ........ fim do par~ao
t ........ copia
. ........ linha atual
s ........ substitua
/ ........ inicio de um padr~ao
. ........ qualquer caractere
/ ........ in´ıcio da substitui¸c~ao
- ........ por tra¸co
/ ........ fim da substitui¸c~ao
g ........ em todas as ocorr^encias
6.14 Dicas
Para colocar a ´ultima busca em uma substitui¸c˜ao fa¸ca:
:%s/Ctrl-r//novo/g
A dupla barra corresponde ao ultimo padr˜ao procurado, e portanto o comando
abaixo far´a a substitui¸c˜ao da ultima busca por casinha:
:%s//casinha/g
6.15 Filtrando arquivos com o vimgrep
Por vezes sabemos que aquela anota¸c˜ao foi feita, mas no momento esquecemos
em qual arquivo est´a, no exemplo abaixo procuramos a palavra dicas `a partir
da nossa pasta pessoal pela palavra ‘dicas’ em todos os arquivos com extens˜ao
‘txt’.
~/ ............ equivale a /home/user
:lvimgrep /dicas/gj ~/**/*.txt | ls
:h lvim ....... ajuda sobre o comando
6.16 Copiar a partir de um ponto
:19;+3 co $
O Vim sempre necessita de um intervalo (inicial e final) mas se usar-mos ‘;’ 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 an´aloga pode-se usar como referˆencia um padr˜ao qualquer:
:/palavra/;+10 m 0
O comando acima diz: `a partir da linha que cont´em “palavra” incluindo as 10
pr´oximas linhas mova ‘m’ para a primeira linha ‘0’, ou seja, antes da linha 1.
6.17 Dicas das lista vi-br 55
6.17 Dicas das lista vi-br
Fonte: Grupo vi-br do yahoo [4]
Problema: Essa deve ser uma pergunta comum. Suponha o seguinte conte´udo
de arquivo:
... // v´arias linhas
texto1000texto // linha i
texto1000texto // linha i+1
texto1000texto // linha i+2
texto1000texto // linha i+3
texto1000texto // linha i+4
... // v´arias linhas
Gostaria de um comando que mudasse para
... // v´arias linhas
texto1001texto // linha i
texto1002texto // linha i+1
texto1003texto // linha i+2
texto1004texto // linha i+3
texto1005texto // linha i+4
... // v´arias linhas
Ou seja, somasse 1 a cada um dos n´umeros entre os textos especificando 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 n˜ao tem awk, e logo a melhor solu¸c˜ao mesmo ´e usar o Vim:
:let i=1 | 10,20 g/textod+texto/s/d+/=submatch(0)+i/ | let i=i+1
Observa¸c˜ao: 10,20 ´e o intervalo, ou seja, da linha 10 at´e a linha 20
:help /
:help :s
:help pattern
 O plugin Visincr [5] Possibilita incrementos em modo visual de diversas for-
mas, um v´ıdeo demonstrativos pode ser visto neste link: http://vimeo.com/4457161
56 Buscas e Substitui¸c˜oes
6.18 Jun¸c˜ao de linhas com Vim
Fonte: dicas-l da unicamp [6]
Colabora¸c˜ao: Rubens Queiroz de Almeida
Recentemente precisei combinar, em um arquivo, duas linhas consecutivas. O
arquivo original continha linhas como:
Matr´ıcula: 123456
Senha: yatVind7kned
Matr´ıcula: 123456
Senha: invanBabnit3
E assim por diante. Eu precisava converter este arquivo para algo como:
Matr´ıcula: 123456 - Senha: yatVind7kned
Matr´ıcula: 123456 - Senha: invanBabnit3
Para isto, basta executar o comando:
:g/^Matr´ıcula/s/n/ - /
Explicando:
s/isto/aquilo/g .. substitui isto por aquilo
g ................ comando global
/................. inicia padr~ao de busca
^ ................ indica come¸co de linha
Matr´ıcula ........ palavra a ser buscada
s ................ inicia substitui¸c~ao
/n/ - / ......... troca quebra de linha ‘n’, por ‘-’
6.19 Buscando em um intervalo de linhas
Para buscar entre as linhas 10 e 50 por um padr˜ao qualquer fazemos:
/padrao%10l$50l
Esta e outras boas dicas podem ser lidas no site vim-faq [7].
Cap´ıtulo 7
Trabalhando com Janelas
O Vim trabalha com o conceito de m´ultiplos buffers de arquivo. Cada buffer
´e um arquivo carregado para edi¸c˜ao. Um buffer pode estar vis´ıvel ou n˜ao, e
´e poss´ıvel dividir a tela em janelas, de forma a visualizar mais de um buffer
simultaneamente.
7.1 Alternando entre Buffers de arquivo
Ao abrir um documento qualquer no Vim o mesmo fica em um buffer. Caso seja
decidido que outro arquivo seja aberto na mesma janela, o documento inicial
ir´a desaparecer da janela atual cedendo lugar ao mais novo, mas permanecer´a
ativo no buffer para futuras modifica¸c˜oes.
Para saber quantos documentos est˜ao abertos no momento utiliza-se o comando
:ls ou :buffers. Esses comandos listam todos os arquivos que est˜ao referenciados
no buffer com suas respectivas ”chaves”de referencia.
Para trocar a visualiza¸c˜ao do Buffer atual pode-se usar:
:buffer# ...... Altera para o buffer anterior
:b2 ........... Altera para o buffer cujo a chave ´e 2
 Para os que preferem atalhos para alternar entre os buffers, ´e poss´ıvel utilizar
‘Ctrl-6’ que tem o mesmo funcionamento do comando ‘:b#’
7.2 Modos de divis˜ao da janela
Como foi dito acima, ´e poss´ıvel visualizar mais de um buffer ao mesmo tempo,
e isso pode ser feito utilizando tab ou split.
58 Trabalhando com Janelas
7.2.1 Utilizando abas tab
A partir do Vim 7 foi disponibilizada a fun¸c˜ao de abrir arquivos em abas, por-
tanto ´e poss´ıvel ter v´arios buffers abertos em abas distintas e alternar entre elas
facilmente. Os comandos para utiliza¸c˜ao das abas s˜ao:
:tabnew ........... Abre uma nova tab
:tabprevious ...... Vai para a tab anterior
:tabnext .......... Vai para a pr´oxima tab
7.2.2 Utilizando split horizontal
Enquanto os comandos referentes a tab deixam a janela inteira dispon´ıvel para
o texto e apenas cria uma pequena aba na parte superior, o comando split lite-
ramente divide a tela atual em duas para visualiza¸c˜ao simultˆanea dos “buffers”
(seja ele o mesmo ou outro diferente). Esse ´e o split padr˜ao do Vim mas pode
ser alterado facilmente colocando a linha abaixo no seu ~/.vimrc:
:set splitright .... split padr~ao para vertical
7.2.3 Utilizando split vertical
O split vertical funciona da mesma maneira que o split horizontal, sendo a
unica diferen¸ca o modo como a tela ´e dividida, pois nesse caso a tela ´e dividida
verticalmente.
7.3 Abrindo e fechando janelas
Ctrl-w-s ...... Divide a janela horizontalmente (:split)
Ctrl-w-v ...... Divide a janela verticalmente (:vsplit)
Ctrl-w-o ...... Faz a janela atual ser a ´unica (:only)
Ctrl-w-n ...... Abre nova janela (:new)
Ctrl-w-q ...... Fecha a janela atual (:quit)
Ctrl-w-c ...... Fecha a janela atual (:close)
 Lembrando que o Vim considera todos os arquivos como “buffers” portanto
quando um arquivo ´e fechado, o que est´a sendo fechado ´e a visualiza¸c˜ao do
mesmo, pois ele continua aberto no “buffer”.
7.4 Salvando e saindo
´E poss´ıvel salvar todas as janelas facilmente, assim como sair tambem:
:wall ............. salva todos ‘write all’
:qall ............. fecha todos ‘quit all’
7.5 Manipulando janelas 59
7.5 Manipulando janelas
Ctrl-w-w ......... Alterna entre janelas
Ctrl-w-j ......... desce uma janela ‘j’
Ctrl-w-k ......... sobe uma janela ‘k’
Ctrl-w-l ......... move para a janela da direta ‘l’
Ctrl-w-h ......... move para a janela da direta ‘h’
Ctrl-w-r ......... Rotaciona janelas na tela
Ctrl-w-+ ......... Aumenta o espa¸co da janela atual
Ctrl-w-- ......... Diminui o espa¸co da janela atual
Pode-se mapear um atalho para redimensionar janelas com as teclas ‘+’ e ‘-’.
:map + c-w+
:map - c-w-
7.6 File Explorer
:h buffers windows
Para abrir o gerenciador de arquivos do Vim use:
:Vex ............ abre o file explorer verticalmente
:Sex ............ abre o file explorer em nova janela
:Tex ............ abre o file explorer em nova aba
:e .............. abre o file explorer na janela atual
ap´os 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
´E poss´ıvel mapear um atalho “no caso abaixo F2” para abrir o File Explorer.
map F2 Esc:Vexcr
 Ao editar um arquivo no qual h´a referˆencia a um outro arquivo, por exemplo:
‘/etc/hosts’, pode-se usar o atalho ‘Ctrl-w f’ para abri-lo em nova janela, ou
‘gf’ para abri-lo na janela atual. Mas ´e importante posicionar o cursor sobre o
nome do arquivo. Veja tamb´em mapeamentos na se¸c˜ao 12.8 p´agina 83.
Cap´ıtulo 8
Repeti¸c˜ao de Comandos
Para repetir a ´ultima edi¸c˜ao saia do modo de Inser¸c˜ao e pressione ponto (.):
.
Para inserir um texto que deve ser repetido v´arias vezes:
1. Posicione o cursor no local desejado;
2. Digite o n´umero de repeti¸c˜oes;
3. Entre em modo de inser¸c˜ao;
4. Digite o texto;
5. Saia do modo de inser¸c˜ao (tecle Esc).
Por exemplo, se vocˆe quiser inserir oitenta tra¸cos numa linha, em vez de digitar
um por um, vocˆe pode digitar o comando:
80i-Esc
Veja, passo a passo, o que aconteceu:
Antes de entrar em modo de inser¸c˜ao usamos um quantificador
‘80’
depois iniciamos o modo de inser¸c˜ao
i
depois digitamos o caractere a ser repetido
-
8.1 Repetindo a digita¸c˜ao de uma linha 61
e por fim sa´ımos do modo de inser¸c˜ao
Esc
Se desej´assemos digitar 10 linhas com o texto
isto ´e um teste
dever´ıamos ent˜ao fazer assim:
Esc .. para ter certeza que ainda estamos no modo normal
10 ..... quantificador antes
i ...... entrar no modo de inser¸c~ao
isto ´e um teste Enter
Esc .. voltar ao modo normal
8.1 Repetindo a digita¸c˜ao de uma linha
modo de inser¸c~ao
Ctrl-y .......... repete a linha acima
Ctrl-e .......... repetira linha abaixo
Ctrl-x Ctrl-l ... repete linhas completas
O atalho Ctrl-x Ctrl-l s´o funcionar´a para uma linha semelhante, experimente
digitar:
uma linha qualquer com algum conte´udo
uma linha Ctrl-x Ctrl-l
e veja o resultado
8.2 Guardando trechos em “registros”
Os registradores ‘a-z’ s˜ao uma esp´ecie de ´area de transferˆencia m´ultipla.
Deve-se estar em modo normal e ent˜ao digitar aspas duplas e uma das 26 letras
do alfabeto, em seguida uma a¸c˜ao por exemplo, ‘y’ (copiar) ‘d’ (apagar). Depois,
mover o cursor para a linha desejada e colar 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 conte´udo do registrador ‘a’ abaixo
bdd ... apaga a linha atual para o registrador ‘b’
62 Repeti¸c˜ao de Comandos
8.3 Gravando comandos
Imagine que vocˆe tem o seguinte trecho de c´odigo:
stdio.h
fcntl.h
unistd.h
stdlib.h
e quer que ele fique assim:
#include stdio.h
#include fcntl.h
#include unistd.h
#include stdlib.h
N˜ao ´e poss´ıvel simplesmente executar repetidas vezes um comando do Vim, pois
´e preciso incluir texto tanto no come¸co quanto no fim da linha? ´E necess´ario
mais de um comando para isso. ´E a´ı que entram as macros. Pode-se gravar at´e
26 macros, j´a que elas s˜ao guardadas nos registros do Vim, que s˜ao identificados
pelas letras do alfabeto. Para come¸car a gravar uma macro no registro ‘a’,
digitamos
qa
No modo Normal. Tudo o que for digitado a partir de ent˜ao, ser´a gravado no
registro ‘a’ at´e que seja conclu´ıdo com o comando Escq novamente (no modo
Normal). Assim, soluciona-se o problema:
Esc ....... para garantir que estamos no modo normal
qa .......... inicia a grava¸c~ao da macro ‘a’
I ........... entra no modo de inser¸c~ao no come¸co da linha
#include  .. insere #include 
Esc ....... sai do modo de inser¸c~ao
A .......... insere o ´ultimo caractere
Esc ....... sai do modo de inser¸c~ao
j ........... desce uma linha
Esc ....... sai do modo de inser¸c~ao
q ........... para a grava¸c~ao da macro
Agora s´o ´e preciso posicionar o cursor na primeira letra de uma linha como esta
stdio.h
E executar a macro do registro ‘a’ quantas vezes for necess´ario, usando o co-
mando @a. Para executar quatro vezes, digite:
4@a
8.4 Repetindo substitui¸c˜oes 63
Este comando executa quatro vezes o conte´udo do registro ‘a’.
Caso tenha sido executada, a macro pode ser repetida com o comando
@@
8.4 Repetindo substitui¸c˜oes
Caso seja feito uma substitui¸c˜ao em um intervalo como abaixo
:5,32s/isto/aquilo/g
Pode-se repetir esta substitui¸c˜ao em qualquer linha que estiver apenas usando
este s´ımbolo

O Vim substituir´a na linha corrente ‘isto’ por ‘aquilo’. Podendo repetir a ´ultima
substitui¸c˜ao globalmente assim:
g
8.5 Repetindo comandos
@:
O atalho acima repete o ´ultimo comando no pr´oprio modo de comandos
8.6 Scripts Vim
Usando um script para modificar um nome em v´arios arquivos: Crie um arquivo
chamado subst.vim contendo os comandos de substitui¸c˜ao e o comando de
salvamento :wq.
%s/bgcolor=eeeeee/bgcolor=ffffff/g
wq
Para executar um script, digite o comando
:source nome_do_script.vim
O comando :source tamb´em pode ser abreviado com :so bem como ser usado
para testar um esquema de cor:
:so tema.vim
64 Repeti¸c˜ao de Comandos
8.7 Usando o comando bufdo
Com o comando :bufdo, pode-se executar um comando em um conjunto de
arquivos de forma r´apida. No exemplo a seguir, ser˜ao abertos todos os arquivos
HTML do diret´orio atual, ser´a efetuado uma substitui¸c˜ao e em seguida ser˜ao
todos salvos.
vim *.html
:bufdo %s/bgcolor=eeeeee/bgcolor=ffffff/ge | :wall
:qall
O comando :wall salva“write”todos“all”os arquivos abertos pelo comando vim
*.html. Opcionalmente vocˆe pode combinar “:wall” e “:qall” com o comando
:wqall, que salva todos os arquivos abertos e em seguida sai do Vim. A op¸c˜ao
‘e’ faz com que o vim n˜ao exiba mensagens de erro caso o buffer em quest˜ao n˜ao
contenha o padr˜ao a ser substitu´ıdo.
8.8 Colocando a ´ultima busca em um comando
Observa¸c˜ao: lembre-se Ctrl = ^
:^r/
8.9 Inserindo o nome do arquivo no comando
:^r%
8.10 Inserindo o ´ultimo comando
^r:
Se preceder com “:” vocˆe repete o comando, equivale a acessar o hist´orico de
comandos com as setas
:^r:
8.11 Inserindo a palavra sob o cursor em um
comando
O comando abaixo pode ser usado para pegar por exemplo, a palavra que est´a
atualmente sob o cursor, e coloca-la em um comando de busca.
^r^w
8.12 Para repetir exatamente a ´ultima inser¸c˜ao 65
8.12 Para repetir exatamente a ´ultima inser¸c˜ao
ic-a
Cap´ıtulo 9
Comandos Externos
O Vim permite executar comandos externos para processar ou filtrar o conte´udo
de um arquivo. De forma geral, fazemos isso digitando (no modo normal):
:!ls .... visualiza o conte´udo do diret´orio
Lembrando que anexando um simples ponto, a sa´ıda do comando torna-se o
documento que est´a sendo editado:
:.!ls .... imprime na tela o conte´udo do diret´orio
A seguir, veja alguns exemplos de utiliza¸c˜ao:
9.1 Ordenando
Podemos usar o comando sort que ordena o conte´udo de um arquivo dessa forma:
:5,15!sort ..... ordena da linha 5 at´e a linha 15
O comando acima ordena da linha 5 at´e a linha 15.
O comando sort existe tanto no Windows quanto nos sistemas Unix. Digitando
simplesmente sort, sem argumentos, o comportamento padr˜ao ´e de classificar na
ordem alfab´etica (baseando-se na linha inteira). Para mais informa¸c˜oes sobre
argumentos do comando sort, digite:
sort --help ou man sort (no Unix) ou
sort /? (no Windows).
9.2 Removendo linhas duplicadas 67
9.2 Removendo linhas duplicadas
:%!uniq
O caractere “%” representa a regi˜ao equivalente ao arquivo atual inteiro. A
vers˜ao do Vim 7 em diante tem um comando sort que permite remover linhas
duplicadas uniq e ordenar, sem a necessidade de usar comandos externos, para
mais detalhes:
:h sort
9.3 Ordenando e removendo linhas duplicadas
no Vim 7
:sort u
Quando a ordena¸c˜ao envolver n´umeros faz-se:
:sort n
9.4 Beautifiers
A maior parte das linguagens de programa¸c˜ao possui ferramentas externas cha-
madas beautifiers, que servem para embelezar o c´odigo, atrav´es da indenta¸c˜ao e
espa¸camento. Por exemplo, para embelezar um arquivo HTML ´e poss´ıvel usar
a ferramenta “tidy1
”, do W3C:
:%!tidy
9.5 Editando comandos longos no Linux
´E comum no ambiente GNU/Linux a necessidade de digitar comandos longos
no terminal, para facilitar esta tarefa pode-se seguir estes passos:
1. Definir o Vim como editor padr˜ao do sistema editando o arquivo ‘.bashrc2
’:
#configura o vim como editor padr~ao
export EDITOR=vim
export VISUAL=vim
2. No terminal usar a combina¸c˜ao de teclas ‘Ctrl-x-e’. Esta combina¸c˜ao
de teclas abre o editor padr˜ao do sistema onde se deve digitar o comando
longo, ao sair do editor o terminal executa o comando editado.
1http://tidy.sourceforge.net/
2Arquivo de configura¸c˜ao do bash
68 Comandos Externos
9.6 Compilando e verificando erros
:h cwindow quickfix-window
Se o seu projeto j´a possui um Makefile, ent˜ao vocˆe pode fazer uso do comando
:make para poder compilar seus programas no conforto de seu Vim:
:make
A vantagem de fazer isso ´e poder usar outra ferramenta bastante interessante,
a janela de quickfix:
:cw[indow]
O comando cwindow abrir´a uma janela em um split horizontal com a listagem
de erros e warnings. Vocˆe poder´a navegar pela lista usando os cursores e ir
diretamente para o arquivo e linha da ocorrˆencia.
Modificando o compilador, o comando make pode mudar sua a¸c˜ao.
:compiler javac
:compiler gcc
:compiler php
Note que php n˜ao tem um compilador. Logo, quando executado, o make ir´a
verificar por erros de sintaxes.
:compiler
O comando acima lista todos os compiladores suportados.
9.7 Grep
:h grep quickfix-window cw
Do mesmo jeito que vocˆe usa grep na sua linha de comando vocˆe pode usar o
grep interno do Vim. Exatamente do mesmo jeito:
:grep caminho padr~ao op¸c~oes
Use a janela de quickfix3
aqui tamb´em para exibir os resultados do grep e poder
ir diretamente a eles.
3:cope
9.8 Indent 69
9.8 Indent
Indent4
´e um programa que indenta seu c´odigo fonte de acordo com os padr˜oes
configurados no seu arquivo HOME/.indent.pro. Vou pressupor que vocˆe j´a
saiba usar o indent e como fazer as configura¸c˜oes necess´arias para ele funcionar,
ent˜ao vamos ao funcionamento dele no Vim:
Para indentar um bloco de c´odigo, primeiro selecione-o com o modo visual line
(com V), depois ´e s´o entrar com o comando como se fosse qualquer outro co-
mando externo:
:!indent
No caso, como foi selecionado um bloco de c´odigo, ir˜ao aparecer alguns carac-
teres extras, mas o procedimento continua o mesmo:
:’,’!indent
9.9 Calculadora Cient´ıfica com o Vim
Para usar a fun¸c˜ao de Calculadora Cient´ıfica no Vim usamos uma ferramenta
externa, que pode ser o comando ‘bc’ do GNU/Linux, ou uma linguagem de pro-
grama¸c˜ao como Python ou Ruby, veremos como habilitar a calculadora usando
o Python. Obviamente esta linguagem de programa¸c˜ao deve estar instalada no
sistema em que se deseja usar seus recursos. Deve-se testar se a vers˜ao do Vim
tem suporte ao Python “:version”, em seguida colocam-se os mapeamentos no
“.vimrc”.
:command! -nargs=+ Calc :py print args
:py from math import *
Feito isto pode-se usar o comando “:Calc” como visto abaixo:
:Calc pi
:Calc cos(30)
:Calc pow(5,3)
:Calc 10.0/3
:Calc sum(xrange(1,101))
:Calc [x**2 for x in range(10)]
9.10 Editando sa´ıdas do Shell
Muitas vezes, precisamos manipular sa´ıdas do shell antes de envi´a-las por e-mail,
reportar ao chefe ou at´e mesmo salv´a-las. Utilizando
4http://www.gnu.org/software/indent
70 Comandos Externos
vim -
ou
gvim -
a sa´ıda do Shell ´e redirecionada para o (G)Vim automaticamente, n˜ao sendo
necess´ario redirecion´a-la para um arquivo tempor´ario e, logo ap´os, abr´ı-lo para
edit´a-lo e modific´a-lo. Quem trabalha com sistemas de controle de vers˜ao como
svn pode visualizar as diferen¸cas entre o c´odigo que est´a sendo editado e o que
est´a no reposit´orio com sintaxe colorida desta forma:
svn diff | view -
Outra situa¸c˜ao em que se pode combinar o vim com saidas do shell ´e com o
comando ‘grep’. Usando-se a op¸c˜ao ‘-l’ do grep listamos apenas os arquivos
que correspondem a um padr˜ao.
grep -irl voyeg3r .
./src/img/.svn/entries
./src/Makefile
./src/vimbook.tex
Pode-se em seguida chamar o vim usando substitui¸c˜ao de comandos, como o
comando ‘!!’ corresponde ao ´ultimo comando, e neste caso a saida corresponde
a uma lista de arquivos que cont´em o padr˜ao a ser editado faz-se:
vim ${!!}
9.11 Log do Subversion
A vari´avel de ambiente $SVN EDITOR pode ser usada para se especificar o
caminho para o editor de texto de sua preferˆencia, a fim de us´a-lo na hora de
dar um commit usando o subversion.
export SVN_EDITOR=/usr/bin/vim
svn commit
Ser´a aberto uma sess˜ao no Vim, que depois de salva, ser´a usada para LOG do
commit.
9.12 Referˆencias
• http://www.dicas-l.com.br/dicas-l/20070119.php
• http://vim.wikia.com/wiki/Scientific_calculator
• http://docs.python.org/library/cmath.html
• http://docs.python.org/library/math.html
Cap´ıtulo 10
Verifica¸c˜ao Ortogr´afica
:h spell
O Vim possui um recurso nativo de verifica¸c˜ao ortogr´afica (spell) em tempo de
edi¸c˜ao, apontando palavras e express˜oes desconhecidas—usualmente erros de
grafia—enquanto o usu´ario as digita.
Basicamente, para cada palavra digitada o Vim procura por sua grafia em
um dicion´ario. N˜ao encontrando-a, a palavra ´e marcada como desconhecida
(sublinhando-a ou alterando sua cor), e fornece ao usu´ario mecanismos para
corrigi-la (atrav´es de sugest˜oes) ou cadastr´a-la no dicion´ario caso esteja de fato
grafada corretamente.
10.1 Habilitando a verifica¸c˜ao ortogr´afica
:h spell, spelllang
A verifica¸c˜ao ortogr´afica atua em uma linguagem (dicion´ario) por vez, portanto,
sua efetiva habilita¸c˜ao depende da especifica¸c˜ao desta linguagem. Por exemplo,
para habilitar no arquivo em edi¸c˜ao a verifica¸c˜ao ortogr´afica na l´ıngua portu-
guesa (pt), assumindo-se a existˆencia do dicion´ario em quest˜ao:
:setlocal spell spelllang=pt
ou de forma abreviada:
:setl spell spl=pt
Trocando-se setlocal (setl) por apenas set (se) faz com que o comando tenha
efeito global, isto ´e, todos os arquivos da sess˜ao corrente do Vim estariam sob
efeito da verifica¸c˜ao ortogr´afica e do mesmo dicion´ario (no caso o pt).
A desabilita¸c˜ao da verifica¸c˜ao d´a-se digitando:
72 Verifica¸c˜ao Ortogr´afica
:setlocal nospell
:set nospell (efeito global)
Caso queira-se apenas alterar o dicion´ario de verifica¸c˜ao ortogr´afica, suponha
para a l´ıngua inglesa (en), basta:
:setlocal spelllang=en
:set spelllang=en (efeito global)
10.1.1 Habilita¸c˜ao autom´atica na inicializa¸c˜ao
:h autocmd, Filetype, BufNewFile, BufRead
`As vezes torna-se cansativo a digita¸c˜ao expl´ıcita do comando de habilita¸c˜ao da
verifica¸c˜ao ortogr´afica sempre quando desejada. Seria conveniente se o Vim
habilitasse automaticamente a verifica¸c˜ao para aqueles tipos de arquivos que
comumente fazem uso da verifica¸c˜ao ortogr´afica, como por exemplo arquivos
“texto”. Isto ´e poss´ıvel editando-se o arquivo de configura¸c˜ao do Vim .vimrc
(veja Cap. 12) e incluindo as seguintes linhas:
autocmd Filetype text setl spell spl=pt
autocmd BufNewFile,BufRead *.txt setl spell spl=pt
Assim habilita-se automaticamente a verifica¸c˜ao ortogr´afica usando o dicion´a-
rio da l´ıngua portuguesa (pt) para arquivos do tipo texto e os terminados
com a extens˜ao .txt. Mais tecnicamente, diz-se ao Vim para executar o co-
mando setl spell spl=pt sempre quando o tipo do arquivo (Filetype) for
text (texto) ou quando um arquivo com extens˜ao .txt for carregado (BufRead)
ou criado (BufNewFile).
10.2 O dicion´ario de termos
A qualidade da verifica¸c˜ao ortogr´afica do Vim est´a diretamente ligada `a com-
pletude e corretude do dicion´ario da linguagem em quest˜ao. Dicion´arios pouco
completos s˜ao inconvenientes `a medida que acusam falso positivos em demasia;
pior, dicion´arios contendo palavras grafadas incorretamente, al´em de acusarem
falso positivos, induzem o usu´ario ao erro ao sugerirem grafias erradas.
´E razoavelmente comum o Vim j´a vir instalado com dicion´arios de relativa qua-
lidade para algumas linguagens (ao menos inglˆes, habitualmente). Entretanto,
ainda ´e raro para a maioria das instala¸c˜oes do Vim trazer por default um di-
cion´ario realmente completo e atualizado da l´ıngua portuguesa. A pr´oxima
se¸c˜ao sintetiza, pois, os passos para a instala¸c˜ao de um excelente—e dispon´ıvel
livremente—dicion´ario de palavras para a l´ıngua portuguesa.
10.2 O dicion´ario de termos 73
10.2.1 Dicion´ario portuguˆes segundo o acordo ortogr´afico
A equipe do projeto BrOffice.org e seus colaboradores mantˆem e disponibili-
zam livremente um grandioso dicion´ario de palavras da l´ıngua portuguesa. Al´em
do expressivo n´umero de termos, o dicion´ario contempla as mudan¸cas ortogr´a-
ficas definidas pelo Acordo Ortogr´afico [8] que entraram em vigor no in´ıcio de
2009.
A instala¸c˜ao envolve trˆes passos, s˜ao eles:
1. obten¸c˜ao do dicion´ario atrav´es do site BrOffice.org;
2. convers˜ao para o formato interno de dicion´ario do Vim; e
3. instala¸c˜ao dos arquivos resultantes.
Obten¸c˜ao do dicion´ario
O dicion´ario pode ser obtido no site do br.office.org [9]. O arquivo baixado
encontra-se compactado no formato Zip, bastando portanto descompact´a-lo com
qualquer utilit´ario compat´ıvel com este formato, por exemplo, o comando unzip.
Convers˜ao do dicion´ario
:h mkspell
Ap´os a descompacta¸c˜ao, os arquivos pt_BR.aff e pt_BR.dic, extra´ıdos no dire-
t´orio corrente1
, ser˜ao usados para a cria¸c˜ao dos dicion´arios no formato interno
do Vim2
. A convers˜ao propriamente dita ´e feita pelo pr´oprio Vim atrav´es do
comando mkspell:
1. Carrega-se o Vim a partir do diret´orio onde foram extra´ıdos pt_BR.aff e
pt_BR.dic
2. O comando mkspell ´e ent˜ao executado como:
:mkspell pt pt_BR
O Vim ent˜ao gera um arquivo de dicion´ario da forma pt.codifica¸c~ao.spl,
onde codifica¸c~ao ´e a codifica¸c˜ao de caracteres do sistema, normalmente
utf-8 ou latin1; caso queira-se um dicion´ario em uma codifica¸c˜ao diferente da
padr˜ao ser´a preciso ajustar a vari´avel encoding antes da invoca¸c˜ao do comando
mkspell:
:set encoding=codifica¸c~ao
:mkspell pt pt_BR
1Eventualmente, dependendo da vers˜ao do pacote de corre¸c˜ao ortogr´afica, os arquivos de
dicion´ario podem ser extra´ıdos no subdiret´orio dictionaries ou outro qualquer.
2O formato interno de dicion´ario do Vim assegura melhor desempenho, em termos de
agilidade e consumo de mem´oria, quando a verifica¸c˜ao ortogr´afica do editor encontra-se em
opera¸c˜ao.
74 Verifica¸c˜ao Ortogr´afica
Instala¸c˜ao do(s) dicion´ario(s) gerado(s)
:h runtimepath
Finalmente, o dicion´ario gerado—ou os dicion´arios, dependendo do uso ou n˜ao
de codifica¸c˜oes diferentes—deve ser copiado para o subdiret´orio spell/ dentro
de qualquer caminho (diret´orio) que o Vim “enxergue”. A lista de caminhos
lidos pelo Vim encontra-se na vari´avel runtimepath, que pode ser inspecionada
atrav´es de:
:set runtimepath
´E suficiente ent˜ao copiar o dicion´ario pt.codifica¸c~ao.spl para o subdiret´o-
rio spell/ em qualquer um dos caminhos listados atrav´es do comando mostrado.
10.3 Comandos relativos `a verifica¸c˜ao ortogr´a-
fica
10.3.1 Encontrando palavras desconhecidas
Muito embora o verificador ortogr´afico cheque imediatamente cada palavra digi-
tada, sinalizando-a ao usu´ario caso n˜ao a reconhe¸ca, `as vezes ´e mais apropriado
realizar a verifica¸c˜ao ortogr´afica do documento por inteiro. O Vim disp˜oe de
comandos espec´ıficos para busca e movimenta¸c˜ao em palavras grafadas incorre-
tamente (desconhecidas) no escopo do documento, dentre eles:
]s ..... vai para a pr´oxima palavra desconhecida
[s ..... como o ]s, mas procura no sentido oposto
Ambos os comandos aceitam um prefixo num´erico, que indica a quantidade
de movimenta¸c˜oes (buscas). Por exemplo, o comando 3]s vai para a terceira
palavra desconhecida a partir da posi¸c˜ao atual.
10.3.2 Tratamento de palavras desconhecidas
H´a basicamente duas opera¸c˜oes poss´ıveis no tratamento de uma palavra apon-
tada pelo verificador ortogr´afico do Vim como desconhecida:
1. corrigi-la – identificando o erro com ou sem o aux´ılio das sugest˜oes do
Vim.
2. cadastr´a-la no dicion´ario – ensinando o Vim a reconhecer sua grafia.
Assume-se nos comandos descritos nas se¸c˜oes a seguir que o cursor do editor
encontra-se sobre a palavra marcada como desconhecida.
10.3 Comandos relativos `a verifica¸c˜ao ortogr´afica 75
Corre¸c˜ao de palavras grafadas incorretamente
´E poss´ıvel que na maioria das vezes o usu´ario perceba qual foi o erro cometido na
grafia, de forma que o pr´oprio possa corrigi-la sem aux´ılio externo. No entanto,
algumas vezes o erro n˜ao ´e evidente, e sugest˜oes fornecidas pelo Vim podem
ser bastante convenientes. Para listar as sugest˜oes para a palavra em quest˜ao
executa-se:
z= ..... solicita sugest~oes ao verificador ortogr´afico
Se alguma das sugest˜oes ´e v´alida – as mais prov´aveis est˜ao nas primeiras posi¸c˜oes
– ent˜ao basta digitar seu prefixo num´erico e pressionar Enter. Se nenhuma
sugest˜ao for adequada, basta simplesmente pressionar Enter e ignorar a cor-
re¸c˜ao.
Cadastramento de novas palavras no dicion´ario
Por mais completo que um dicion´ario seja, eventualmente palavras, especial-
mente as de menor abrangˆencia, ter˜ao que ser cadastradas a fim de aprimorar
a exatid˜ao da verifica¸c˜ao ortogr´afica. A manuten¸c˜ao do dicion´ario d´a-se pelo
cadastramento e retirada de palavras:
zg ..... adiciona a palavra no dicion´ario
zw ..... retira a palavra no dicion´ario, marcando-a como
‘desconhecida’
Cap´ıtulo 11
Salvando Sess˜oes de
Trabalho
Suponha a situa¸c˜ao em que um usu´ario est´a trabalhando em um projeto no qual
v´arios arquivos s˜ao editados simultaneamente; quatro arquivos est˜ao abertos,
algumas macros foram criadas e vari´aveis que n˜ao constam no vimrc foram de-
finidas. Em uma situa¸c˜ao normal, se o Vim for fechado a quase totalidade dessas
informa¸c˜oes se perde1
; para evitar isto uma sess˜ao pode ser criada, gerando-se
um “retrato do estado atual”, e ent˜ao restaurada futuramente pelo usu´ario—na
pr´atica ´e como se o usu´ario n˜ao tivesse sa´ıdo do editor.
Uma sess˜ao do Vim guarda, portanto, uma s´erie de informa¸c˜oes sobre a edi¸c˜ao
corrente, de modo a permitir que o usu´ario possa restaur´a-la quando desejar.
Sess˜oes s˜ao bastante ´uteis, por exemplo, para se alternar entre diferentes proje-
tos, carregando-se rapidamente os arquivos e defini¸c˜oes relativas a cada projeto.
11.1 O que uma sess˜ao armazena?
Uma sess˜ao ´e composta das seguintes informa¸c˜oes:
• Mapeamentos globais
• Vari´aveis globais
• Arquivos abertos incluindo a lista de buffers
• Diret´orio corrente (:h curdir)
• Posi¸c˜ao e tamanho das janelas (o layout)
1Algumas informa¸c˜oes, no entanto, s˜ao automaticamente armazenadas no arquivo viminfo;
veja :h viminfo
11.2 Criando sess˜oes 77
11.2 Criando sess˜oes
Sess˜oes s˜ao criadas atrav´es do comando :mksession:
:mks[ession] sessao.vim .... cria a sess~ao e armazena-a em sessao.vim
:mks[ession]! sessao.vim ... salva a sess~ao e sobrescreve-a em sessao.vim
11.3 Restaurando sess˜oes
Ap´os gravar sess˜oes, elas podem ser carregadas ao iniciar o Vim:
vim -S sessao.vim
ou ent˜ao de dentro do pr´oprio Vim (no modo de comando):
:so sessao.vim
Ap´os restaurar a sess˜ao, o nome da sess˜ao corrente ´e acess´ıvel atrav´es de uma
vari´avel interna “v:this_session”; caso queira-se exibir na linha de comando
o nome da sess˜ao ativa (incluindo o caminho), faz-se:
:echo v:this_session
Podemos fazer mapeamentos para atualizar a sess˜ao atual e exibir detalhes da
mesma:
mapeamento para gravar sess~ao
nmap F4 :waBarexe mksession!  . v:this_sessionCR:so ~/sessions/
mapeamento para exibir a sess~ao ativa
map s-F4 esc:echo v:this_sessioncr
11.4 Viminfo
Se o Vim for fechado e iniciado novamente, normalmente perder´a uma por¸c˜ao
consider´avel de informa¸c˜oes. A diretiva viminfo pode ser usada para memorizar
estas informa¸c˜oes.
• Hist´orico da linha de comando
• Hist´orico de buscas
• Hist´orico de entradas input-line history
• Conte´udo de registros n˜ao vazios
• Marcas de v´arios arquivos
78 Salvando Sess˜oes de Trabalho
• ´Ultimo padr˜ao de busca/substitui¸c˜ao
• A lista de buffers
• Vari´aveis globais
Deve-se colocar no arquivo de configura¸c˜ao algo como:
set viminfo=%,’50,100,/100,:100,n
Algumas op˜oes da diretiva viminfo:
! Quando inclu´ıdo salva e restaura vari´aveis globais (vari´aveis com letra mai´us-
cula) e que n˜ao cont´em letras em min´usculo como MANTENHAISTO.
” N´umero m´aximo de linhas salvas para cada registro.
% Quando inclu´ıdo salva e restaura a lista de buffers. Caso o Vim seja iniciado
com um nome como argumento, a lista de buffers n˜ao ´e restaurada. Buffers
sem nome e buffers de ajuda n˜ao s˜ao armazenados no viminfo.
’ N´umero m´aximo de arquivos rec´em editados.
/ M´aximo de itens do hist´orico de buscas.
: M´aximo de itens do hist´orico da linha de comando
 N´umero m´aximo de linhas salvas por cada registro, se zero os registros n˜ao
ser˜ao salvos. Quando n˜ao inclu´ıdo, todas as linhas s˜ao salvas.
Para ver mais op¸c˜oes sobre o arquivo ‘viminfo’ leia ‘:h viminfo’. Pode-se tam-
b´em usar um arquivo de “Sess˜ao”. A diferen¸ca ´e que ‘viminfo’ n˜ao depende do
local de trabalho (escopo). Quando o arquivo ‘viminfo’ existe e n˜ao est´a vazio,
as informa¸c˜oes novas s˜ao combinadas com as existentes. A op¸c˜ao ‘viminfo’ ´e
uma string contendo informa¸c˜oes sobre o que deve ser armazenado, e cont´em
limites de o quanto vai ser armazenado para cada item.
Cap´ıtulo 12
Como Editar Preferˆencias
no Vim
O arquivo de preferˆencias do Vim ´e nomeado vimrc, um arquivo oculto que
normalmente encontra-se no diret´orio de trabalho (home) do usu´ario:
~/.vimrc
/home/usuario/.vimrc
No sistema operacional Windows o arquivo costuma ser:
~_vimrc
c:documents and settingsusuario_vimrc
12.1 Onde colocar plugins e temas de cor
No Windows deve haver uma pasta chamada ‘vimfiles’ (caso n˜ao exista deve-se
cri´a-la), que fica em:
c:documents and settingsusuariovimfiles
No GNU/Linux a pasta de arquivos do Vim ´e chamada .vim, comumente ar-
mazenada em
/home/user/.vim
Tanto em .vim como vimfiles encontram-se usualmente as seguintes pastas:
vimfiles ou .vim
|
+--color
80 Como Editar Preferˆencias no Vim
|
+--doc
|
+--syntax
|
+--plugin
Os plugins, como se pode deduzir, devem ser colocados no diret´orio denominado
plugin.  Na se¸c˜ao Plugins 15 (p. 106) est˜ao descritos alguns plugins para o
Vim.
12.2 Coment´arios
Coment´arios s˜ao linhas que s˜ao ignoradas pelo interpretador Vim e servem nor-
malmente para descri¸c˜ao de comandos e a¸c˜oes, deixando portanto mais leg´ıvel e
did´atico o arquivo de configura¸c˜ao. Uma linha ´e um coment´ario se seu primeiro
caractere ´e uma aspa ‘’:
 linhas come¸cadas com aspas s~ao coment´arios
 e portanto ser~ao ignoradas pelo Vim
Recomenda-se usar coment´arios ao adicionar ou modificar comandos no arquivo
vimrc, pois assim torna-se mais f´acil futuras leituras e modifica¸c˜oes neste ar-
quivo.
12.3 Efetiva¸c˜ao das altera¸c˜oes no vimrc
As altera¸c˜oes no vimrc s´o ser˜ao efetivadas na pr´oxima vez que o Vim for aberto,
a n˜ao ser que o recarregamento do arquivo de configura¸c˜ao seja instru´ıdo expli-
citamente:
:source ~/vimrc ....... se estiver no GNU/Linux
:source ~/_vimrc ...... caso use o Windows
:so arquivo ........... ‘so’ ´e uma abrevia¸c~ao de ‘source’
12.4 Set
Os comandos set, respons´aveis por atribuir valores `a vari´aveis, podem ser co-
locados no .vimrc:
set nu
ou digitados como comandos:
:set nu
12.4 Set 81
set number ............... mostra numera¸c~ao de linhas
set nu ................... simplifica¸c~ao de ‘number’
set showmode ............. mostra o modo em que estamos
set showcmd .............. mostra no status os comandos inseridos
set tabstop=4 ............ tamanho das tabula¸c~oes
set ts=4 ................. simplifica¸c~ao de ‘tabstop’
set shiftwidth=4 ......... quantidade de espa¸cos de uma
tabula¸c~ao
set sw=4 ................. simplifica¸c~ao de ‘shiftwidth’
syntax on ................ habilita cores
syn on ................... simplifica¸c~ao de ‘syntax’
colorscheme tema ......... esquema de cores ‘syntax highlight’
autochdir ................ configura o diret´orio de trabalho
set hls .................. destaca com cores os termos procurados
set incsearch ............ habilita a busca incremental
set ai ................... auto identa¸c~ao
set aw ................... salva automaticamente ao trocar de
‘buffer’
set ignorecase ........... ignora mai´usculas e min´usculas nas
buscas
set ic ................... simplifica¸c~ao de ignorecase
set smartcase ............ numa busca em mai´usculo habilita
‘case’
set scs .................. sin^onimo de ‘smartcase’
set backup ............... habilita a cria¸c~ao de arquivos de
backup
set bk ................... simplifica¸c~ao de ‘backup’
set backupext=.backup .... especifica a extens~ao do arquivo de
backup
set bex=.backup .......... simplifica¸c~ao de backupext
set backupdir=~/.backup,./ diret´orio(s) para arquivos de backup
set bdir ................. simplifica¸c~ao de ‘backupdir’
set nobackup ............. evita a cria¸c~ao de arquivos de backup
ste nobk ................. simplifica¸c~ao de ‘nobackup’
set cursorline ........... abrevia¸c~ao de cursor line (destaca
linha atual)
set cul .................. simplifica¸c~ao de ‘cursorline’
set ttyfast .............. melhora o redraw de janelas.
set columns=88 ........... deixa a janela com 88 colunas.
set mousemodel=popup ..... exibe o conte´udo de folders e
sugest~oes spell
set viminfo=%,’50,100,/100,:100,n armazena op¸c~oes (buffers)
 Se ao iniciar o vim obtivermos mensagens de erros e houver d´uvida se o erro
´e no vim ou em sua configura¸c˜ao, pode-se inicia-lo sem que o mesmo carregue
o arquivo ‘.vimrc’.
:vim -u NONE
82 Como Editar Preferˆencias no Vim
12.5 Ajustando par´agrafos em modo normal
O comando ‘gqap’ ajusta o par´agrafo atual em modo normal.  usando a
op¸c˜ao ‘:set nojoinspaces’ o vim colocar´a dois espa¸cos ap´os o ponto final ao
se ajustar os par´agrafos.
geralmente usamos ‘^I’ para representar uma tabula¸c˜ao Tab, e ‘$’ para in-
dicar o fim de linha. Mas ´e poss´ıvel customizar essas op¸c˜oes. 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 ´e mostrado pelo primeiro caracter {char1} e
seguido por {char2}
- trail:{char}
Esse caracter representa os espa¸cos em branco.
- extends:{char}
Esse caracter representa o in´ıcio do fim da linha
sem quebr´a-la
Est´a op¸c~ao funciona com a op¸c~ao 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 op¸c~ao desabilita a quebra de linha
set listchars=extends:+
Caso esteja usando o gvim pode setar um esquema de cores
set colo desert
12.6 Exibindo caracteres invis´ıveis
:set list
12.7 Definindo registros previamente 83
12.7 Definindo registros previamente
Definindo uma macro de nome s para ordenar e retirar linhas duplicadas
let @s=:sort u
Para executar o registro s definido acima fa¸ca:
@s
O Vim colocar´a no comando
:sort -u
Bastando pressionar Enter. Observa¸c˜ao: Este registro pr´evio pode ficar no
vimrc ou ser digitado em comando “:”
:5,20sort u
da linha 5 at´e a linha 20 ordene e retire duplicados
:sort n
 ordene meu documento considerando n´umeros
 isto ´e ´util pois se a primeira coluna contiver
 n´umeros a ordena¸c~ao pode ficar errada caso n~ao usemos
 o par^ametro ‘‘n’’
12.8 Mapeamentos
:h key-mapping, mapping, index
Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende
da criatividade do usu´ario e do quanto conhece o Vim, com eles podemos con-
trolar a¸c˜oes com quaisquer teclas, mas antes temos que saber que para criar
mapeamentos, precisamos conhecer a maneira de representar as teclas e combi-
na¸c˜oes. Alguns exemplos:
tecla ....... tecla mapeada
c-x ....... Ctrl-x
left ...... seta para a esquerda
right ..... seta para a direita
c-m-a ..... Ctrl-Alt-a
cr ........ Enter
Esc ....... Escape
leader .... normalmente 
bar ....... | pipe
cword ..... palavra sob o cursor
84 Como Editar Preferˆencias no Vim
cfile ..... arquivo sob o cursor
cfile ..... arquivo sob o cursor sem extens~ao
sfile ..... conte´udo do arquivo sob o cursor
left ...... salta um caractere para esquerda
up ........ equivale clicar em ‘seta acima’
m-f4 ...... a tecla alt - m mais a tecla f4
c-f ....... Ctrl-f
bs ........ backspace
space ..... espa¸co
tab ....... tab
No Vim podemos mapear uma tecla para o modo normal, realizando determi-
nada opera¸c˜ao e a mesma tecla pode desempenhar outra fun¸c˜ao qualquer em
modo de inser¸c˜ao 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 ´unica diferen¸ca nos mapeamentos acima ´e que o mapeamento para modo de
inser¸c˜ao come¸ca com ‘i’, assim como para o modo “comando” ‘:’ come¸ca com
‘c’ no caso ‘cmap’.  O comando ‘:echo’ pode ser abreviado assim: ‘:ec’.
12.8.1 Recarregando o arquivo de configura¸c˜ao
Cada altera¸c˜ao no arquivo de configura¸c˜ao do Vim s´o ter´a efeito na pr´oxima vez
que vocˆe abrir o Vim a menos que vocˆe 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/_vimrcCR
nmap F12 :C-usource ~/_vimrc BAR echo Vimrc recarregado!CR
else
map ,v :e $HOME/.vimrcCR
nmap F12 :C-usource ~/.vimrc BAR echo Vimrc recarregado!CR
endif
Agora basta pressionar “F12” em modo normal e as altera¸c˜oes passam a valer
instantaneamente, e para chamar o ‘vimrc’ basta usar.
,v
Os mapeamentos abaixo s˜ao ´uteis para quem escreve c´odigos HTML, permi-
tem inserir caracteres reservados do HTML usando uma barra invertida para
proteger os mesmos, o Vim substituir´a os “barra alguma coisa” pelo caractere
correspondente.
12.8 Mapeamentos 85
inoremap amp; amp;amp;
inoremap lt; amp;lt;
inoremap gt; amp;gt;
inoremap . amp;middot;
O termo inoremap significa: em modo de inser¸c˜ao n˜ao remapear, ou seja ele
mapeia o atalho e n˜ao permite que o mesmo seja remapeado, e o mapeamento
s´o funciona em modo de inser¸c˜ao, isso significa que um atalho pode ser mapeado
para diferentes modos de opera¸c˜ao.
Veja este outro mapeamento:
map F11 Esc:set nu!cr
Permite habilitar ou desabilitar n´umeros de linha do arquivo corrente. A excla-
ma¸c˜ao ao final torna o comando booleano, ou seja, se a numera¸c˜ao estiver ativa
ser´a desabilitada, caso contr´ario ser´a ativada. O “cr” ao final representa um
Enter.
12.8.2 Limpando o “registro” de buscas
A cada busca, se a op¸c˜ao ‘hls’1
estiver habilitada o Vim faz um destaque co-
lorido, para desabilitar esta op¸c˜ao pode-se criar um mapeamento qualquer, no
caso abaixo usando a combina¸c˜ao de teclas “S-F11”.
nno S-F11 Esc:let @/=CR
´E um mapeamento para o modo normal que faz com que a combina¸c˜ao de teclas
Shift-F11 limpe o “registro” de buscas
12.8.3 Destacar palavra sob o cursor
nmap s-f :let @/=CR
O atalho acima ‘s-f’ corresponde a ‘Shift-f’.
12.8.4 Contar ocorrˆencias de uma palavra
 contagem de ocorr^encias de uma palavra (case insensitive)
 busca somente ocorr^encias exatas
nmap F4 escmz:%s/c(c-r=expand(cword)cr)//gncr‘z
 busca parcial, ou seja acha palavra como parte de outra
nmap s-F4 escmz:%s/c(c-r=expand(cword)cr)//gncr‘z
1hls ´e uma abrevia¸c˜ao de hightlight search
86 Como Editar Preferˆencias no Vim
12.8.5 Remover linhas em branco duplicadas
map ,d Esc:%s/(^n{2,})/r/gcr
No mapeamento acima estamos associando o atalho:
,d
. . . `a a¸c˜ao desejada, fazer com que linhas em branco sucessivas sejam substitu´ı-
das por uma s´o linha em branco, vejamos como funciona:
map ......... mapear
,d .......... atalho que quermos
Esc ....... se estive em modo de inser¸c~ao sai
: ........... em modo de comando
% ........... em todo o arquivo
s ........... substitua
n .......... quebra de linha
{2,} ........ duas ou mais vezes
r .......... trocado por r Enter
g ........... globalmente
cr ........ confirma¸c~ao do comando
As barras invertidas podem n˜ao ser usadas se o seu Vim estiver com a op¸c˜ao
magic habilitada
:set magic
Por acaso este ´e um padr˜ao portanto tente usar assim pra ver se funciona
map ,d :%s/n{2,}/r/gcr
12.8.6 Mapeamento para Calcular Express˜oes
Os mapeamentos abaixo exibem o resultado das quatro opera¸c˜oes b´asicas (soma,
subtra¸c˜ao, multiplica¸c˜ao e divis˜ao). O primeiro para o modo normal no qual
posiciona-se o cursor no primeiro caractere da express˜ao tipo“5*9”e em seguida
pressiona-se “Shift-F1”, o segundo para o modo insert em que, ap´os digitada a
express˜ao pressiona-se o mesmo atalho.
 calculadora
map s-f1 esc0myEA=c-r=c-rmenteresc
imap s-f1 spaceescmyBEa=c-r=c-rmenterdel
Para efetuar c´alculos com maior precis˜ao e tamb´em resolver problemas como
potˆencias ra´ızes, logaritmos pode-se mapear comandos externos, como a biblio-
teca matem´atica da linguagem de programa¸c˜ao Python. Neste link [10] h´a um
manual que ensina a realizar este procedimento, ou acesse o cap´ıtulo 2.16 na
p´agina 17.
12.9 Autocomandos 87
12.8.7 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 Inser¸c~ao
Mover linhas com Ctrl-↓ ou Ctrl-↑:
 tem que estar em modo normal!
nmap C-Down ddp
nmap C-Up ddkP
Salvando com uma tecla de fun¸c˜ao:
 salva com F9
nmap F9 :wcr
 F10 - sai do Vim
nmap F10 Esc:qcr
12.8.8 Convertendo as iniciais de um documento para mai´us-
culas
 MinusculasMaiusculas: converte a primeira letra de cada
 frase para MAI´USCULAS
nmap ,mm :%s/C([.!?][])’]*($|[ ])_s*)(l)/1U3/gCR
 Caso queira confirma¸c~ao coloque uma letra ‘‘c’’ no final da
 linha acima:
 (...) 3/gcCR
12.9 Autocomandos
:h autocmd.txt
Autocomandos habilitam comandos autom´aticos para situa¸c˜oes espec´ıficas. Para
executar determinada a¸c˜ao ao iniciar um novo arquivo o autocomando dever´a
obedecer este padr˜ao:
au BufNewFile tipo a¸c~ao
Veja um exemplo:
au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim
88 Como Editar Preferˆencias no Vim
No exemplo acima o Vim aplica autocomandos para arquivos novos“BufNewfile”
ou existentes “BufRead” terminados em txt, e para estes tipos carrega um ar-
quivo de syntax, ou seja, um esquema de cores espec´ıfico.
 http://aurelio.net/doc/vim/txt.vim coloque em ~/.vim/syntax
au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim
Para arquivos do tipo texto ‘*.txt’ use um arquivo de syntax em particular.
O autocomando abaixo coloca um cabe¸calho para scripts bash caso a linha 1
esteja vazia, observe que os arquivos em quest˜ao tem que ter a extens˜ao ‘.sh’.
au BufNewFile,BufRead *.sh if getline(1) ==  | normal ,sh
 Para configurar o vim de modo que o diret´orio corrente fique no path coloque
este c´odigo no ‘vimrc’.
fonte: wikia - wiki sobre o vim
if exists(’+autochdir’)
set autochdir
else
autocmd BufEnter * silent! lcd %:p:h:gs/ / /
endif
12.9.1 Exemplos pr´aticos de autocomandos
:h expandtab, retab
Detectando indenta¸c˜ao fora do padr˜ao
H´a situa¸c˜oes em que ´e necess´aria a uniformiza¸c˜ao de a¸c˜oes, por exemplo, em
c´odigos Python deve-se manter um padr˜ao para a indenta¸c˜ao, ou ser´a com es-
pa¸cos ou ser´a com tabula¸c˜oes, n˜ao se pode misturar os dois pois o interpretador
retornaria um erro. Outra situa¸c˜ao em que misturar espa¸cos com tabula¸c˜oes
ocasiona erros ´e em c´odigos LATEX, ao compilar o documento a formata¸c˜ao n˜ao
sai como desejado. At´e que se perceba o erro leva um tempo. Para configurar
o vim de forma que ele detecte este tipo de erro ao entrar no arquivo:
au! VimEnter * match ErrorMsg /^t+/
 explica¸c~ao para o autocomando acima
au! ............... automaticamente
VimEnter .......... ao entrar no vim
* ................. para qualquer tipo de arquivo
match ErrorMsg .... destaque como erro
/ ................. inicio de um padr~ao
^ ................. come¸co de linha
t ................ tabula¸c~ao
+ ................ uma vez ou mais
/ ................. fim do padr~ao de buscas
12.10 Fun¸c˜oes 89
Para evitar que este erro se repita, ou seja, que sejam adicionados no come¸co
de linha espa¸cos no lugar de tabula¸c˜oes adiciona-se ao ˜/.vimrc
set expandtab
´E perfeitamente poss´ıvel um autocomando que fa¸ca direto a substitui¸c˜ao de
tabula¸c˜oes por espa¸cos, mas neste caso n˜ao ´e recomendado que o autocomando
se aplique a todos os tipos de aquivos.
Inserindo automaticamente modelos de documento
Pode-se criar um autocomando para inserir um modelo de documento ‘html’
por exemplo de forma autom´atica, ou seja, se vocˆe criar um novo documento do
tipo ‘html’ o vim colocar´a em seu conte´udo um modelo pre-definido.
au BufNewFile *.html 0r ~/.vim/skel/skel.html
12.10 Fun¸c˜oes
12.10.1 Fechamento autom´atico de parˆenteses
 --------------------------------------
 Ativa fechamento autom´atico para par^entese
 Set automatic expansion of parenthesis/brackets
inoremap ( ()Esc:call BC_AddChar(‘‘)’’)cri
inoremap { {}Esc:call BC_AddChar(‘‘}’’)cri
inoremap [ []Esc:call BC_AddChar(‘‘]’’)cri
‘‘ ’’ ‘‘’’Esc:call BC_AddChar(‘‘’’)cri

 mapeia Ctrl-j para pular fora de par^enteses colchetes etc...
inoremap C-j Esc:call search(BC_GetChar(), ‘‘W’’)cra
 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 op¸c~ao para fechamento de par^enteses’’’
90 Como Editar Preferˆencias no Vim
 Fechamento autom´atico de par^enteses
imap { {}left
imap ( ()left
imap [ []left
 pular fora dos par^enteses, colchetes e chaves, mover o cursor
 no modo de inser¸c~ao
imap c-l Escrighta
imap c-h Esclefta
12.10.2 Fun¸c˜ao 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 c´odigo n˜ao funcione acesse este link [11].
12.10.3 Rolar outra janela
Se vocˆe dividir janelas tipo
Ctrl-w n
pode colocar esta fun¸c˜ao 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 fun¸c˜ao ´e acionada com o atalho Alt-↑ e Alt-↓.
12.10.4 Fun¸c˜ao para numerar linhas
No site wikia h´a um c´odigo de fun¸c˜ao para numerar linhas [12]
12.10 Fun¸c˜oes 91
12.10.5 Fun¸c˜ao para trocar o esquema de cores
function! SIDSwitchColorSchemes()
if exists(‘‘e’’)
if g:colors_name == ’native’
colorscheme billw
elseif g:colors_name == ’billw’
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 SIDSwitchColorSchemes()CR
baixe os esquemas neste link [13].
12.10.6 Uma fun¸c˜ao para inserir cabe¸calho de script
para chamar a fun¸c˜ao basta pressionar ‘,sh’ em modo normal
 Cria um cabe¸calho 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 modifica¸c~ao:‘‘(’’%a %d/%b/%Y hs %H:%M))
call append(3, # NOME DA SUA EMPRESA)
call append(3, # Prop´osito do script)
normal($)
endfun
map ,sh :call InsertHeadBash()cr
12.10.7 Fun¸c˜ao para inserir cabe¸calhos Python
 fun¸c~ao para inserir cabe¸calhos Python
92 Como Editar Preferˆencias no Vim
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+)
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()crA
 Ao editar um arquivo ser´a aberto no ´ultimo ponto em
 que foi editado
autocmd BufReadPost *
 if line(’‘‘’’‘‘(’’’‘‘’’) = line(‘‘$’’) |
 exe ’’normal g‘‘‘ |
 endif
 Permite recarregar o Vim para que modifica¸c~oes no
 Pr´oprio vimrc seja ativadas com o mesmo sendo editado
nmap F12 :C-usource $HOME/.vimrc BAR echo Vimrc recarregado!CR
Redimensionar janelas
 Redimensionar a janela com
 Alt-seta `a direita e esquerda
map M-right Esc:resize +2 CR
map M-left Esc:resize -2 CR
12.10.8 Fun¸c˜ao para pular para uma linha
ir para linha
 ir para uma linha espec´ıfica
function! GoToLine()
let ln = inputdialog(ir para a linha...)
exe ‘‘:’’ . ln
endfunction
no meu caso o mapeamento ´e com Ctrl-l
use o que melhor lhe convier
imap S-l C-o:call GoToLine()CR
nmap S-l :call GoToLine()CR
12.11 Como adicionar o Python ao path do Vim? 93
12.10.9 Fun¸c˜ao para gerar backup
A fun¸c˜ao abaixo ´e ´util para ser usada quando vocˆe vai editar um arquivo gerando
modifica¸c˜oes significativas, assim vocˆe poder´a restaurar o backup se necess´ario
 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 Leaderba :call WriteBackup()CR
 O atalho “leader” em geral ´e a barra invertida “”, na d´uvida “:help
leader”.
12.11 Como adicionar o Python ao path do Vim?
Coloque o seguinte script [14] em:
* ~/.vim/after/ftplugin/python.vim (on Unix systems)
%* $HOME/vimfiles/after/ftplugin/python.vim (on Windows systems)
python  EOF
import os
import sys
import vim
for p in sys.path:
# Add each directory in sys.path, if it exists.
if os.path.isdir(p):
# Command ‘set’ needs backslash before each space.
vim.command(r‘‘s’’ % (p.replace(‘‘ ’’, r‘‘ ’’)))
EOF
Isto lhe permite usar ‘gf’ ou Ctrl-w Ctrl-F para abrir um arquivo sob o cursor
12.12 Criando um menu
Como no Vim podemos ter infinitos comandos fica complicado memorizar tudo
´e a´ı que entram os menus, podemos colocar nossos plugins e atalhos favoritos
em um menu veja este exemplo
amenu Ferramentas.ExibirNomeDoTema :echo g:colors_namecr
O comando acima diz:
94 Como Editar Preferˆencias no Vim
amenu ........................ cria um menu
Ferramentas.ExibirNomeDoTema . Menu plugin submenu ExibirNomeDoTema
:echo g:colors_namecr ...... exibe o nome do tema atual
Caso haja espa¸cos no nome a definir vocˆe pode fazer assim
amenu Ferramentas.Exibir nome do tema :echo g:colors_namecr
12.13 Criando menus para um modo espec´ıfico
:menu .... Normal, Visual e Operator-pending
:nmenu ... Modo Normal
:vmenu ... Modo Visual
:omenu ... Operator-pending modo
:menu! ... Insert e Comando
:imenu ... Modo de inser¸c~ao
:cmenu ... Modo de comando
:amenu ... Todos os modos
12.14 Exemplo de menu
 cores
menu Temas.cores.quagmire :colo quagmireCR
menu Temas.cores.inkpot :colo inkpotCR
menu Temas.cores.google :colo googleCR
menu Temas.cores.ir_black :colo ir_blackCR
menu Temas.cores.molokai :colo molokaiCR
 Fontes
menu Temas.fonte.Inconsolata :set gfn=Inconsolata:h10CR
menu Temas.fonte.Anonymous :set anti gfn=Anonymous:h8CR
menu Temas.fonte.Envy Code :set anti gfn=Envy_Code_R:h10CR
menu Temas.fonte.Monaco :set gfn=monaco:h9CR
menu Temas.fonte.Crisp :set anti gfn=Crisp:h12CR
menu Temas.fonte.Liberation Mono :set gfn=Liberation Mono:h10CR
 O comando “:update” Atualiza o menu rec´em modificado. Quando o co-
mando “:amenu” ´E usado sem nenhum argumento o Vim mostra os menus de-
finidos atualmente. Para listar todas as op¸c˜oes de menu para ‘Plugin’ por
exemplo digita-se no modo de comandos “:amenu Plugin”.
Ocultando as barras de ferramentas e menu
:set guioptions-=m ........ oculta menus
:set guioptions-=T ........ oculta icones
obs: para exibir novamente repita o comando
substituindo o sinal de menos por mais.
12.15 Outros mapeamentos 95
12.15 Outros mapeamentos
Destaca espa¸cos e tabula¸c˜oes redundantes:
highlight RedundantWhitespace ctermbg=red guibg=red
match RedundantWhitespace /s+$| +zet/
Explicando com detalhes
s ..... espa¸co
+ ..... uma ou mais vezes
$ ...... no final da linha
| ..... ou
‘‘ ’’ .. espa¸co (veja imagem acima)
+ ..... uma ou mais vezes
ze .... at´e o fim
t ..... tabula¸c~ao
Portanto a express˜ao regular acima localizar´a espa¸cos ou tabula¸c˜oes no final de
linha e destacar´a em vermelho.
Remove espa¸cos redundantes no fim das linhas
map F7 Escmz:%s/s+$//gcr‘z
Um detalhe importante
mz ... marca a posi¸c~ao atual do cursor para retornar no final do comando
‘z ... retorna `a marca criada
Se n˜ao fosse feito isto o cursor iria ficar na linha da ´ultima substitui¸c˜ao!
Abre o vim explorer
map F6 Esc:vne .crbar:vertical resize -30crbar:set nonucr
Podemos usar“Express˜oes Regulares2
”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 aCREsc
 join lines -- Junta as linhas com Shift-F2
nmap S-F2 ADelSpace
Para mais detalhes sobre buscas acesse o cap´ıtulo “6 na p´agina 42”.
2http://guia-er.sourceforge.net
96 Como Editar Preferˆencias no Vim
12.16 Complementa¸c˜ao com “tab”
Word completion
Complementa¸c~ao de palavras
set dictionary+=/usr/dict/words
set complete=.,w,k
------ complementa¸c~ao de palavras ----
usa o tab em modo de inser¸c~ao para completar palavras
function! InsertTabWrapper(direction)
let col = col(‘‘.’’) - 1
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
12.17 Abrevia¸c˜oes
Abrevia¸c˜oes habilitam auto-texto para o Vim. O seu funcionamento consiste de
trˆes campos, o primeiro ´e o modo no qual a abrevia¸c˜ao funcionar´a, o segundo
´e a palavra que ir´a disparar a abrevia¸c˜ao e o terceiro campo ´e a abrevia¸c˜ao
propriamente dita. Para que em modo de comando ‘:’ a palavra ‘salvar’ funcione
para salvar os arquivos, adiciona-se a seguinte abrevia¸c˜ao ao ‘~/.vimrc’.
cab salvar wcr
cr corresponde ao Enter
Abaixo abrevia¸c˜oes para o modo de inser¸c˜ao:
iab slas S´ergio Luiz Ara´ujo Silva
iab Linux GNU/Linux
iab linux GNU/Linux
12.18 Evitando arquivos de backup no disco
Nota-se em algumas situa¸c˜oes que existem alguns arquivos com o mesmo nome
dos arquivos que foram editados, por´em com um til (˜) no final. Esses arquivos
12.19 Mantendo apenas um Gvim aberto 97
s˜ao backups que o Vim gera antes de sobrescrever os arquivos, e podem desde
ocupar espa¸co significativo no disco r´ıgido at´e representar falha de seguran¸ca,
como por exemplo arquivos .php~ que n˜ao s˜ao interpretados pelo servidor web
e exp˜oem o c´odigo-fonte.
Para que os backups sejam feitos enquanto os arquivos estejam sendo escritos,
por´em n˜ao mantidos ap´os terminar a escrita, utiliza-se no .vimrc:
set nobackup
set writebackup
Fonte: Site do Eust´aquio Rangel [15].
12.19 Mantendo apenas um Gvim aberto
Essa dica destina-se apenas `a vers˜ao do Vim que roda no ambiente gr´afico,
ou seja, o Gvim, pois ela faz uso de alguns recursos que s´o funcionam nesse
ambiente. A meta ´e criar um comando que vai abrir os arquivos indicados em
abas novas sempre na janela j´a existente.
Para isso deve-se definir um script que esteja no seu path3
do sistema (e que
possa ser executado de alguma forma por programas do tipo launcher no modo
gr´afico) que vai ser utilizado sempre que quisermos abrir nossos arquivos dessa
maneira. Para efeito do exemplo, o nome do arquivo ser´a tvim (de tabbed vim),
por´em pode ser nomeado com o nome que for conveniente.
A ´unica necessidade para essa dica funcionar ´e a vers˜ao do Vim ter suporte para
o argumento -serverlist, o que deve ser garantido nas vers˜oes presentes na
´epoca em que esse documento foi escrito. Para fazer uma simples verifica¸c˜ao se
o comando est´a dispon´ıvel, deve ser digitado em um terminal:
vim --serverlist
gvim --serverlist
Se ambos os comandos acima resultaram em erro, o procedimento n˜ao poder´a
ser implementado. Do contr´ario, deve-se utilizar o comando que teve um retorno
v´alido (vim ou gvim) para criar o script. Supondo que foi o comando gvim que
n˜ao retornou um erro, criamos o script da seguinte forma:
#!/bin/bash
if [ $# -ne 1 ]
then
echo Sem arquivos para editar.
exit
fi
gvim --servername $(gvim --serverlist | head -1) --remote-tab $1
3Diret´orios nos quais o sistema busca pelos comandos
98 Como Editar Preferˆencias no Vim
Desse modo, se for digitado tvim sem qualquer argumento, ´e exibida a mensagem
de erro, do contr´ario, o arquivo ´e aberto na c´opia corrente do Gvim, em uma
nova aba, por exemplo:
tvim .vimrc
Fonte: Site do Eust´aquio Rangel [16]
12.20 Referˆencias
* http://www.dicas-l.com.br/dicas-l/20050118.php
Cap´ıtulo 13
Um Wiki para o Vim
´E ineg´avel a facilidade que um Wiki nos traz, os documentos s˜ao indexados e
linkados de forma simples. J´a pesquisei uma por¸c˜ao de Wikis e, para uso pes-
soal recomendo o Potwiki. O “link” do Potwiki ´e este [17]. O Potwiki ´e um
Wiki completo para o Vim, funciona localmente embora possa ser aberto remo-
tamente via ssh1
. Para criar um “link” no Potwiki basta usar WikiNames, s˜ao
nomes iniciados com letra mai´uscula e que contenham outra letra em mai´usculo
no meio.
Ao baixar o arquivo salve em ~/.vim/plugin.
Mais ou menos na linha 53 do Potwiki ~/.vim/plugin/potwiki.vim vocˆe define
onde ele guardar´a os arquivos, no meu caso /home/docs/textos/wiki. a linha
ficou assim:
call s:default(’home’,~/.wiki/HomePage)
Outra forma de indicar a p´agina inicial seria colocar no seu .virmc
let potwiki_home = $HOME/.wiki/HomePage
13.1 Como usar
O Potwiki trabalha com WikiWords, ou seja, palavras iniciadas com letras em
mai´usculo e que tenham outra letra em mai´usculo no meio (sem espa¸cos). Para
iniciar o Potwiki abra o Vim e pressione ww.
Leader ´e igual a  - veja :help leader
ww .... abra a sua HomePage
wi .... abre o Wiki index
1Sistema de acesso remoto
100 Um Wiki para o Vim
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 ´e igual a Enter
Tab.... move para a pr´oxima WikiWords
BS .... move para os WikiWords anteriores (mesma p´agina)
wr .... recarrega WikiWords
13.2 Salvamento autom´atico para o Wiki
Procure por uma se¸c˜ao autowrite no manual do Potwiki
:help potwiki
O valor que est´a em zero dever´a ficar em 1
call s:default(‘autowrite’,0)
 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”.
13.3 Problemas com codifica¸c˜ao de caracteres
Atualmente uso o Ubuntu em casa e ele j´a usa utf-8. Ao restaurar meu“backup”
do Wiki no Kurumin os caracteres ficaram meio estranhos, da´ı fiz:
baixei o pacote [recode]
# apt-get install recode
para recodificar caracteres de ‘utf-8’ para ‘iso’ fa¸ca:
recode -d u8..l1 arquivo
Cap´ıtulo 14
H´abitos para Edi¸c˜ao Efetiva
Um dos grandes problemas relacionados com os softwares ´e sua subutiliza¸c˜ao.
Por in´ercia o usu´ario tende a aprender o m´ınimo para a utiliza¸c˜ao de um pro-
grama e deixa de lado recursos que poderiam lhe ser de grande valia. O mantene-
dor do Vim, Bram Moolenaar1
, recentemente publicou v´ıdeos e manuais sobre
os “7 h´abitos para edi¸c˜ao efetiva de textos”2
, este cap´ıtulo pretende resumir
alguns conceitos mostrados por Bram Moolenaar em seu artigo.
14.1 Mova-se rapidamente no texto
O cap´ıtulo 3, “Movendo-se no Documento”, p´agina 24 mostra uma s´erie de
comandos para agilizar a navega¸c˜ao no texto. Memorizando estes comandos
ganha-se tempo consider´avel, um exemplo simples em que o usu´ario est´a na
linha 345 de um arquivo decide ver o conte´udo da linha 1 e em seguida voltar `a
linha 345:
gg ....... vai para a linha 1
’’ ....... retorna ao ´ultimo ponto em que estava
Fica claro portanto que a navega¸c˜ao r´apida ´e um dos requisitos para edi¸c˜ao
efetiva de documentos.
14.2 Use marcas
veja a se¸c˜ao 3.2 na p´agina 29.
ma ..... em modo normal cria uma marca ‘a’
’a ..... move o cursor at´e a marca ‘a’
d’a .... deleta at´e a marca ‘a’
y’a .... copia at´e a marca ‘a’
1http://www.moolenaar.net
2http://br-linux.org/linux/7-habitos-da-edicao-de-texto-efetiva
102 H´abitos para Edi¸c˜ao Efetiva
gg ... vai para a linha 1 do arquivo
G .... vai para a ´ultima linha do arquivo
0 .... vai para o in´ıcio da linha
$ .... vai para o fim da linha
fx ... pula at´e a pr´oxima ocorr^encia de ‘‘x’’
dfx .. deleta at´e a pr´oxima ocorr^encia de ‘‘x’’
g, ... avan¸ca na lista de altera¸c~oes
g; ... retrocede na lista de altera¸c~oes
p .... cola o que foi deletado/copiado abaixo
P .... cola o que foi deletado/copiado acima
H .... posiciona o cursor no primeiro caractere da tela
M .... posiciona o cursor no meio da tela
L .... posiciona o cursor na ´ultima linha da tela
* ........ localiza a palavra sob o cursor
% ........ localiza fechamentos de chaves, par^enteses etc.
g* ....... localiza palavra parcialmente
’. apostrofo + ponto retorna ao ´ultimo local editado
’’ retorna ao local do ultimo salto
Suponha que vocˆe est´a procurando a palavra ‘argc’:
/argc
Digita ‘n’ para buscar a pr´oxima ocorrˆencia
n
Um jeito mais f´acil seria:
coloque a linha abaixo no seu vimrc
:set hlsearch
Agora use asterisco para destacar todas as ocorrˆencias do padr˜ao desejado e use
a letra ‘n’ para pular entre ocorrˆencias, caso deseje seguir o caminho inverso use
‘N’.
14.3 Use quantificadores
Em modo normal vocˆe pode fazer
10j ..... desce 10 linhas
5dd ..... apaga as pr´oximas 5 linhas
:50 ..... vai para a linha 50
50gg .... vai para a linha 50
14.4 Edite v´arios arquivos de uma s´o vez 103
14.4 Edite v´arios arquivos de uma s´o vez
O Vim pode abrir v´arios arquivos que contenham um determinado padr˜ao. Um
exemplo seria abrir dezenas de arquivos HTML e trocar a ocorrˆencia bgcolor=ffffff
Para bgcolor=eeeeee Usar´ıamos a seguinte sequˆencia de comandos:
vim *.html .............................. abre os arquivos
:bufdo :%s/bgcolor=‘ffffff’/bgcolor=‘eeeeee’/g substitui¸c~ao
:wall .................................... salva todos
:qa[ll] .................................... fecha todos
Ainda com rela¸c˜ao `a edi¸c˜ao de v´arios arquivos poder´ıamos abrir alguns arquivos
txt e mudar de um para o outro assim:
:wn
O ‘w’ significa gravar e o ‘n’ significa next, ou seja, gravar´ıamos o que foi modi-
ficado no arquivo atual e mudar´ıamos para o pr´oximo.
 Veja tamb´em “Movendo-se no documento”, cap´ıtulo 3 p´agina 24
14.5 N˜ao digite duas vezes
• O Vim complementa com ‘tab’. Veja mais na se¸c˜ao 12.16 na p´agina 96.
• Use macros. Detalhes na se¸c˜ao 8.3 p´agina 62.
• Use abrevia¸c˜oes coloque abrevia¸c˜oes como abaixo em seu ~/.vimrc. Veja
mais na se¸c˜ao 12.17.
• As abrevia¸c˜oes fazem o mesmo que auto-corre¸c˜ao e auto-texto em outros
editores
iab tambem tamb´em
iab linux GNU/Linux
No modo de inser¸c˜ao vocˆe 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 conte´udo em um registrador:
ayy ... copia a linha atual para o registrador ‘a’
ap ... cola o registrador ‘a’
Crie abrevia¸c˜oes para erros comuns no seu arquivo de configura¸c˜ao ( /.vimrc):
104 H´abitos para Edi¸c˜ao Efetiva
iabbrev teh the
syntax keyword WordError teh
As linhas acima criam uma abrevia¸c˜ao para erro de digita¸c˜ao da palavra ‘the’ e
destaca textos que vocˆe abrir que contenham este erro.
14.6 Use dobras
O Vim pode ocultar partes do texto que n˜ao est˜ao sendo utilizadas permitindo
uma melhor visualiza¸c˜ao do conte´udo. Mais detalhes no cap´ıtulo 4 p´agina 30.
14.7 Use autocomandos
:h autocmd.txt
No arquivo de configura¸c˜ao do Vim ~/.vimrc pode-se pode criar comandos
autom´aticos que ser˜ao executados diante de uma determinada circunstˆancia.
O comando abaixo ser´a executado em qualquer arquivo existente, ao abrir o
mesmo, posicionando o cursor no ´ultimo local editado:
autocmd BufEnter * lcd %:p:h
autocmd BufReadPost *
 if line(’)  0  line(’) = line($) |
 exe normal g‘ |
 endif
Grupo de comandos para arquivos do tipo ‘html’. Observe que o autocomando
carrega um arquivo de configura¸c˜ao do Vim exclusivo para o tipo html/htm e
no caso de arquivos novos ‘BufNewFile’ ele j´a cria um esqueleto puxando do
endere¸co 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 ap´os o corpo body
au BufNewFile,BufRead *.html,*.shtml,*.htm set noautoindent
augroup end
14.8 Use o File Explorer
O Vim pode navegar em pastas assim:
14.9 Torne as boas pr´aticas um h´abito 105
vim .
Vocˆe pode usar ‘j’ e ‘k’ para navegar e Enter para editar o arquivo selecionado:
14.9 Torne as boas pr´aticas um h´abito
Para cada pr´atica produtiva procure adquirir um h´abito e mantenha-se atento
ao que pode ser melhorado. Imagine tarefas complexas, procure um meio melhor
de fazer e torne um h´abito.
14.10 Referˆencias
• http://www.moolenaar.net/habits_2007.pdf por Bram Moolenaar
• http://vim.wikia.com/wiki/Did_you_know
Cap´ıtulo 15
Plugins
“Plugins”1
s˜ao um meio de estender as funcionalidades do Vim, h´a“plugins”para
diversas tarefas, desde wikis para o Vim at´e ferramentas de aux´ılio a navega¸c˜ao
em arquivos com ´e o caso do “plugin” NerdTree [18], que divide uma janela que
permite navegar pelos diret´orios do sistema a fim de abrir arquivos a serem
editados.
15.1 Como testar um plugin sem instal´a-lo?
:source path/plugin
Caso o plugin atenda as necessidades, pode-se instal´a-lo. Este procedimento
tamb´em funciona para temas de cor!
No GNU/Linux
~/.vim/plugin/
No Windows
~/vimfiles/plugin/
Obs: Caso ainda n˜ao exista o diret´orio, ele pode ser criado pelo pr´oprio usu´ario
Exemplo no GNU/Linux
+ /home/usuario/
|
|
+ .vim
|
|
+ plugin
1Plugins s˜ao recursos que se adicionam aos programas
15.2 Atualizando a documenta¸c˜ao dos plugins 107
Obs: Alguns plugins dependem da vers˜ao do Vim, para saber qual a que est´a
atualmente instalada:
:ve[rsion]
15.2 Atualizando a documenta¸c˜ao dos plugins
:h helptags
Caso seja adicionado algum arquivo de documenta¸c˜ao em ‘~/.vim/doc’ pode-se
gerar novamente as tags “links” para navega¸c˜ao de ajuda.
:helptags $VIMRUNTIME/doc
:helptags ~/.vim/doc
15.3 Plugin para LATEX
Um plugin completo para LATEXest´a acess´ıvel aqui [19]. Uma vez adicionado o
plugin vocˆe pode inserir seus templates em:
~/.vim/ftplugin/latex-suite/templates
15.4 Criando folders para arquivos LATEX
set foldmarker=begin,end
set foldmethod=marker
Adicionar marcadores (labels) `as se¸c˜oes de um documento LATEX
:.s/^(section)({.*})/12rlabel2
: ........... comando
/ ........... inicia padr~ao de busca
^ ........... come¸co de linha
(palavra) . agrupa um trecho
(section) agrupa ‘section’
 .......... torna  literal
{ ........... chave literal
.* .......... qualquer caractere em qualquer quantidade
} ........... chave literal
/ ........... finaliza par~ao de busca
1 .......... repeter o grupo 1 (section)
2 .......... repete o grupo 2 ({.*})
r .......... insere quebra de linha
 .......... insere uma barra invertida
2 .......... repete o nome da se¸c~ao
108 Plugins
15.5 Criando se¸c˜oes LATEX
o comando abaixo substitui
==se¸c~ao==
por
section{se¸c~ao}
:.s/^==s?([^=]*)s?==/section{1}/g
: ......... comando
. ......... linha atual
s ......... substitua
^ ......... come¸co de linha
== ........ dois sinais de igual
s? ...... seguido ou n~ao de espa¸co
[^=] ...... n~ao pode haver = (^ dentro de [] ´e nega¸c~ao)
* ......... diz que o que vem antes pode vir zero ou mais vezes
s? ...... seguido ou n~ao de espa¸co
 ........ insere uma barra invertida
1 ........ repete o primeiro trecho entre ()
15.6 Plugin para manipular arquivos
Acesse o plugin neste link [20]. Para entender este plugin acesse um v´ıdeo neste
link [21].
15.7 Complementa¸c˜ao de c´odigos
O “plugin” snippetsEmu ´e um misto entre complementa¸c˜ao de c´odigos e os cha-
mados modelos ou templates. Insere um trecho de c´odigo pronto, mas vai al´em
disso, permitindo saltar para trechos do modelo inserido atrav´es de um atalho
configur´avel de modo a agilizar o trabalho do programador. Link para bai-
xar [22].
15.7.1 Instala¸c˜ao
Um artigo ensinando como instalar o “plugin” snippetsEmu pode ser lido nesse
artigo na internet [23]. Outro plugin muito interessante para complementa¸c˜ao
´e o “autocompletepopup” que complementa mostrando um popup durante a
digita¸c˜ao, o mesmo pode ser obtido neste link [24], em seguida coloca-se esta
linha ao vimrc:
let g:AutoComplPop_CompleteoptPreview = 1
15.8 Um wiki para o Vim 109
A linha acima faz com que o vim abra uma janela pequena com a documenta¸c˜ao
de cada m´etodo que est´a sendo digitado.
15.8 Um wiki para o Vim
O “plugin” wikipot implementa um wiki para o Vim no qual vocˆe define um
“link” com a nota¸c˜ao WikiWord, onde um “link”´e uma palavra que come¸ca com
uma letra mai´uscula e tem outra letra mai´uscula no meio Obtendo o plugin
neste link [17].
15.9 Acessando documenta¸c˜ao do Python no Vim
Obtenha um plugin para esta tarefa em seu site oficial [25].
15.10 Formatando textos planos com syntax
Um plugin que adiciona syntaxe colorida a textos planos pode ser obtido neste
link [26]. Veja como instalar o este plugin no cap´ıtulo 15.8.
15.11 Movimentando em camel case
O plugin CamelCaseMotion [27] auxilia a navega¸c˜ao em palavras em camel
case [28] ou separadas por sublinhados, atrav´es de mapeamentos similares aos
que fazem a movimenta¸c˜ao normal entre strings, e ´e um recurso de grande ajuda
quando o editor ´e utilizado para programa¸c˜ao.
Ap´os instalado o plugin, os seguintes atalhos ficam dispon´ıveis:
,w Movimenta para a pr´oxima posi¸c˜ao camel dentro da string
,b Movimenta para a posi¸c˜ao camel anterior dentro da string
,e Movimenta para o caractere anterior `a pr´oxima posi¸c˜ao camel dentro da
string
Fonte: Blog do Eust´aquio Rangel [29]
15.12 Plugin FuzzyFinder
Este plugin ´e a implementa¸c˜ao de um recurso do editor Texmate2
. Sua proposta
´e acessar de forma r´apida:
1. Arquivos :FuzzyFinderFile
2Editor de textos da Apple com muitos recursos
110 Plugins
2. Arquivos rec´em editados :FuzzyFinderMruFile
3. Comandos rec´em utilizados :FuzzyFinderMruCmd
4. Favoritos :FuzzyFinderAddBookmark, :FuzzyFinderBookmarks
5. Navega¸c˜ao por diret´orios :FuzzyFinderDir
6. Tags :FuzzyFinderTag
Para ver o plugin em a¸c˜ao acesse este video para obte-lo acesse este endere¸co,
para instal´a-lo basta copiar para o diret´orio /.vim/plugin.
15.13 O plugin EasyGrep
Usu´arios de sistemas Unix Like3
, j´a conhecem o poder do comando grep, usando
este comando procuramos palavras dentro de arquivos, este plugin simplifica esta
tarefa, al´em de permitir a utiliza¸c˜ao da vers˜ao do grep nativa do Vim vimgrep,
assim usu´arios do Windows tamb´em podem usar este recurso. Um comando
grep funciona mais ou menos assim:
grep [op¸c~oes] padr~ao /caminho
Mas no caso do plugin EasyGrep fica assim:
:Grep foo ........ procura pela palavra ’foo’
:GrepOptions ...... exibe as op¸c~oes de uso do plugin
O plugin pode ser obtido no seguinte endere¸co, j´a sua instala¸c˜ao ´e simples, basta
copiar o arquivo obtido no link acima para a pasta:
~/.vim/plugin .......... no caso do linux
~/vimfiles/plugin ...... no caso do windows
Um v´ıdeo de exemplo (na verdade uma anima¸c˜ao gif) pode ser visto aqui.
15.14 O plugin SearchComplete
Para que o vim complete op¸c˜oes de busca “com a tecla tab”, digita-se uma
palavra parcialmente e o plugin atua, exibindo palavras que tem o mesmo in´ıcio,
por exemplo:
/mercatab
/mercado
/mercantil
/mercadol´ogico
3Sistemas da fam´ılia Unix tipo o GNU/Linux
15.15 O plugin AutoComplete 111
Cada vez que se pressiona a tecla tab o cursor saltar´a para a pr´oxima ocor-
rˆencia daquele fragmento de palavra. Pode-se obter o plugin SearchComplete
no seguinte endere¸co, e para instal´a-lo basta copi´a-lo para a pasta apropriada:
~/vimfiles/plugin .......... no windows
~/.vim/plugin .............. no Gnu/Linux
H´a outro plugin similar chamado CmdlineComplete dispon´ıvel neste link.
15.15 O plugin AutoComplete
Este plugin trabalha exibindo sugest˜oes no modo de inser¸c˜ao, `a medida que o
usu´ario digita aparece um popup com sugest˜oes para poss´ıveis complementos,
bastando pressionar Enter para aceitar as sugest˜oes. Neste link, vocˆe pode
fazer o download do plugin.
15.16 O plugin Ctags
Ctags em si ´e um programa externo que indexa arquivos de c´odigo fonte. Ele
lˆe o c´odigo fonte em busca de identificadores, declara¸c˜oes de fun¸c˜ao, vari´aveis,
e constr´oi seu ´ındex de referˆencias cruzadas. Mas vamos ao plugin, mesmo por
que n˜ao estamos no CtagsBook.
Primeiro precisamos ter o arquivos de tags. Para tal, usamos o comando:
ctags -R arquivos
Normalmente o parˆametro arquivos pode ser uma express˜ao regular do tipo
*.[ch] e afins. Depois de obter o arquivo de tags, vocˆe j´a pode sair usando os
atalhos do plugin para navegar pelo c´odigo fonte. Com o cursor em cima de um
identificador, usando o atalho ‘ctrl+]’ o cursor pula diretamente para a sua
declara¸c˜ao. O atalho ‘ctrl+o’ volta o cursor para a posi¸c˜ao inicial.
 Quando navegando por um c´odigo fonte muito extenso com v´arios diret´o-
rios, ´e mapear o caminho dos arquivos usando o caminho absoluto deles no seu
diret´orio de trabalho deste jeito:
find $(pwd) -regex .*py$ | xargs ctags
Assim vocˆe pode copiar o arquivo de tags para todos os diret´orios e mesmo
assim conseguir usar os atalhos do plugin para navegar no c´odigo fonte.
Pode-se obter o programa Ctags neste link. O plugin de Ctags para o Vim est´a
neste link”, e para instal´a-lo basta copi´a-lo para a pasta apropriada:
~/vimfiles/plugin .......... no windows
~/.vim/plugin .............. no Gnu/Linux
112 Plugins
15.17 O Plugin Project
O plugin project acess´ıvel atrav´es deste link cria toda uma estrutura de geren-
ciamento de projetos, para programadores ´e uma funcionalidade extremamente
necess´aria, costuma-se trabalhar com v´arios arquivos da mesma fam´ılia “exten-
s˜ao”, e ao clicar em um dos arquivos do projeto o mesmo ´e aberto instantanea-
mente.
:Project ......... abre uma janela lateral para o projeto
C ............... inicia a cria¸c~ao de um projeto (recursivamente)
c ............... inicia a cria¸c~ao de um projeto na pasta local
Ap´os digitar o atalho de cria¸c˜ao do projeto aparecer´a uma janela para designar
um nome para o mesmo, em seguida digita-se o caminho para o diret´orio do
projeto, ap´os isto digita-se ‘.’ (ponto) como parˆametro, cria-se um filtro como
‘*.py’. Para criar uma entrada (acesso ao plugin) no menu do Gvim colocamos
a seguinte linha no ‘vimrc’.
amenu Projetos.togle PlugToggleProjectcr
Pode-se definir um projeto manualmente assim:
nome=~/docs/ CD=. filter=*.txt {
}
Ao recarregar o Vim pode-se abrir o Plugin“:Projetc”e pressionar o atalho ‘r’
para que o mesmo gere um ´ındice dos arquivos contidos no caminho indicado.
15.18 O plugin pydiction
Um que completa c´odigos python assim:
import sys
sys.tab
O plugin cont´em dois arquivos:
1. pydiction.py deve ser colocado no path
2. pydiction deve ser colocado em um lugar de sua preferˆencia
Deve-se adicionar algumas linhas do .vimrc. No exemplo abaixo o dicion´ario ´e
adicionado ao diret´orio /.vim/dict
if has(autocmd)
autocmd FileType python set complete+=k/.vim/dict/pydiction isk+=.,(
endif  has(autocmd)
Pode-se obter o plugin neste link.
15.19 O plugin FindMate 113
15.19 O plugin FindMate
Um plugin que agiliza a busca por arquivos na pasta pessoal, dispon´ıvel neste
link. Basta coloca-lo na pasta “/home/usuario/.vim/plugins/” e digitar duas
vezes v´ırgula e ele substituir´a para:
:FindMate
Digita-se ent˜ao uma palavra e Enter para se obter a lista de arquivos que
correspondem ao padr˜ao.
15.20 Atualizando a documenta¸c˜ao dos plugins
:h helptags
Caso seja adicionado algum arquivo de documenta¸c˜ao em em ‘~/.vim/doc’
pode-se gerar novamente as tags “links” para navega¸c˜ao de ajuda.
:helptags ~/.vim/doc
Cap´ıtulo 16
Referˆencias
• http://www.vivaolinux.com.br/artigos/impressora.php?codigo=2914
VIM avan¸cado (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
Bibliografia
[1] UNKNOWN, “PC: MS-DOS and MS-Windows”, 2009, acessado
19/05/2009, http://www.vim.org/download.php.
[2] SILVA, S. L. A., “Using expression register in Vim”, 2009, acessado
14/05/2009, http://vimeo.com/2967392.
[3] JARGAS, A. M., Express˜oes Regulares - Guia de Consulta R´apida. 2001,
acessado em 14/05/2009, http://guia-er.sourceforge.net/.
[4] ANGELO, O. H. E., “Mudan¸ca em v´arias linhas”, 2007, aces-
sado em 14/05/2009, http://tech.groups.yahoo.com/group/vi-br/
message/853.
[5] CHARLES CAMPBELL, “Produce increasing/decreasing columns of num-
bers, dates, or daynames”, 2006, Acessado no dia 19 de agosto de 2009,
http://vim.sourceforge.net/scripts/script.php?script_id=670.
[6] ALMEIDA, R. Q. D., “Jun¸c˜ao de linhas com vim”, 2008, acessado em
14/05/2009, http://www.dicas-l.com.br/dicas-l/20081228.php.
[7] LAKSHMANAN, Y., “Vim documentation: vim faq”, 2005, acessado
17/05/2009, http://vimdoc.sourceforge.net/htmldoc/vimfaq.html.
[8] WIKIPEDIA, “Acordo Ortogr´afico de 1990”, 2009, acessado em
21/07/2009, http://pt.wikipedia.org/wiki/Acordo_Ortogr%C3%
A1fico_de_1990.
[9] MOURA, R. S., “Dicion´arios do Broffice.org”, 2009, acessado 14/05/2009,
http://www.broffice.org/verortografico/baixar.
[10] ANONYMOUS, “Scientific calculator”, 2006, acessado 14/05/2009, http:
//vim.wikia.com/wiki/Scientific_calculator.
[11] BOUNGA, “Writing a valid statusline”, 2004, acessado 14/05/2009, http:
//vim.wikia.com/wiki/Writing_a_valid_statusline.
[12] MEDLEY, B., “Number a group of lines”, 2001, acessado 14/05/2009,
http://vim.wikia.com/wiki/Number_a_group_of_lines.
[13] UNKNOWN, “Gvim colorscheme screenshot”, 2009, acessado 14/05/2009,
http://nanasi.jp/old/colorscheme_0.html.
116 Referˆencias Bibliogr´aficas
[14] LEGNER, “Automatically add Python paths to Vim path”, 2008, aces-
sado em 14/05/2009, http://vim.wikia.com/wiki/Automatically_add_
Python_paths_to_Vim_path.
[15] RANGEL, E., “Backups do Vim”, 2008, acessado 14/05/2009, http://
eustaquiorangel.com/posts/520.
[16] RANGEL, E., “Instˆancia solit´aria do Vim”, 2007, acessado 14/05/2009,
http://eustaquiorangel.com/posts/477.
[17] STEINER, E., “potwiki.vim : Maintain a Wiki of plain text files”,
2008, acessado 14/05/2009, http://www.vim.org/scripts/script.php?
script_id=1018.
[18] GRENFELL, M., “The NERD tree : A tree explorer plugin for naviga-
ting the filesystem”, 2009, acessado 14/05/2009, http://www.vim.org/
scripts/script.php?script_id=1658.
[19] UNKNOWN, “Plugin para latex”, acessado 14/05/2009, http://
vim-latex.sourceforge.net/.
[20] NATSUNO, K., “ku : An interface for anything”, 2009, aces-
sado 14/05/2009, http://www.vim.org/scripts/script.php?script_
id=2337#0.1.9.
[21] UNKNOWN, “Video about ku file”, 2009, acessado 14/05/2009,
http://www.screencast.com/users/kana/folders/Jing/media/
278e3c04-864f-4dcb-bb7e-8db0fdd2e383.
[22] INGRAM, F., “snippetsEmu : An attempt to emulate TextMate’s snippet
expansion”, 2008, acessado 14/05/2009, http://www.vim.org/scripts/
script.php?script_id=1318.
[23] SILVA, S. L. A., “Instalando o plugin snippetsEmu no vim”,
2008, acesso em 13/05/2009, http://vivaotux.blogspot.com/2008/03/
instalando-o-plugin-snippetsemu-no-vim.html.
[24] NISHIDA, T., “Plugin para complementa¸c˜ao autom´atica com popup”,
2009, acesso em 14/05/2009, http://www.vim.org/scripts/script.php?
script_id=1879.
[25] KELPE, A., “pydoc.vim : Python documentation view- and search-tool
(uses pydoc)”, 2005, acessado 14/05/2009, http://www.vim.org/scripts/
script.php?script_id=910.
[26] STAHLMAN, B., “Txtfmt (The Vim Highlighter) : Highlight plain
text in Vim! (Beautify your documents with colors and formats.)”,
2009, acessado 14/05/2009, http://www.vim.org/scripts/script.php?
script_id=2208rating=helpful#1.3.
[27] KARKAT, I., “camelcasemotion : Motion through CamelCaseWords and
underscore notation.” 2009, acessado em 14/05/2009, http://www.vim.
org/scripts/script.php?script_id=1905.
Referˆencias Bibliogr´aficas 117
[28] WIKIPEDIA, A. E. L., “CamelCase”, 2009, acessado 14/05/2009, http:
//en.wikipedia.org/wiki/Camel_case.
[29] RANGEL, E.,“Plugin do Vim para altos, baixos e rasteiros”, 2008, acessado
14/05/2009, http://eustaquiorangel.com/posts/522.
Colaboradores
Se¸c˜ao dedicada aos colaboradores do projeto vimbook
´Indice
´area de transferˆencia, 11
ajuda, 4
atalhos, 4, 6
autocomandos, 87, 104
backup
fun¸c˜ao para gerar backup, 93
nobackup, 97
writebackup, 97
barra de status, 90
buscas
intervalo, 56
clipboard, 11
colar, 9–11
copiar, 9–11
cores
esquemas, 63, 81, 91
deletar, 8, 9
linhas duplicadas, 11
documentos
modelos, 89
editando, 7
v´arios arquivos, 103
em caso de erros, 4
express˜oes regulares, 2
buscas, 42
fechar o programa, 8
fileExplorer, 104
folders, 104
fun¸c˜oes, 89
grep, 13
hist´orico, 13
ide, 2
indenta¸c˜ao, 48, 88
iniciar, 3, 7
linha espec´ıfica, 7
novo arquivo, 11
padr˜ao espec´ıfico, 7
jun¸c˜ao de linhas, 56
linhas
numerar, 90
lista de altera¸c˜oes, 13
manual, 4
mapeamento, 4
mapeamentos, 83
exibir numera¸c˜ao de linhas, 85
globais, 87
marcas, 101
menus, 93
exemplos, 94
modo de comando, 5
modo de inser¸c˜ao, 5, 8
modo normal, 5
modo visual, 5
modos de opera¸c˜ao, 5, 8, 24
errors comuns, 6
exemplos, 5
movendo-se
big words, 26
efetuando saltos, 25
em palavras grandes, 26
entre caracteres, 24
entre linhas, 24, 101
entre senten¸cas, 26
numeros
incrementar, 53
ordenando, 12
par´agrafo
ajustar, 82
120 ´Indice
tabula¸c˜ao, 82, 88
path, 88
plugins
arquivos, 108
camel case motion, 109
python, 109
texto plano, 109
wiki, 109
python
path, 93
qunatificadores, 102
registros
definindo previamente, 83
salvar o texto, 8
snippets, 108
syntax, 88
tecla
ctrl, 4
tab, 96
vari´avel, 26
verifica¸ca¸c˜ao ortogr´afica, 73
vim, 2
instalar, 2
vimrc
ignorando, 81
recarregando, 80, 84

Mais conteúdo relacionado

PDF
Enviando linux
PDF
Linux basico
PDF
Focalinux iniciante
PDF
Abc do linux
PDF
Apostila linux francisco-araruna
PDF
Latex tutorial
PDF
Manual do Kile
PDF
Foca linux 1
Enviando linux
Linux basico
Focalinux iniciante
Abc do linux
Apostila linux francisco-araruna
Latex tutorial
Manual do Kile
Foca linux 1

Mais procurados (8)

PDF
Apostila esssa
PDF
Livro angular2
PDF
Lpi 101
PDF
Foca Linux 2
PDF
Latex2009
PDF
O fantc3a1stico-mundo-da-linguagem-c
PDF
Foca linux3
PDF
Apostila esssa
Livro angular2
Lpi 101
Foca Linux 2
Latex2009
O fantc3a1stico-mundo-da-linguagem-c
Foca linux3
Anúncio

Destaque (20)

PDF
Samba, Squid, FTP, DHCP1
PDF
Guia de configuração de um servidor linux para utilização em uma pequena empresa
PDF
YUM, APT-GET, DPKG, RPM
PDF
Samba, Squid, FTP, DHCP3
PDF
Guia de estudo_101_-_completo
PDF
Redes Linux comandos gerais e servidores de redes
PDF
Guia de Administração e Certificação Linux - 4Bios
PDF
O IMPACTO DA ENGENHARIA SOCIAL NA SEGURANÇA DA INFORMAÇÃO
PDF
Configuração Ethernet Wireless Linux
PDF
Curso Linux Senai
PDF
Livro Programação em Shell 8 edição Julio Cézar Nevez
PDF
Processar fluxos de textos usando filtros
PDF
Slackbookptbr 1.0.2
PDF
Realizar o gerenciamento básico de arquivos 4Linux
PPTX
Instalador - Arch Linux
PDF
Guia Red Hat 9
PDF
Trabalhando na Linha de comando
PDF
Samba, Squid, FTP, DHCP2
PDF
Editor Vi
PDF
Shell script
Samba, Squid, FTP, DHCP1
Guia de configuração de um servidor linux para utilização em uma pequena empresa
YUM, APT-GET, DPKG, RPM
Samba, Squid, FTP, DHCP3
Guia de estudo_101_-_completo
Redes Linux comandos gerais e servidores de redes
Guia de Administração e Certificação Linux - 4Bios
O IMPACTO DA ENGENHARIA SOCIAL NA SEGURANÇA DA INFORMAÇÃO
Configuração Ethernet Wireless Linux
Curso Linux Senai
Livro Programação em Shell 8 edição Julio Cézar Nevez
Processar fluxos de textos usando filtros
Slackbookptbr 1.0.2
Realizar o gerenciamento básico de arquivos 4Linux
Instalador - Arch Linux
Guia Red Hat 9
Trabalhando na Linha de comando
Samba, Squid, FTP, DHCP2
Editor Vi
Shell script
Anúncio

Semelhante a Editor de Textos vim (20)

PDF
vimbook backup Livro de ajuda para o VIM
PDF
vimbook.pdf vimbook backup Livro de ajuda para o VIM
PDF
Livro Foca linux
PDF
Foca iniciante
PDF
Apostila c# iniciantes
PDF
Linux basico
PDF
O mundo-da-linguagem-c
PDF
Introdução ao SciLab
PDF
20220093 scilab-manual
PDF
Php
PDF
O_Fantastico_Mundo_da_Linguagem_C em pdf.pdf
PDF
Guia Foca - Linux - Iniciante + Avançado
PDF
Foca intermediario
PDF
Caelum csharp-dotnet-fn13
PDF
Arquitetura computadores
PDF
Caelum html-css-javascript-php
PDF
Instalei o Ubuntu e agora? (18.04)
PDF
Caelum java-testes-jsf-web-services-design-patterns-fj22
vimbook backup Livro de ajuda para o VIM
vimbook.pdf vimbook backup Livro de ajuda para o VIM
Livro Foca linux
Foca iniciante
Apostila c# iniciantes
Linux basico
O mundo-da-linguagem-c
Introdução ao SciLab
20220093 scilab-manual
Php
O_Fantastico_Mundo_da_Linguagem_C em pdf.pdf
Guia Foca - Linux - Iniciante + Avançado
Foca intermediario
Caelum csharp-dotnet-fn13
Arquitetura computadores
Caelum html-css-javascript-php
Instalei o Ubuntu e agora? (18.04)
Caelum java-testes-jsf-web-services-design-patterns-fj22

Mais de SoftD Abreu (20)

PDF
Documento sem título.pdf
PDF
O anticristo friedrich nietzsche
PDF
Humano, demasiado humano ii friedrich nietzsche
PDF
Detecção de intrusão em grades computacionais
PDF
Conexão remota e segurança de rede
PDF
A ferramenta rpm
PDF
Livro do pfsense 2.0
PDF
Manual wireshark
PDF
Livro nmap mapeador de redes
PDF
Um Modelo de Segurança de Redes para Ambientes Cooperativo
PDF
Teste de Intrusão Em Redes corporativas
PDF
Roteadores
PDF
Hacker inside-vol.-2
PDF
Hacker inside-vol.-1
PDF
PDF
Apostila linux curso_basico
PDF
Apostila linux.lmpt
PDF
Firewall Iptables - Urubatan Neto
PDF
O impacto da engenharia social na segurança da informaçao
PDF
Linux Mint 17-Guia
Documento sem título.pdf
O anticristo friedrich nietzsche
Humano, demasiado humano ii friedrich nietzsche
Detecção de intrusão em grades computacionais
Conexão remota e segurança de rede
A ferramenta rpm
Livro do pfsense 2.0
Manual wireshark
Livro nmap mapeador de redes
Um Modelo de Segurança de Redes para Ambientes Cooperativo
Teste de Intrusão Em Redes corporativas
Roteadores
Hacker inside-vol.-2
Hacker inside-vol.-1
Apostila linux curso_basico
Apostila linux.lmpt
Firewall Iptables - Urubatan Neto
O impacto da engenharia social na segurança da informaçao
Linux Mint 17-Guia

Último (8)

PDF
Manejo integrado de pragas na cultura do algodão
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Mecânico de Manutenção de Equipamentos.pptx
PPTX
Arquitetura de computadores - Memórias Secundárias
Manejo integrado de pragas na cultura do algodão
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Viasol Energia Solar -Soluções para geração e economia de energia
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Mecânico de Manutenção de Equipamentos.pptx
Arquitetura de computadores - Memórias Secundárias

Editor de Textos vim

  • 2. o editor de texto Vim “Um livro escrito em portuguˆes sobre o editor de texto Vim. A ideia ´e que este material cres¸ca e torne-se uma referˆencia confi´avel e pr´atica. Use este livro nos termos da Licen¸ca de Documenta¸c˜ao Livre GNU (GFDL).” Este trabalho est´a em constante aprimoramento, e ´e fruto da colabora¸c˜ao de volunt´arios. Participe do desenvolvimento enviando sugest˜oes e melhorias; acesse o site do projeto no endere¸co: http://code.google.com/p/vimbook Vers˜ao gerada em 31 de Agosto de 2009
  • 3. Autores S´ergio Luiz Ara´ujo Silva <voyeg3r@gmail.com> Douglas Adriano Augusto <daaugusto@gmail.com> Eust´aquio Rangel <eustaquiorangel@gmail.com> Eduardo Otubo <eduardo.otubo@gmail.com> Gustavo Dutra <gustavotkg@gmail.com> Jo˜ao Felipe Mitre <jfmitre@gmail.com> Willian Molinari <willian.molinari@gmail.com> ... ...
  • 4. Conte´udo 1 Introdu¸c˜ao 1 1.1 Instala¸c˜ao do Vim . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.1 Instala¸c˜ao no Windows . . . . . . . . . . . . . . . . . . . 2 1.1.2 Instala¸c˜ao no GNU/Linux . . . . . . . . . . . . . . . . . . 3 1.2 Dicas iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Ajuda integrada . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 Em caso de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 Como interpretar atalhos e comandos . . . . . . . . . . . . . . . 4 1.6 Modos de opera¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.7 Entrando em modo de edi¸c˜ao . . . . . . . . . . . . . . . . . . . . 5 1.8 Erros comuns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 Editando 7 2.1 Abrindo o arquivo para a edi¸c˜ao . . . . . . . . . . . . . . . . . . 7 2.2 Escrevendo o texto . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3 Copiar, Colar e Deletar . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.1 Deletando uma parte do texto . . . . . . . . . . . . . . . 9 2.3.2 Copiando sem deletar . . . . . . . . . . . . . . . . . . . . 10 2.3.3 Usando a ´area de transferˆencia Clipboard . . . . . . . . . 11 2.3.4 Removendo linhas duplicadas . . . . . . . . . . . . . . . . 11 2.4 For¸cando a edi¸c˜ao de um novo arquivo . . . . . . . . . . . . . . . 11 2.5 Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.6 Usando o grep interno do Vim . . . . . . . . . . . . . . . . . . . 13 2.7 Lista de altera¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.8 Substituindo tabula¸c˜oes por espa¸cos . . . . . . . . . . . . . . . . 13 2.9 Convertendo para mai´usculas . . . . . . . . . . . . . . . . . . . . 14 2.10 Editando em modo de comando . . . . . . . . . . . . . . . . . . . 14
  • 5. CONTE ´UDO v 2.11 O arquivo alternativo . . . . . . . . . . . . . . . . . . . . . . . . 15 2.12 Lendo um arquivo para a linha atual . . . . . . . . . . . . . . . . 16 2.13 Incrementando n´umeros em modo normal . . . . . . . . . . . . . 16 2.14 Repetindo a digita¸c˜ao de linhas . . . . . . . . . . . . . . . . . . . 16 2.15 Movendo um trecho de forma inusitada . . . . . . . . . . . . . . 16 2.16 Uma calculadora diferente . . . . . . . . . . . . . . . . . . . . . . 17 2.17 Desfazendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.17.1 Undo tree . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.17.2 M´aquina do tempo . . . . . . . . . . . . . . . . . . . . . . 18 2.18 Salvando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.19 Abrindo o ´ultimo arquivo rapidamente . . . . . . . . . . . . . . . 20 2.20 Modelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.21 Edi¸c˜ao avan¸cada de linhas . . . . . . . . . . . . . . . . . . . . . . 21 2.22 Comentando rapidamente um trecho . . . . . . . . . . . . . . . . 22 2.23 Comparando arquivos com o vimdiff . . . . . . . . . . . . . . . . 22 3 Movendo-se no Documento 24 3.1 Paginando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.2 Usando marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2.1 Marcas globais . . . . . . . . . . . . . . . . . . . . . . . . 29 4 Folders 30 4.1 M´etodos de dobras . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.2 Manipulando dobras . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.3 Criando dobras usando o modo visual . . . . . . . . . . . . . . . 32 5 Registros 33 5.1 O registro sem nome “” . . . . . . . . . . . . . . . . . . . . . . . . 33 5.2 Registros nomeados de 0 a 9 . . . . . . . . . . . . . . . . . . . . . 34 5.3 Registro de pequenas dele¸c˜oes - . . . . . . . . . . . . . . . . . . . 34 5.4 Registros nomeados de “a at´e z” ou “A at´e Z” . . . . . . . . . . . 34 5.5 Registros somente leitura “: . % #” . . . . . . . . . . . . . . . . . 34 5.6 Registro de express˜oes ”= . . . . . . . . . . . . . . . . . . . . . . 35 5.7 Registros de arrastar e mover . . . . . . . . . . . . . . . . . . . . 36 5.8 Registro buraco negro ” . . . . . . . . . . . . . . . . . . . . . . . 36 5.9 Registros de buscas “/” . . . . . . . . . . . . . . . . . . . . . . . . 36 5.10 Manipulando registros . . . . . . . . . . . . . . . . . . . . . . . . 37
  • 6. vi CONTE ´UDO 5.11 Listando os registros atuais . . . . . . . . . . . . . . . . . . . . . 37 5.12 Listando arquivos abertos . . . . . . . . . . . . . . . . . . . . . . 38 5.13 Dividindo a janela com o pr´oximo arquivo da lista de buffers . . 38 5.14 Como colocar um peda¸co de texto em um registro? . . . . . . . . 38 5.15 Como criar um registro em modo visual? . . . . . . . . . . . . . . 39 5.16 Como definir um registro no vimrc? . . . . . . . . . . . . . . . . 39 5.17 Como selecionar blocos verticais de texto? . . . . . . . . . . . . . 41 5.18 Referˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6 Buscas e Substitui¸c˜oes 42 6.1 Usando “Express˜oes Regulares” em buscas . . . . . . . . . . . . . 42 6.1.1 Evitando escapes ao usar Express˜oes regulares . . . . . . 43 6.2 Destacando padr˜oes . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.3 Inserindo linha antes e depois . . . . . . . . . . . . . . . . . . . . 45 6.4 Obtendo informa¸c˜oes do arquivo . . . . . . . . . . . . . . . . . . 46 6.5 Trabalhando com registradores . . . . . . . . . . . . . . . . . . . 47 6.6 Edi¸c˜oes complexas . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.7 Indentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.8 Corrigindo a indenta¸c˜ao de c´odigos . . . . . . . . . . . . . . . . . 48 6.9 Usando o File Explorer . . . . . . . . . . . . . . . . . . . . . . . . 48 6.10 Selecionando ou deletando conte´udo de tags HTML . . . . . . . . 49 6.11 Substitui¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.12 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.13 O comando global “g” . . . . . . . . . . . . . . . . . . . . . . . . 52 6.14 Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.15 Filtrando arquivos com o vimgrep . . . . . . . . . . . . . . . . . 54 6.16 Copiar a partir de um ponto . . . . . . . . . . . . . . . . . . . . . 54 6.17 Dicas das lista vi-br . . . . . . . . . . . . . . . . . . . . . . . . . 55 6.18 Jun¸c˜ao de linhas com Vim . . . . . . . . . . . . . . . . . . . . . . 56 6.19 Buscando em um intervalo de linhas . . . . . . . . . . . . . . . . 56 7 Trabalhando com Janelas 57 7.1 Alternando entre Buffers de arquivo . . . . . . . . . . . . . . . . 57 7.2 Modos de divis˜ao da janela . . . . . . . . . . . . . . . . . . . . . 57 7.2.1 Utilizando abas tab . . . . . . . . . . . . . . . . . . . . . . 58 7.2.2 Utilizando split horizontal . . . . . . . . . . . . . . . . . . 58
  • 7. CONTE ´UDO vii 7.2.3 Utilizando split vertical . . . . . . . . . . . . . . . . . . . 58 7.3 Abrindo e fechando janelas . . . . . . . . . . . . . . . . . . . . . 58 7.4 Salvando e saindo . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 7.5 Manipulando janelas . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.6 File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 8 Repeti¸c˜ao de Comandos 60 8.1 Repetindo a digita¸c˜ao de uma linha . . . . . . . . . . . . . . . . 61 8.2 Guardando trechos em “registros” . . . . . . . . . . . . . . . . . . 61 8.3 Gravando comandos . . . . . . . . . . . . . . . . . . . . . . . . . 62 8.4 Repetindo substitui¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . 63 8.5 Repetindo comandos . . . . . . . . . . . . . . . . . . . . . . . . . 63 8.6 Scripts Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 8.7 Usando o comando bufdo . . . . . . . . . . . . . . . . . . . . . . 64 8.8 Colocando a ´ultima busca em um comando . . . . . . . . . . . . 64 8.9 Inserindo o nome do arquivo no comando . . . . . . . . . . . . . 64 8.10 Inserindo o ´ultimo comando . . . . . . . . . . . . . . . . . . . . 64 8.11 Inserindo a palavra sob o cursor em um comando . . . . . . . . . 64 8.12 Para repetir exatamente a ´ultima inser¸c˜ao . . . . . . . . . . . . 65 9 Comandos Externos 66 9.1 Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 9.2 Removendo linhas duplicadas . . . . . . . . . . . . . . . . . . . . 67 9.3 Ordenando e removendo linhas duplicadas no Vim 7 . . . . . . . 67 9.4 Beautifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 9.5 Editando comandos longos no Linux . . . . . . . . . . . . . . . . 67 9.6 Compilando e verificando erros . . . . . . . . . . . . . . . . . . . 68 9.7 Grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 9.8 Indent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 9.9 Calculadora Cient´ıfica com o Vim . . . . . . . . . . . . . . . . . . 69 9.10 Editando sa´ıdas do Shell . . . . . . . . . . . . . . . . . . . . . . . 69 9.11 Log do Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . 70 9.12 Referˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 10 Verifica¸c˜ao Ortogr´afica 71 10.1 Habilitando a verifica¸c˜ao ortogr´afica . . . . . . . . . . . . . . . . 71 10.1.1 Habilita¸c˜ao autom´atica na inicializa¸c˜ao . . . . . . . . . . 72
  • 8. viii CONTE ´UDO 10.2 O dicion´ario de termos . . . . . . . . . . . . . . . . . . . . . . . . 72 10.2.1 Dicion´ario portuguˆes segundo o acordo ortogr´afico . . . . 73 10.3 Comandos relativos `a verifica¸c˜ao ortogr´afica . . . . . . . . . . . . 74 10.3.1 Encontrando palavras desconhecidas . . . . . . . . . . . . 74 10.3.2 Tratamento de palavras desconhecidas . . . . . . . . . . . 74 11 Salvando Sess˜oes de Trabalho 76 11.1 O que uma sess˜ao armazena? . . . . . . . . . . . . . . . . . . . . 76 11.2 Criando sess˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 11.3 Restaurando sess˜oes . . . . . . . . . . . . . . . . . . . . . . . . . 77 11.4 Viminfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 12 Como Editar Preferˆencias no Vim 79 12.1 Onde colocar plugins e temas de cor . . . . . . . . . . . . . . . . 79 12.2 Coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 12.3 Efetiva¸c˜ao das altera¸c˜oes no vimrc . . . . . . . . . . . . . . . . . 80 12.4 Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 12.5 Ajustando par´agrafos em modo normal . . . . . . . . . . . . . . . 82 12.6 Exibindo caracteres invis´ıveis . . . . . . . . . . . . . . . . . . . . 82 12.7 Definindo registros previamente . . . . . . . . . . . . . . . . . . . 83 12.8 Mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 12.8.1 Recarregando o arquivo de configura¸c˜ao . . . . . . . . . . 84 12.8.2 Limpando o “registro” de buscas . . . . . . . . . . . . . . 85 12.8.3 Destacar palavra sob o cursor . . . . . . . . . . . . . . . 85 12.8.4 Contar ocorrˆencias de uma palavra . . . . . . . . . . . . . 85 12.8.5 Remover linhas em branco duplicadas . . . . . . . . . . . 86 12.8.6 Mapeamento para Calcular Express˜oes . . . . . . . . . . . 86 12.8.7 Mapeamentos globais . . . . . . . . . . . . . . . . . . . . 87 12.8.8 Convertendo as iniciais de um documento para mai´usculas 87 12.9 Autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 12.9.1 Exemplos pr´aticos de autocomandos . . . . . . . . . . . . 88 12.10Fun¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 12.10.1Fechamento autom´atico de parˆenteses . . . . . . . . . . . 89 12.10.2Fun¸c˜ao para barra de status . . . . . . . . . . . . . . . . . 90 12.10.3Rolar outra janela . . . . . . . . . . . . . . . . . . . . . . 90 12.10.4Fun¸c˜ao para numerar linhas . . . . . . . . . . . . . . . . . 90
  • 9. CONTE ´UDO ix 12.10.5Fun¸c˜ao para trocar o esquema de cores . . . . . . . . . . . 91 12.10.6Uma fun¸c˜ao para inserir cabe¸calho de script . . . . . . . . 91 12.10.7Fun¸c˜ao para inserir cabe¸calhos Python . . . . . . . . . . . 91 12.10.8Fun¸c˜ao para pular para uma linha . . . . . . . . . . . . . 92 12.10.9Fun¸c˜ao para gerar backup . . . . . . . . . . . . . . . . . . 93 12.11Como adicionar o Python ao path do Vim? . . . . . . . . . . . . 93 12.12Criando um menu . . . . . . . . . . . . . . . . . . . . . . . . . . 93 12.13Criando menus para um modo espec´ıfico . . . . . . . . . . . . . . 94 12.14Exemplo de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 12.15Outros mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . 95 12.16Complementa¸c˜ao com “tab” . . . . . . . . . . . . . . . . . . . . . 96 12.17Abrevia¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 12.18Evitando arquivos de backup no disco . . . . . . . . . . . . . . . 96 12.19Mantendo apenas um Gvim aberto . . . . . . . . . . . . . . . . . 97 12.20Referˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 13 Um Wiki para o Vim 99 13.1 Como usar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 13.2 Salvamento autom´atico para o Wiki . . . . . . . . . . . . . . . . 100 13.3 Problemas com codifica¸c˜ao de caracteres . . . . . . . . . . . . . . 100 14 H´abitos para Edi¸c˜ao Efetiva 101 14.1 Mova-se rapidamente no texto . . . . . . . . . . . . . . . . . . . . 101 14.2 Use marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 14.3 Use quantificadores . . . . . . . . . . . . . . . . . . . . . . . . . . 102 14.4 Edite v´arios arquivos de uma s´o vez . . . . . . . . . . . . . . . . 103 14.5 N˜ao digite duas vezes . . . . . . . . . . . . . . . . . . . . . . . . 103 14.6 Use dobras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.7 Use autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.8 Use o File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.9 Torne as boas pr´aticas um h´abito . . . . . . . . . . . . . . . . . 105 14.10Referˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 15 Plugins 106 15.1 Como testar um plugin sem instal´a-lo? . . . . . . . . . . . . . . . 106 15.2 Atualizando a documenta¸c˜ao dos plugins . . . . . . . . . . . . . . 107 15.3 Plugin para LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . 107
  • 10. x CONTE ´UDO 15.4 Criando folders para arquivos LATEX . . . . . . . . . . . . . . . . 107 15.5 Criando se¸c˜oes LATEX . . . . . . . . . . . . . . . . . . . . . . . . . 108 15.6 Plugin para manipular arquivos . . . . . . . . . . . . . . . . . . . 108 15.7 Complementa¸c˜ao de c´odigos . . . . . . . . . . . . . . . . . . . . . 108 15.7.1 Instala¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 15.8 Um wiki para o Vim . . . . . . . . . . . . . . . . . . . . . . . . . 109 15.9 Acessando documenta¸c˜ao do Python no Vim . . . . . . . . . . . 109 15.10Formatando textos planos com syntax . . . . . . . . . . . . . . . 109 15.11Movimentando em camel case . . . . . . . . . . . . . . . . . . . . 109 15.12Plugin FuzzyFinder . . . . . . . . . . . . . . . . . . . . . . . . . . 109 15.13O plugin EasyGrep . . . . . . . . . . . . . . . . . . . . . . . . . . 110 15.14O plugin SearchComplete . . . . . . . . . . . . . . . . . . . . . . 110 15.15O plugin AutoComplete . . . . . . . . . . . . . . . . . . . . . . . 111 15.16O plugin Ctags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 15.17O Plugin Project . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 15.18O plugin pydiction . . . . . . . . . . . . . . . . . . . . . . . . . . 112 15.19O plugin FindMate . . . . . . . . . . . . . . . . . . . . . . . . . . 113 15.20Atualizando a documenta¸c˜ao dos plugins . . . . . . . . . . . . . . 113 16 Referˆencias 114 Colaboradores 118
  • 11. Cap´ıtulo 1 Introdu¸c˜ao A edi¸c˜ao de texto ´e uma das tarefas mais frequentemente executadas por seres humanos em ambientes computacionais, em qualquer n´ıvel. Usu´arios finais, administradores de sistemas, programadores de software, desenvolvedores web, e tantas outras categorias, todos eles, constantemente, necessitam editar textos. Usu´arios finais editam texto para criar documentos, enviar e-mails, atualizar o blog, escrever recados ou simplesmente trocar mensagens instantˆaneas pela internet. Administradores de sistemas editam arquivos de configura¸c˜ao, criam regras de seguran¸ca, editam scripts e manipulam sa´ıdas de comandos arma- zenados em arquivos de texto. Programadores desenvolvem c´odigos-fonte e a documenta¸c˜ao de programas essencialmente em editores de texto. Desenvolve- dores web interagem com editores de texto para criarem layout e dinˆamica de sites. Tamanha ´e a frequˆencia e onipresen¸ca da tarefa de edi¸c˜ao de texto que a efici- ˆencia, flexibilidade e o repert´orio de ferramentas de editores de texto tornam-se quesitos cr´ıticos para se atingir produtividade e conforto na edi¸c˜ao de textos. Qualquer tarefa de aprendizado requer um certo esfor¸co. Todo programa intro- duz novos conceitos, op¸c˜oes e configura¸c˜oes que transformam o modus operanti do usu´ario. Em princ´ıpio, quanto maior o esfor¸co, maior o benef´ıcio. Quem quer apenas escrever textos, pode-se contentar com um editor b´asico, cuja as ´unicas op¸c˜oes s˜ao digitar o texto, abrir e salvar o documento ou pode utilizar um editor que permita pr´e-configurar a¸c˜oes, formatar o conte´udo, revisar a ortografia, etc, al´em da a¸c˜ao b´asica que ´e escrever textos. Qualquer usu´ario de computador pode abrir o primeiro tipo de editor e imediata- mente come¸car a escrever, a curto prazo, sua a¸c˜ao ter´a consequˆencias imediatas e n˜ao requer conhecimentos adicionais. Por outro lado, esse usu´ario ter´a que fazer esfor¸co para digitar o mesmos cabe¸calho todos os dias. O outro tipo de editor permite que o usu´ario pr´e-configure o cabe¸calho do do- cumento e todos os dias esse trecho j´a estar´a digitado. Em contrapartida, o usu´ario deve aprender como pr´e-configurar o editor. O que requer esfor¸co para aprender a utilizar o programa escolhido. O benef´ıcio somente ser´a observado a m´edio/longo prazo, quando o tempo ganho ao utilizar a configura¸c˜ao ser´a superior ao tempo consumido aprendendo sobre o programa.
  • 12. 2 Introdu¸c˜ao O “Vim”1 ´e um editor de texto extremamente configur´avel, criado para permitir a edi¸c˜ao de forma eficiente, tornando-a produtiva e confort´avel. Tamb´em ´e uma aprimora¸c˜ao do editor “Vi”, um tradicional programa dos sistemas Unix. Possui uma s´erie de mudan¸cas em rela¸c˜ao a este ´ultimo. O pr´oprio slogan do Vim ´e Vi IMproved, ou seja, Vi Melhorado. O Vim ´e t˜ao conhecido e respeitado entre programadores, e t˜ao ´util para programa¸c˜ao, que muitos o consideram uma ver- dadeira “IDE (Integrated Development Environment, em portuguˆes, Ambiente Integrado de Desenvolvimento)”. Ele ´e capaz de reconhecer mais de 500 sintaxes de linguagens de programa¸c˜ao e marca¸c˜ao, possui mapeamento para teclas, macros, abrevia¸c˜oes, busca por Express˜oes Regulares2 , entre outras facilidades. A figura 1.1 mostra o vim sendo usando para editar o arquivo o desse livro sobre vim. Figura 1.1: Usando o vim para editar o c´odigo em LATEX O Vim conta com uma comunidade bastante atuante e ´e, ao lado do Emacs3 , um dos editores mais usados nos sistemas GNU/Linux4 , embora esteja tamb´em dispon´ıvel em outros sistemas, como o Windows e o Macintosh. 1.1 Instala¸c˜ao do Vim :h install 1.1.1 Instala¸c˜ao no Windows H´a uma vers˜ao gr´afica do Vim dispon´ıvel para v´arios sistemas operacionais, incluindo o Windows; esta vers˜ao pode ser encontrada no site oficial [1]. Para 1Vim - http://www.vim.org 2Express˜oes Regulares - http://guia-er.sourceforge.net/guia-er.html 3Emacs - http://www.gnu.org/software/emacs/ 4O kernel Linux sem os programas GNU n˜ao serviria para muita coisa.
  • 13. 1.2 Dicas iniciais 3 instal´a-lo basta baixar o instalador no link indicado e dispar´a-lo com um duplo clique (este procedimento requer privil´egios de administrador). 1.1.2 Instala¸c˜ao no GNU/Linux A maioria das distribui¸c˜oes GNU/Linux traz o Vim em seus reposit´orios, sendo que ´e bastante comum o Vim j´a vir inclu´ıdo na instala¸c˜ao t´ıpica da distribui¸c˜ao. A forma de instala¸c˜ao prefer´ıvel depende do Vim: • J´a vir instalado por default – neste caso nada precisa ser feito. • Estar dispon´ıvel no reposit´orio, mas n˜ao instalado – em distribui¸c˜oes de- rivadas da Debian GNU/Linux5 , a instala¸c˜ao do Vim atrav´es dos reposi- t´orios ´e usualmente executada digitando-se ‘apt-get install vim’6 em um terminal (este procedimento requer privil´egios de administrador e, ti- picamente, conex˜ao com a internet). Algumas distribui¸c˜oes GNU/Linux dividem o programa vim em v´arios pa- cotes. Pacotes adicionais como gvim, vim-enhanced, vim-phython7 , entre outros, representam diferentes vers˜oes do mesmo aplicativo. O gvim ´e a vers˜ao gr´afica do Vim e o vim-enhanced ´e uma vers˜ao do vim compilada com um suporte interno ao Python8 . A alternativa para resolver esse problema ´e buscar na documenta¸c˜ao da distribui¸c˜ao o que significa cada pacote. • N˜ao estar dispon´ıvel no reposit´orio da distribui¸c˜ao – cen´ario muito im- prov´avel, mas nas sua ocorrˆencia o Vim pode ser instalado atrav´es da compila¸c˜ao do c´odigo-fonte; basta seguir as instru¸c˜oes do site oficial [1]. 1.2 Dicas iniciais Ao longo do livro alguns comandos ou dicas podem estar duplicados, o que ´e ´util devido ao contexto e tamb´em porque o aprendizado por satura¸c˜ao ´e um ´otimo recurso. Ao perceber uma dica duplicada, antes de reclamar veja se j´a sabe o que est´a sendo passado. Contudo dicas e sugest˜oes ser˜ao bem vindas! Para abrir um arquivo com Vim digite num terminal: vim texto.txt onde texto.txt ´e o nome do arquivo que deseja-se criar ou editar. Em algumas distribui¸c˜oes, pode-se usar o comando vi ao inv´es de vim. 5Debian GNU/Linux - http://www.debian.org/index.pt.html 6Recomenda-se tamb´em instalar a documenta¸c˜ao em HTML do Vim: ‘apt-get install vim-doc’ 7Para ubuntu e Debian 8O Python (http://www.python.org) ´e uma linguagem de programa¸c˜ao orientada a objetos muito comum no meio profissional e acadˆemico
  • 14. 4 Introdu¸c˜ao 1.3 Ajuda integrada O Vim possui uma ajuda integrada muito completa, s˜ao mais de 100 arquivos somando milhares de linhas. O ´unico inconveniente ´e n˜ao haver ainda tradu¸c˜ao para o portuguˆes, sendo o inglˆes seu idioma oficial; entretanto, as explica¸c˜oes costumam ser sint´eticas e diretas, de forma que no¸c˜oes em inglˆes seriam sufici- entes para a compreens˜ao de grande parte do conte´udo da ajuda integrada. Obs: No Vim quase todos os comandos podem ser abreviados, no caso “help” pode ser chamado por“h”e assim por diante. Um comando s´o pode ser abreviado at´e o ponto em que este nome mais curto n˜ao coincida com o nome de algum outro comando existente. Para chamar a ajuda do Vim pressione ‘Esc’ e em seguida: :help .... vers~ao longa, ou :h ....... vers~ao abreviada ou simplesmente ‘F1’. Siga os links usando o atalho ‘ctrl+]’, em modo gr´afico o clique com o mouse tamb´em funciona, e para voltar use ‘ctrl+o’ ou ‘ctrl+t’ Para as situa¸c˜oes de desespero pode-se digitar: :help! Quando um comando puder ser abreviado poder´a aparecer desta forma: ‘:so[urce]’. Deste modo se est´a indicando que o comando ‘:source’ pode ser usado de forma abreviada, no caso ‘:so’. 1.4 Em caso de erros Recarregue o arquivo que est´a sendo editado pressionando ‘Esc’ e em seguida usando o comando ‘:e’. ou simplesmente inicie outro arquivo ignorando o atual, com o comando ‘:enew!’, ou saia do arquivo sem modifica-lo, com ‘:q!’. Pode-se ainda tentar gravar for¸cado com o comando ‘:wq!’ 1.5 Como interpretar atalhos e comandos A tecla “Ctrl” ´e representada na maioria dos manuais e na ajuda pelo carac- tere “^” circunflexo, ou seja, o atalho Ctrl-L aparecer´a assim: ^L No arquivo de configura¸c˜ao do Vim, um “Enter” pode aparecer como: cr Para saber mais sobre como usar atalhos no Vim veja a se¸c˜ao 12.8 na p´agina 83 e para ler sobre o arquivo de configura¸c˜ao veja o cap´ıtulo 12 na p´agina 79.
  • 15. 1.6 Modos de opera¸c˜ao 5 1.6 Modos de opera¸c˜ao A tabela abaixo mostra uma referˆencia r´apida para os modos de opera¸c˜ao do Vim, a seguir mais detalhes sobre cada um dos modos. Modo Descri¸c˜ao Atalho Normal Para deletar, copiar, formatar, etc Esc Inser¸c˜ao Prioritariamente, digita¸c˜ao de texto i,a,I,A,o,O Visual Sele¸c˜ao de blocos verticais e linhas inteiras V, v, Ctrl-v Comando Uma verdadeira linguagem de programa¸c˜ao Esc: Em oposi¸c˜ao `a esmagadora maioria dos editores o Vim ´e um editor que tra- balha com “modos de opera¸c˜ao (modo de inser¸c˜ao, modo normal, modo visual e etc)”, o que a princ´ıpio dificulta a vida do iniciante, mas abre um universo de possibilidades, pois ao trabalhar com modos distintos uma tecla de atalho pode ter v´arios significados, exemplificando: Em modo normal pressionar ‘dd’ apaga a linha atual, j´a em modo de inser¸c˜ao ele ir´a se comportar como se vocˆe estivesse usando qualquer outro editor, ou seja, ir´a inserir duas vezes a letra ‘d’. Em modo normal pressionar a tecla ‘v’ inicia uma sele¸c˜ao visual (use as setas de dire¸c˜ao). Para sair do novo visual Esc. Como um dos princ´ıpios do vim ´e agilidade pode-se usar ao inv´es de setas (em modo normal) as letras h,l,k,j como se fossem setas: k h l j Imagine as letras acima como teclas de dire¸c˜ao, a letra ‘k’ ´e uma seta acima a letra ‘j’ ´e uma seta abaixo e assim por diante. 1.7 Entrando em modo de edi¸c˜ao Estando no modo normal, digita-se: a .... inicia inser¸c~ao de texto ap´os o caractere atual i .... inicia inser¸c~ao de texto antes do caractere atual A .... inicia inser¸c~ao de texto no final da linha I .... inicia inser¸c~ao de texto no come¸co da linha o .... inicia inser¸c~ao de texto na linha abaixo O .... inicia inser¸c~ao de texto na linha acima Outra possibilidade ´e utilizar a tecla Insert para entrar no modo de inser¸c˜ao de texto antes do caractere atual, ou seja, o mesmo que a tecla i. Uma vez no modo de inser¸c˜ao, a tecla Insert permite alternar o modo de digita¸c˜ao de inser¸c˜ao de simples de caracteres para substitui¸c˜ao de caracteres. Agora come¸camos a sentir o gostinho de usar o Vim, uma tecla seja mai´uscula ou min´uscula, faz muita diferen¸ca se vocˆe n˜ao estiver em modo de inser¸c˜ao, e para sair do modo de inser¸c˜ao e voltar ao modo normal sempre use Esc.
  • 16. 6 Introdu¸c˜ao 1.8 Erros comuns • Estando em modo de inser¸c˜ao pressionar ‘j’ na inten¸c˜ao 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 ´e a jun¸c˜ao das linhas, ali´as um ´otimo recurso quando a inten¸c˜ao ´e de fato esta. • Em modo normal tentar digitar um n´umero seguido de uma palavra e ao perceber que nada est´a sendo digitado, iniciar o modo de inser¸c˜ao, digi- tando por fim o que se queria, o resultado ´e que o n´umero que foi digitado inicialmente vira um quantificador para o que se digitou ao entrar no modo de inser¸c˜ao. A palavra aparecer´a repetida na quantidade do n´umero di- gitado. Assim, se vocˆe quiser digitar 10 vezes “isto ´e um teste” fa¸ca assim: Esc ........... se assegure de estar em modo normal 10 .............. quantificador i ............... entra no modo de inser¸c~ao isto ´e um teste Enter Esc Alguns atalhos ´uteis. . . Ctrl-O ..... comando do modo normal no modo insert i Ctrl-a ... repetir a ´ultima inser¸c~ao @: ......... repetir o ´ultimo comando Shift-insert colar texto da ´area de transfer^encia gi ......... modo de inser¸c~ao no mesmo ponto da ´ultima vez gv ......... repete sele¸c~ao visual Para saber mais sobre repeti¸c˜ao de comandos veja o cap´ıtulo 8, na p´agina 60. No Vim, cada arquivo aberto ´e chamado de buffer, ou seja, dados carregados na mem´oria. Vocˆe pode acessar o mesmo buffer em mais de uma janela, bem como dividir a janela em v´arios buffers distintos o que veremos mais adiante.
  • 17. Cap´ıtulo 2 Editando A principal fun¸c˜ao de um editor de textos ´e editar textos. Parece ´obvio, mas em meio a in´umeros recursos extras essa simples e crucial fun¸c˜ao perde-se entre todos os demais. 2.1 Abrindo o arquivo para a edi¸c˜ao Portanto, a primeira coisa a fazer ´e abrir um arquivo. Como visto, para abrir um arquivo com Vim, digite em um terminal: vim texto.txt onde texto.txt ´e o nome do arquivo que deseja-se criar ou editar. Caso deseje abrir o arquivo na linha 10, usa-se: vim +10 /caminho/para/o/arquivo se quiser abrir o arquivo na linha que cont´em um determinado padr˜ao , digite: vim +/padr~ao arquivo Caso o padr˜ao tenha espa¸cos no nome coloque entre aspas ou use escape “” a fim de n˜ao obter erro. Se o vim for aberto sem indica¸c˜ao de arquivo pode-se indicar o arquivo a ser editado em modo de comando desta forma: :e /home/usuario/arquivo 2.2 Escrevendo o texto O Vim ´e um editor que possu´ı diferentes modos de edi¸c˜ao. Entre eles est´a o modo de inser¸c˜ao, que ´e o modo onde escreve-se o texto naturalmente.
  • 18. 8 Editando Para se entrar em modo de inser¸c˜ao, estando em modo normal, pode-se pressi- onar qualquer uma das teclas abaixo: i ..... entra no modo de inser¸c~ao antes do caractere atual I ..... entra no modo de inser¸c~ao no come¸co da linha a ..... entra no modo de inser¸c~ao ap´os o caractere atual A ..... entra no modo de inser¸c~ao no final da linha o ..... entra no modo de inser¸c~ao uma linha abaixo O ..... entra em modo de inser¸c~ao uma linha cima Esc . sai do modo de inser¸c~ao Uma vez no modo de inser¸c˜ao todas as teclas s˜ao exatamente como nos outros editores simples, caracteres que constituem o conte´udo do texto sendo digitado. O que inclui as teclas de edi¸c˜ao de caracteres. Para salvar o conte´udo escrito, digite a tecla Esc para sair do modo de inser¸c˜ao e digite o comando ‘:w’ para gravar o conte´udo. Caso queira sair do editor, digite o comando: ‘:q’ caso tenha ocorrido modifica¸c˜oes no arquivo desde que ele foi salvo pela ´ultima vez haver´a uma mensagem informando que o documento foi modificado e n˜ao foi salvo, nesse caso, digite o comando ‘:q! para fechar o Vim sem salvar as ´ultimas modifica¸c˜oes feitas. Caso queira salvar e sair do arquivo, digite o comando ‘:wq’ Nesse ponto, conhece-se o vim de forma suficiente para editar qualquer coisa nele. Daqui por diante o que existe s˜ao as formas de realizar a edi¸c˜ao do arquivo com maior naturalidade e produtividade. O usu´ario iniciante do Vim pode cometer o erro de tentar decorar todos os comandos que ser˜ao apresentados. N˜ao fa¸ca isso. Tentar decorar comando ´e exatamente o caminho contr´ario da naturalidade exigida por um editor texto para aumentar a produtividade. Ao contr´ario, sugere-se que leia-se todo o conte´udo. Identifique quais s˜ao as atividades de maior recorrˆencia no estilo individual de escrita e busque como realizar tais fun¸c˜oes com mais fluˆencia nesse editor. A pr´atica levar´a ao uso de fluente desse comandos principais, abrindo espa¸co para os demais comandos. Isso n˜ao impede que o usu´ario experimente cada comando conforme for lendo. De fato, essa pr´atica pode ajudar a selecionar as formas de edi¸c˜ao que lhe s˜ao mais simp´aticas ao uso. 2.3 Copiar, Colar e Deletar :h delete, d No modo normal, o ato de deletar ou eliminar o texto est´a associado `a letra “d”. No modo de inser¸c˜ao as teclas usuais tamb´em funcionam. dd .... deleta linha atual D ..... deleta restante da linha d$ .... deleta do ponto atual at´e o final da linha d^ .... deleta do cursor ao primeiro caractere n~ao-nulo da
  • 19. 2.3 Copiar, Colar e Deletar 9 linha d0 .... deleta do cursor ao in´ıcio da linha Pode-se combinar o comando de dele¸c˜ao “d” com o comando de movimento (considere o modo normal) para apagar at´e a pr´oxima v´ırgula use: “df,”. Copiar est´a associado `a letra “y”. yy .... copia a linha atual Y ..... copia a linha atual ye .... copia do cursor ao fim da palavra yb .... copia do come¸co da palavra ao cursor 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 [p ... cola o que foi copiado ou deletado antes do cursor ]p ... cola o que foi copiado ou deletado ap´os o cursor 2.3.1 Deletando uma parte do texto :h deleting O comando ‘d’ remove o conte´udo para a mem´oria. x .... apaga o caractere sob o cursor xp ... troca letras de lugar ddp .. troca linhas de lugar d5x .. apaga os pr´oximos 5 caracteres dd .. apaga a linha atual 5dd .. apaga 5 linhas (tamb´em pode ser: d5d) d5G .. apaga at´e a linha 5 dw .. apaga uma palavra 5dw .. apaga 5 palavras (tamb´em pode ser: d5w) dl .. apaga uma letra (sin^onimo: x) 5dl .. apaga 5 letras (tamb´em pode ser: d5l ou 5x) d0 .. apaga at´e o in´ıcio da linha d^ .. apaga at´e o primeiro caractere da linha d$ .. apaga at´e o final da linha (sin^onimo: D) dgg .. apaga at´e o in´ıcio do arquivo dG .. apaga at´e o final do arquivo D .... apaga o resto da linha d% ... deleta at´e o pr´oximo (,[,{ da .. deleta aspas com conte´udo Depois do texto ter sido colocado na mem´oria, digite ‘p’ para ‘inserir’ o texto em uma outra posi¸c˜ao. Outros comandos:
  • 20. 10 Editando diw .. apaga palavra mesmo que n~ao esteja posicionado no in´ıcio dip .. apaga o par´agrafo atual d4b .. apaga as quatro palavras anteriores dfx .. apaga at´e o pr´oximo ‘‘x’’ d/casa/+1 - deleta at´e a linha ap´os a palavra casa Trocando a letra ‘d’ nos comandos acima por ‘c’ de change “mudan¸ca” ao inv´es de deletar ser´a feita uma mudan¸ca de conte´udo. Por exemplo: :h change ciw .............. modifica uma palavra cip .............. modifica um par´agrafo cis .............. modifica uma senten¸ca C ................ modifica at´e o final da linha 2.3.2 Copiando sem deletar :h yank O comando ‘y’ (yank) permite copiar uma parte do texto para a mem´oria sem deletar. Existe uma semelhan¸ca muito grande entre os comandos ‘y’ e os coman- dos ‘d’, um ativa a ‘c´opia’ e outro a ‘exclus˜ao’ de conte´udo, suportando ambos quantificadores: yy .... copia a linha atual (sin^onimo: Y) 5yy .... copia 5 linhas (tamb´em pode ser: y5y ou 5Y) y/pat .. copia at´e ‘pat’ yw .... copia uma palavra 5yw .... copia 5 palavras (tamb´em pode ser: y5w) yl .... copia uma letra 5yl .... copia 5 letras (tamb´em pode ser: y5l) y^ .... copia da posi¸c~ao atual at´e o in´ıcio da linha (sin^onimo: y0) y$ .... copia da posi¸c~ao atual at´e o final da linha ygg .... copia da posi¸c~ao atual at´e o in´ıcio do arquivo yG .... copia da posi¸c~ao atual at´e o final do arquivo Digite ‘P’ (p mai´usculo) para colar o texto rec´em copiado na posi¸c˜ao onde encontra-se o cursor, ou ‘p’ para colar o texto na posi¸c˜ao imediatamente ap´os o cursor. yi .... copia trecho entre aspas (atual - inner) vip .... sele¸c~ao visual para par´agrafo atual ‘inner paragraph’ yip .... copia o par´agrafo atual yit .... copia a tag agual ‘inner tag’ ´util para arquivos HTML, XML, etc.
  • 21. 2.4 For¸cando a edi¸c˜ao de um novo arquivo 11 2.3.3 Usando a ´area de transferˆencia Clipboard :h paste, clipboard, quoteplus Exemplos para o modo visual: Ctrl-insert .... copia ´area selecionada Shift-insert ... cola o que est´a no clipboard Ctrl-del ....... recorta para o clipboard Caso obtenhamos erro ao colar textos da ´area de transferˆencia usando os co- mandos acima citados podemos usar outra alternativa. Os comandos abaixo preservam a indenta¸c˜ao1 . +p ............ cola preservando indenta¸c~ao +y ............ copia ´area selecionada Para evitar erros ao colar usando Shift-insert use este comando ‘:set paste’. 2.3.4 Removendo linhas duplicadas :sort u 2.4 For¸cando a edi¸c˜ao de um novo arquivo :h edit! O Vim, como qualquer outro editor, ´e muito exigente no que se refere a altera¸c˜oes de arquivo. Ao tentar abandonar um arquivo editado e n˜ao salvo, o Vim ir´a se certificar da a¸c˜ao. Para abrir um novo arquivo sem salvar o antigo: :enew! O comando acima ´e uma abrevia¸c˜ao de edit new. De modo similar pode-se ignorar todas as altera¸c˜oes feitas desde a abertura do arquivo: :e! 1Espa¸camento entre o come¸co da linha e o in´ıcio do texto
  • 22. 12 Editando 2.5 Ordenando :h sort O Vim, vers˜ao 7 ou superior, passa a ter um comando de ordena¸c˜ao que tamb´em permite a retirada de linhas duplicadas, tal como foi apresentado. :sort u ... ordena e retira linhas duplicadas :sort n ... ordena numericamente Obs: a ordena¸c˜ao num´erica ´e diferente da ordena¸c˜ao alfab´etica se em um trecho contendo algo como: 8 9 10 11 12 Vocˆe tentar fazer: :sort O Vim colocar´a nas trˆes primeiras linhas 10 11 12 Portanto lembre-se que se a ordena¸c˜ao envolver n´umeros use: :sort n Vocˆe pode fazer a ordena¸c˜ao em um intervalo assim: :1,15 sort n O comando acima diz “Ordene numericamente da linha 1 at´e a linha 15”. Po- demos ainda ordenar `a partir de uma coluna: :sort /.*%8v/ ..... ordena `a partir do 8o caractere
  • 23. 2.6 Usando o grep interno do Vim 13 2.6 Usando o grep interno do Vim :h vimgrep, lvimgrep Para editar todos os arquivos que contenham a palavra “inusitada”: :vimgrep /cinusitada/ * a op¸c˜ao ‘c’ torna a busca indiferente a letras mai´usculas e min´usculas. Obs: o Vim busca `a partir do diret´orio atual, para se descobrir o diret´orio atual ou mud´a-lo: :pwd ........... exibe o diret´orio atual :cd /diret´orio muda de diret´orio 2.7 Lista de altera¸c˜oes :h changelist, changes O Vim mant´em uma lista de altera¸c˜oes, veremos agora como usar este recurso. g, ................. avan¸ca na lista de altera¸c~oes g; ................. recua na lista de altera¸c~oes :changes ........... visualiza a lista de altera¸c~oes 2.8 Substituindo tabula¸c˜oes por espa¸cos :h expandtab, retab Se houver necessidade2 de trocar tabula¸c˜oes por espa¸cos fazemos assim: :set expandtab :retab Para fazer o contr´ario usamos algo como: :%s/s{4,}/pressiona-se ctrl-i/g onde Ctrl-i...... insere uma tabula¸c~ao Explicando: 2Em c´odigos Python por exemplo n˜ao se pode misturar espa¸cos e tabula¸c˜oes
  • 24. 14 Editando : ............ comando % ............ em todo arquivo s ............ substitua / ............ padr~ao de busca s ........... localiza espa¸co {4,} ........ quatro vezes / ............ inicio da substitui¸c~ao Ctrl-i ..... pressione Ctrl-i para inserir Tab / ............ fim da substitui¸c~ao g ............ global 2.9 Convertendo para mai´usculas :h case gUU ....... converte a linha para mai´usculo guu ....... converte a linha para min´usculo gUiw ...... converte a palavra atual para mai´usculo ~ ......... altera o case do caractere atual 2.10 Editando em modo de comando :h put, move, global, holy-grail Para mover um trecho usando o modo de comandos fa¸ca: :10,20m $ O comando acima move ‘m’ da linha 10 at´e a linha 20 para o final $. :g /palavra/ m 0 Move as linhas contendo ‘palavra’ para o come¸co (linha zero) :10,20y a Copia da linha ‘10’ at´e a linha ‘20’ para o registro ‘a’ :56pu a Cola o registro ‘a’ na linha 56 :g/padr~ao/d O comando acima deleta todas as linhas contendo a palavra ‘padr˜ao’. Podemos inverter a l´ogica do comando global g:
  • 25. 2.11 O arquivo alternativo 15 :g!/padr~ao/d N˜ao delete as linhas contendo padr˜ao, ou seja, delete tudo menos as linhas contendo a palavra ‘padr˜ao’. :v/padr~ao/d ........ apaga linhas que n~ao contenham padr~ao :v/S/d ............ apaga linhas vazias S ................. significa string A op¸c˜ao acima equivale a “:g!/padr~ao/d”. Para ler mais sobre o comando “global” utilizado nesta se¸c˜ao veja o cap´ıtulo 6.13. :7,10copy $ Da linha 7 at´e a linha 10 copie para o final. Veja mais sobre edi¸c˜ao no modo de comando na se¸c˜ao “6 Buscas e substitui¸c˜oes na p´agina 42”. Gerando sequˆencias Para inserir uma sequˆencia de 1 a 10 `a partir da linha inicial “zero” fazemos: :0put =range(1,10) Caso queira inserir sequˆencias como esta: 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 Usamos este comando: :for i in range(1,5) | .put =’192.168.0.’.i | endfor 2.11 O arquivo alternativo :h Ctrl-6, alternate-file ´E muito comum um usu´ario concluir a edi¸c˜ao em um arquivo no Vim e ino- centemente imaginar que n˜ao vai mais modificar qualquer coisa nele, ent˜ao este usu´ario abre um novo arquivo: :e novo-arquivo.txt Mas de repente o usu´ario lembra que seria necess´ario adicionar uma linha no arquivo rec´em editado, neste caso usa-se o atalho
  • 26. 16 Editando Ctrl-6 cuja fun¸c˜ao ´e alternar entre o arquivo atual e o ´ultimo editado. Para retornar ao outro arquivo basta portanto pressionar Ctrl-6 novamente. Pode-se abrir o arquivo alternativo em nova janela usando-se o atalho: Ctrl-w Ctrl-6 Mais informa¸c˜oes sobre “janelas” leia a se¸c˜ao 7 na p´agina 57. 2.12 Lendo um arquivo para a linha atual :h :r[ead] Se desejamos inserir na linha atual um arquivo qualquer fazemos: :r /caminho/para/arquivo.txt .. insere o arquivo na linha atual :0r arquivo ................... insere o arquivo na primeira linha 2.13 Incrementando n´umeros em modo normal :h Ctrl-a, Ctrl-x Posicione o cursor sobre um n´umero e pressione Ctrl-a ..... incrementa o n´umero Ctrl-x ..... decrementa o n´umero 2.14 Repetindo a digita¸c˜ao de linhas atalhos para o modo insert Ctrl-y ......... repete linha acima Ctrl-e ......... repete linha abaixo Ctrl-x Ctrl-l .. repete linhas inteiras Ctrl-a ......... repete a ´ultima inser¸c~ao Para saber mais sobre repeti¸c˜ao de comandos veja o cap´ıtulo 8, na p´agina 60. 2.15 Movendo um trecho de forma inusitada :20,30m 0 ..... move da linha ‘20’ at´e ‘30’ para o come¸co :20,/pat/m 5 .. move da linha ‘20’ at´e ‘pat’ para a linha 5 :m-5 .......... move a linha atual 5 posi¸c~oes acima :m0 ........... move a linha atual para o come¸co :m$ ........... move para o final do documento
  • 27. 2.16 Uma calculadora diferente 17 2.16 Uma calculadora diferente Sempre que for necess´ario digitar o resultado de uma express˜ao matem´atica (portanto no modo de inser¸c˜ao) pode-se usar o atalho “Ctrl-r =”, ele ativa o registro de express˜oes, na linha de comando do Vim aparece um sinal de igual, digita-se ent˜ao uma express˜ao matem´atica qualquer tipo “35*6” e em seguida pressiona-se “Enter”, o Vim coloca ent˜ao o resultado da express˜ao no lugar desejado. Portanto n˜ao precisa-se recorrer a nenhuma calculadora para fazer c´alculos. Pode-se fazer uso do “Registro de Express˜oes” dentro de macros, ou seja, ao gravar a¸c˜oes pode-se fazer uso deste recurso, aumentando assim sua complexidade e poder! Para ler sobre “macros” acesse a se¸c˜ao 8.3 na 62. Para saber mais sobre o “registro de express˜oes” leia a se¸c˜ao 5.6 na p´agina 35. Na se¸c˜ao 9.9 “Calculadora Cient´ıfica com o vim” p´agina 69 h´a uma descri¸c˜ao sobre como fazer c´alculos com maior precis˜ao e complexidade. Se a inten¸c˜ao for apenas exibir um calculo na barra de comandos ´e poss´ıvel fazer algo assim: :echo 5.2 * 3 2.17 Desfazendo :h undo Se vocˆe cometer um erro, n˜ao se preocupe! Use o comando ‘u’: u ............ desfazer U ............ desfaz mudan¸cas na ´ultima linha editada Ctrl-r ...... refazer 2.17.1 Undo tree Um novo recurso muito interessante foi adicionado ao Vim“a partir da vers˜ao 7” ´e a chamada ´arvore do desfazer. Se vocˆe desfaz alguma coisa, fez uma altera¸c˜ao um novo branch ou galho, deriva¸c˜ao de altera¸c˜ao ´e criado. Basicamente, os branches nos permitem acessar quaisquer altera¸c˜oes ocorridas no arquivo. Um exemplo did´atico Siga estes passos (para cada passo Esc, ou seja, saia do modo de inser¸c˜ao) Passo 1 - digite na linha 1 o seguinte texto # controle de fluxo Esc Passo 2 - digite na linha 2 o seguinte texto
  • 28. 18 Editando # um la¸co 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ˆe voltar´a ao passo 1) Passo 5 - Na linha 2 digite # operador tern´ario Esc Passo 6 - na linha 3 digite var = (1 if teste == 0 else 2) Esc Obs: A necessidade do Esc ´e para demarcar as a¸c˜oes, pois o Vim considera cada inser¸c˜ao uma a¸c˜ao. Agora usando o atalho de desfazer tradicional “u” e de refazer Ctrl-r observe que n˜ao ´e mais poss´ıvel acessar todas as altera¸c˜oes efetu- adas. Em resumo, se vocˆe fizer uma nova altera¸c˜ao ap´os um desfazer (altera¸c˜ao derivada) o comando refazer n˜ao mais vai ser poss´ıvel para aquele momento. Agora volte at´e a altera¸c˜ao 1 e use seguidas vezes: g+ e/ou g- Dessa forma vocˆe acessar´a todas as altera¸c˜oes ocorridas no texto. 2.17.2 M´aquina do tempo O Vim possui muitas formas para desfazer e refazer, e uma das mais interessantes ´e a m´aquina do tempo! A m´aquina do tempo ´e extremamente ´util quando no meio de um texto se percebe que boa parte do que foi adicionado ´e in´util e que nos ultimos 10 minutos n˜ao h´a nada que se possa aproveitar. Utilizando a m´aquina do tempo ´e poss´ıvel eliminar os ´ultimos 10 minutos de texto in´util do seu documento facilmente, utilizando: :earlier 10m Com esse comando o documento ficar´a exatamente como ele estava 10 minutos atr´as! Caso ap´os a exclus˜ao perceba-se que foi exclu´ıdo um minuto a mais, ´e poss´ıvel utilizar o mesmo padr˜ao novamente para avan¸car no tempo:
  • 29. 2.18 Salvando 19 :later 60s Note que dessa vez foi utilizado later ao inv´es de earlier, e passando segundos como argumento para viajar no tempo. Portanto o comando acima avan¸ca 60 segundos no tempo. Para uma melhor vis˜ao de quanto se deve voltar, pode ser usado o comando: :undolist O comando acima mostra a lista com as informa¸c˜oes sobre Desfazer e Refazer. E com essas informa¸c˜oes pode-se voltar no tempo seguindo cada modifica¸c˜ao: :undo 3 Esse comando far´a o documento regredir 3 modifica¸c˜oes. 2.18 Salvando :h writing A maneira mais simples de salvar um arquivo, ´e usar o comando: :w Para especificar um novo nome para o arquivo, simplesmente digite: :w! ‘‘file’’ O conte´udo ser´a gravado no arquivo“file”e vocˆe continuar´a no arquivo original. Tamb´em existe o comando :sav[eas] nome salva o arquivo com um novo nome e muda para esse novo arquivo (o arquivo original n˜ao ´e apagado). Para sair do editor, salvando o arquivo atual, digite :x (ou :wq). :w ............................ salva :wq .......................... salva e sai :w nome ....................... salvar como :saveas nome .................. salvar como :sav nome ..................... mesmo que saveas nome :x ............................ salva se existirem modifica¸c~oes :10,20 w! ~/Desktop/teste.txt . salva um trecho para outro arquivo :w! ........................... salvamento for¸cado :e! ........................... reinicia a edi¸c~ao ignorando altera¸c~oes
  • 30. 20 Editando 2.19 Abrindo o ´ultimo arquivo rapidamente O Vim guarda um registro para cada arquivo editado veja mais no cap´ıtulo 5 na p´agina 33. ’0 ........ abre o ´ultimo arquivo editado ’1 ........ abre o pen´ultimo arquivo editado Ctrl-6 .... abre o arquivo alternativo (booleano) Bom, j´a que abrimos o nosso ´ultimo arquivo editado com o comando ‘0 podemos, e provavelmente o faremos, editar no mesmo ponto em que est´avamos editando da ´ultima vez: gi Pode-se criar um ‘alias’3 para que ao abrir o vim o mesmo abra o ´ultimo ar- quivo editado: ‘alias lvim=vim -c normal ’0’. No cap´ıtulo 6 p´agina 42 vocˆe encontra mais dicas de edi¸c˜ao. 2.20 Modelines :h modeline S˜ao um modo de guardar preferˆencias no pr´oprio arquivo, suas preferˆencias viajam literalmente junto com o arquivo, basta usar em uma das 5 primeiras linhas ou na ´ultima linha do arquivo algo como: # vim:ft=sh: OBS: Vocˆe deve colocar um espa¸co entre a palavra ‘vim’ e a primeira coluna, ou seja, a palavra ‘vim’ deve vir precedida de um espa¸co, da´ı em diante cada op¸c˜ao fica assim: :op¸c~ao: Por exemplo: posso salvar um arquivo com extens˜ao .sh e dentro do mesmo indicar no modeline algo como: # vim:ft=txt:nu: Apesar de usar a extens˜ao ‘sh’ o Vim reconhecer´a este arquivo como ‘txt’, e caso eu n˜ao tenha habilitado a numera¸c˜ao, ainda assim o Vim usar´a por causa da op¸c˜ao ‘nu’. Portanto o uso de modelines pode ser um grande recurso para o seu dia-a-dia pois vocˆe pode coloca-las dentro dos coment´arios! 3Abrevia¸c˜ao para um comando do GNU/Linux
  • 31. 2.21 Edi¸c˜ao avan¸cada de linhas 21 2.21 Edi¸c˜ao avan¸cada de linhas Seja o seguinte texto: 1 este ´e um texto novo 2 este ´e um texto novo 3 este ´e um texto novo 4 este ´e um texto novo 5 este ´e um texto novo 6 este ´e um texto novo 7 este ´e um texto novo 8 este ´e um texto novo 9 este ´e um texto novo 10 este ´e um texto novo Suponha que queira-se apagar “´e um texto” da linha 5 at´e o fim (linha 10). Isto pode ser feito assim: :5,$ normal 0wd3w Explicando o comando acima: :5,$ .... indica o intervalo que ´e da linha 5 at´e o fim ‘$’ normal .. executa em modo normal 0 ....... move o cursor para o come¸co da linha w ....... pula uma palavra d3w ..... apaga 3 palavras ‘w’ Obs: ´E claro que um comando de substitui¸c˜ao simples :5,$s/´e um texto//g Resolveria neste caso, mas a vantagem do m´etodo anterior ´e que ´e v´alido para trˆes palavras, sejam quais forem. Tamb´em ´e poss´ıvel empregar comandos de inser¸c˜ao como ‘i’ ou ‘a’ e retornar ao modo normal, bastando para isso usar o recurso Ctrl-v Esc, de forma a simular o acionamento da tecla Esc (sa´ıda do modo de inser¸c˜ao). Por exemplo, suponha agora que deseja-se mudar a frase “este ´e um texto novo” para “este n˜ao ´e um texto velho”; pode ser feito assim: :5,$ normal 02win~ao ^[$ciwvelho Decompondo o comando acima temos: :5,$ .... indica o intervalo que ´e da linha 5 at´e o fim ‘$’ normal .. executa em modo normal 0 ....... move o cursor para o come¸co da linha 2w ...... pula duas palavras (vai para a palavra ´e)
  • 32. 22 Editando i ....... entra no modo de inser¸c~ao n~ao .... insere a palavra n~ao seguida de espa¸co ^[ ...... sai do modo de inser¸c~ao (atrav´es de Ctrl-v seguido de Esc) $ ....... vai para o fim da linha ciw ..... apaga a ´ultima palavra (novo) e entra em modo de inser¸c~ao velho ... insere a palavra velho no lugar de novo A combina¸c˜ao Ctrl-v ´e utilizada para inserir caracteres de controle na sua forma literal, prevenindo-se assim a interpreta¸c˜ao destes neste exato momento. 2.22 Comentando rapidamente um trecho Tomando como exemplo um trecho de c´odigo como abaixo: 1 input{capitulo1} 2 input{capitulo2} 3 input{capitulo3} 4 input{capitulo4} 5 input{capitulo5} 6 input{capitulo6} 7 input{capitulo7} 8 input{capitulo8} 9 input{capitulo9} Se desejamos comentar da linha 4 at´e a linha 9 podemos fazer: posicionar o cursor no come¸co da linha 4 Ctrl-v ........... inicia sele¸c~ao por blocos 5j ............... estende a sele¸c~ao at´e o fim Shift-i .......... inicia inser¸c~ao no come¸co da linha % ................ insere coment´ario (LaTeX) Esc .............. sai do modo de inser¸c~ao 2.23 Comparando arquivos com o vimdiff :h diff O vim possui um modo para checagem de diferen¸cas entre arquivos, ´e bastante ´util especialmente para programadores, para saber quais s˜ao as diferen¸cas entre dois arquivos faz-se: vimdiff arquivo1.txt arquivo2.txt .. exibe as diferen¸cas ]c ................................. mostra pr´oxima diferen¸ca vim -d ............................. outro modo de abrir o vimdiff mode
  • 33. 2.23 Comparando arquivos com o vimdiff 23 Para usu´arios do GNU/Linux ´e poss´ıvel ainda checar diferen¸cas remotamente assim: vimdiff projeto scp://usuario@estacao//caminho/projeto O comando acima ir´a exibir lado a lado o arquivo local chamado ‘projeto’ e o arquivo remoto contido no computador de nome ‘estacao’ de mesmo nome.
  • 34. Cap´ıtulo 3 Movendo-se no Documento :h motion.txt A fim de facilitar o entendimento acerca das teclas e atalhos de movimenta¸c˜ao, faz-se ´util uma breve recapitula¸c˜ao de conceitos relacionados. Para se entrar em modo de inser¸c˜ao, estando em modo normal, pode-se pressionar qualquer uma das teclas abaixo: i ..... entra no modo de inser¸c~ao antes do caractere atual I ..... entra no modo de inser¸c~ao no come¸co da linha a ..... entra no modo de inser¸c~ao ap´os o caractere atual A ..... entra no modo de inser¸c~ao no final da linha o ..... entra no modo de inser¸c~ao uma linha abaixo O ..... entra em modo de inser¸c~ao uma linha cima Esc . sai do modo de inser¸c~ao Uma vez no modo de inser¸c˜ao todas as teclas s˜ao exatamente como nos outros editores simples, caracteres que constituem o conte´udo do texto sendo digitado. Para sair do modo de inser¸c˜ao e retornar ao modo normal digita-se Esc ou Ctrl-[. As letras h, k, l, j funcionam como setas: k h l j ou seja, a letra ‘k’ ´e 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 ideia ´e que se consiga ir para qualquer lugar do texto sem tirar as m˜aos do teclado, sendo portanto alternativas para as setas de movimenta¸c˜ao usuais do teclado. Ao inv´es de manter os quatro dedos sobre H, J, K e L, ´e aconselh´avel manter o padr˜ao de digita¸c˜ao com o indicador da m˜ao esquerda sobre a tecla F e o da m˜ao direita sobre a letra J, sendo que seu indicador da m˜ao direita vai alternar entre a tecla J e H para a movimenta¸c˜ao. Para ir para linhas espec´ıficas ‘em modo normal’ digite:
  • 35. 25 :nEnter ..... vai para linha ‘n’ ngg ............ vai para linha ‘n’ nG ............. vai para linha ‘n’ onde “n” corresponde ao n´umero da linha. Para retornar ao modo normal pres- sione Esc ou use Ctrl-[ (^[). No vim ´e poss´ıvel realizar diversos tipos de movimentos, tamb´em conhecidos como saltos no documento. A lista abaixo aponta o comandos de salto t´ıpicos. gg .... vai para o in´ıcio do arquivo G ..... vai para o final do arquivo 0 ..... vai para o in´ıcio da linha ^ ..... vai para o primeiro caractere da linha (ignora espa¸cos) $ ..... vai para o final da linha 25gg .. salta para a linha 25 ’’ .... salta para a linha da ´ultima posi¸c~ao em que o cursor estava fx .... para primeira ocorr^encia de x tx .... Para ir para uma letra antes de x Fx .... Para ir para ocorr^encia anterior de x Tx .... Para ir para uma letra ap´os o ´ultimo x * ..... Pr´oxima ocorr^encia de palavra sob o cursor ‘’ .... salta exatamente para a posi¸c~ao em que o cursor estava gd .... salta para declara¸c~ao de vari´avel sob o cursor gD .... salta para declara¸c~ao (global) de vari´avel sob o cursor w ..... move para o in´ıcio da pr´oxima palavra W ..... pula para pr´oxima palavra (desconsidera h´ıfens) E ..... pula para o final da pr´oxima palavra (desconsidera hifens) e ..... move o cursor para o final da pr´oxima palavra zt .... movo o cursor para o topo da p´agina zm .... move o cursor para o meio da p´agina zz .... move a p´agina de modo com que o cursor fique no centro n ..... move o cursor para a pr´oxima ocorr^encia da busca N ..... move o cursor para a ocorr^encia anterior da busca Tamb´em ´e poss´ıvel efetuar saltos e fazer algo mais ao mesmo tempo, a lista abaixo aponta algumas dessas possibilidades. gv .... repete a ´ultima sele¸c~ao visual e posiciona o cursor neste local % ..... localiza par^enteses correspondente o ..... letra ‘o’, alterna extremos de sele¸c~ao visual yG .... copia da linha atual at´e o final do arquivo d$ .... deleta do ponto atual at´e o final da linha
  • 36. 26 Movendo-se no Documento gi .... entra em modo de inser¸c~ao no ponto da ´ultima edi¸c~ao gf .... abre o arquivo sob o cursor Para o Vim “palavras-separadas-por-h´ıfen” s˜ao consideradas em separado, por- tanto se vocˆe usar, em modo normal “w” para avan¸car entre as palavras ele pular´a uma de cada vez, no entanto se usar “W” em mai´usculo (como visto) ele pular´a a “a-palavra-inteira” :) E .... pula para o final de palavras com hifen B .... pula palavras com hifen (retrocede) W .... pula palavras hifenizadas (come¸co) Podemos pular senten¸cas: ) .... pula uma senten¸ca para frente ( .... pula uma senten¸ca para tr´as } .... pula um par´agrafo para frente { .... pula um par´agrafo para tr´as y) ... copia uma senten¸ca para frente d} ... deleta um par´agrafo para frente Caso tenha uma estrutura como abaixo: def pot(x): return x**2 E tiver uma referˆencia qualquer para a fun¸c˜ao pot e desejar mover o cursor at´e sua defini¸c˜ao basta posicionar o cursor sobre a palavra pot e pressionar (em modo normal): gd Se a vari´avel for global, ou seja, estiver fora do documento (provavelmente em outro) use: gD Quando definimos uma vari´avel tipo var = ‘teste’ e em algum ponto do documento houver referˆencia a esta vari´avel e se desejar ver seu conte´udo fazemos [i
  • 37. 27 Na verdade o atalho acima lhe mostrar´a o ´ultimo ponto onde foi feita a atribui¸c˜ao `aquela vari´avel que est´a sob o cursor, uma m˜ao na roda para os programadores de plant˜ao! Observe a barra de status do Vim se o tipo de arquivo est´a certo, tipo. Para detalhes sobre como personalizar a barra de status na se¸c˜ao 12.10.2. ft=python a busca por defini¸c˜oes de fun¸c˜ao s´o funciona se o tipo de arquivo estiver correto :set ft=python Um mapeamento interessante que facilita a movimenta¸c˜ao at´e linahas que contenham determinada palavra de um modo bem simples, bastando pressionar ,f pode ser feito assim: map ,f [I:let nr = input(Which one: )Barexe normal . nr .[tCR Uma vez definido o mapeamento acima e pressionando-se o atalho associado, que neste caso ´e ,f o vim exibir´a as uma opp¸c˜ao para pular para as ocorrˆencias da palavra assim: 1: trecho contendo a palavra 2: outro trecho contendo a palavra Which one: outro detalhe para voltar ao ´ultimo ponto em que vocˆe estava ’’ A maioria dos comandos do Vim pode ser precedida por um quantificador: 5j ..... desce 5 linhas d5j .... deleta as pr´oximas 5 linhas k ...... em modo normal sobe uma linha 5k ..... sobe 5 linhas y5k .... copia 5 linhas (para cima) w ...... pula uma palavra para frente 5w ..... pula 5 palavras d5w .... deleta 5 palavras b ...... retrocede uma palavra 5b ..... retrocede 5 palavras fx ..... posiciona o cursor em ‘‘x’’ dfx .... deleta at´e o pr´oximo ‘‘x’’ dgg .... deleta da linha atual at´e o come¸co do arquivo dG ..... deleta at´e o final do arquivo yG ..... copia at´e o final do arquivo yfx .... copia at´e o pr´oximo ‘‘x’’ y5j .... copia 5 linhas
  • 38. 28 Movendo-se no Documento 3.1 Paginando Para rolar uma p´agina 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 posi¸c~ao mais recente Ctrl-o ... salta para a posi¸c~ao mais antiga ’0 ....... abre o ´ultimo arquivo editado ’1 ....... abre o pen´ultimo arquivo editado gd ....... pula para a defini¸c~ao de uma vari´avel } ........ pula para o fim do par´agrafo 10| ...... pula para a coluna 10 [i ....... pula para defini¸c~ao de vari´avel sob o cursor Observa¸c˜ao: lembre-se ^ .... equivale a Ctrl ^I ... equivale a Ctrl-I ´E poss´ıvel abrir v´arios arquivos tipo vim *.txt. Editar algum arquivo, salvar e ir para o pr´oximo arquivo com o comando `a seguir: :wn Ou voltar ao arquivo anterior :wp ´E poss´ıvel ainda “rebobinar” sua lista de arquivos. :rew[wind] Ir para o primeiro :fir[st] Ou para o ´ultimo :la[st]
  • 39. 3.2 Usando marcas 29 3.2 Usando marcas :h mark-motions As marcas s˜ao um meio eficiente de se pular para um local no arquivo. Para criar uma, estando em modo normal faz-se: ma Onde ‘m’ indica a cria¸c˜ao de uma marca e ‘a’ ´e o nome da marca. Para pular para a marca ‘a’: ‘a Para voltar ao ponto do ´ultimo salto: ’’ Para deletar de at´e a marca ‘a’ (em modo normal): d’a 3.2.1 Marcas globais Durante a edi¸c˜ao de v´arios arquivos pode-se definir uma marca global com o comando: mA Onde ‘m’ cria a marca e ‘A’ (mai´usculo) define uma marca ‘A’ acess´ıvel a qualquer momento com o comando: ’A Isto far´a o Vim dar um salto at´e a marca ‘A’ mesmo que esteja em outro arquivo, mesmo que vocˆe tenha acabado de fecha-lo. Para abrir e editar v´arios arquivos do Vim fazemos: vim *.txt ......... abre todos os arquivos ‘txt’ :bn ............... vai para o pr´oximo da lista :bp ............... volta para o arquivo anterior :ls ............... lista todos os arquivos abertos :wn ............... salva e vai para o pr´oximo :wp ............... salva e vai para o pr´evio
  • 40. Cap´ıtulo 4 Folders Folders s˜ao 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 visualiza¸c˜ao completa do texto. Um modo de entender rapidamente como funcionam as dobras no Vim seria criando uma “dobra” para as pr´oximas 10 (dez) linhas com o comando abaixo: zf10j Vocˆe pode ainda criar uma sele¸c˜ao visual Shift-v ............ sele¸c~ao por linha j .................. desce linha zf ................. cria o folder zo ................. abre o folder 4.1 M´etodos de dobras O Vim tem seis modos fold, s˜ao eles: • Sintaxe (syntax) • Identa¸c˜ao (indent) • Marcas (marker) • Manual (manual) • Diferen¸cas (diff) • Express˜oes Regulares (expr)
  • 41. 4.2 Manipulando dobras 31 Para determinar o tipo de dobra fa¸ca :set foldmethod=tipo onde o tipo pode ser um dos tipos listados acima, exemplo: :set foldmethod=marker Outro modo para determinar o m´etodo de dobra seria colocando na ´ultima linha do seu arquivo algo assim: vim:fdm=marker:fdl=0: Obs: fdm significa foldmethod, e fdl significa foldlevel. Deve haver um espa¸co entre a palavra inicial“vim”e o come¸co da linha este recurso chama-se modeline, leia mais na se¸c˜ao “2.20 modelines” na p´agina 20. 4.2 Manipulando dobras Os principais comandos relativos ao uso de dobras s˜ao: zo ................ abre a dobra zO ................ abre a dobra, recursivamente za ................ abre/fecha (alterna) a dobra zA ................ abre/fecha (alterna) a dobra, recursivamente zR ................ abre todas as dobras do arquivo atual zM ................ fecha todas as dobras do arquivo atual zc ................ fecha uma dobra zC ................ fecha a dobra abaixo do cursor, recursivamente zfap .............. cria uma dobra para o par´agrafo ‘ap’ atual zf/casa ........... cria uma dobra at´e a palavra casa zf’a .............. cria uma dobra at´e a marca ‘a’ zd ................ apaga a dobra (n~ao o seu conte´udo) zj ................ move para o in´ıcio da pr´oxima dobra zk ................ move para o final da dobra anterior [z ................ move o cursor para in´ıcio da dobra aberta ]z ................ move o cursor para o fim da dobra aberta zi ................ desabilita ou habilita as dobras zm, zr ............ diminui/aumenta n´ıvel da dobra ‘fdl’ :set fdl=0 ........ n´ıvel da dobra 0 (foldlevel) :set foldcolumn=4 . mostra uma coluna ao lado da numera¸c~ao Para abrir e fechar as dobras usando a barra de espa¸cos coloque o trecho abaixo no seu arquivo de configura¸c˜ao do Vim (.vimrc) - veja o cap´ıtulo 12, p´agina 79.
  • 42. 32 Folders nnoremap space @=((foldclosed(line(.)) 0) ? ’zc’ : ’zo’)CR A barra, , nesse comando representa o particionamento do comando em mais de uma linha. Para abrir e fechar as dobras utilizando o clique do mouse no gvim, basta acres- centar na configura¸c˜ao do seu .vimrc: set foldcolumn=2 o que adiciona uma coluna ao lado da coluna de enumera¸c˜ao das linhas. 4.3 Criando dobras usando o modo visual Para iniciar a sele¸c˜ao visual Esc ........ vai para o modo normal shift-v .... inicia sele¸c~ao visual j .......... aumenta a sele¸c~ao visual (desce) zf ......... cria a dobra na sele¸c~ao ativa Um modo inusitado de se criar dobras ´e: Shift-v ..... inicia sele¸c~ao visual /chapter/-2 . extende a sele¸c~ao at´e /chapter -2 linhas zf .......... cria a dobra
  • 43. Cap´ıtulo 5 Registros O Vim possui nove tipos de registros, cada tipo tem uma utilidade espec´ıfica, por exemplo vocˆe pode usar um registro que guarda o ´ultimo comando digitado, pode ainda imprimir dentro do texto o nome do pr´oprio arquivo, armazenar por¸c˜oes distintas de texto (´area de transferˆencia m´ultipla) etc. Vamos aos detalhes. • O registro sem nome “” • 10 registros nomeados de “9” • O registro de pequenas dele¸c˜oes - • 26 registros nomeados de “z” ou de “Z” • 4 registros somente leitura • O registro de express˜oes ”= • Os registro de sele¸c˜ao e ”*, ”+ and ” • O registro “o” • Registro do ´ultimo padr˜ao de busca ”/ 5.1 O registro sem nome “” Armazena o conte´udo de a¸c˜oes como: d ....... dele¸c~ao s ....... substitui¸c~ao c ....... modifica¸c~ao ‘change’ x ....... apaga um caractere yy ...... copia uma linha inteira Para acessar o conte´udo deste registro basta usar as letras “p” ou “P” que na verdade s˜ao comandos para colar abaixo da linha atual e acima da linha atual (em modo normal).
  • 44. 34 Registros 5.2 Registros nomeados de 0 a 9 :h registers O registro zero armazena o conte´udo da ´ultima c´opia ‘yy’, `a partir do registro 1 v˜ao sendo armazenadas as dele¸c˜oes sucessivas de modo que a mais recente dele¸c˜ao ser´a armazenada no registro 1 e os registros v˜ao sendo incrementados em dire¸c˜ao ao nono. Dele¸c˜ao menores que uma linha n˜ao s˜ao armazenadas nestes registros, caso em que o Vim usa o registro de pequenas dele¸c˜oes ou que se tenha especificado algum outro registro. 5.3 Registro de pequenas dele¸c˜oes - Quando se deleta algo menor que uma linha o Vim armazena os dados deletados neste registro. 5.4 Registros nomeados de “a at´e z” ou “A at´e Z” Pode-se armazenar uma linha em modo normal assim: ayy Desse modo o Vim guarda o conte´udo da linha no registro ‘a’ caso queira arma- zenar mais uma linha no registro ‘a’ use este comando: Add Neste caso a linha corrente ´e apagada ‘dd’ e adicionada ao final do registro “a”. ayip .. copia o par´agrafo atual para o registro ‘‘a’’ a ..... registro a y ...... yank (copia) ip ..... inner paragraph (este par´agrafo) 5.5 Registros somente leitura “: . % #” : ..... armazena o ´ultimo comando . ..... armazena uma c´opia do ´ultimo texto inserido % ..... cont´em o nome do arquivo corrente # ..... cont´em o nome do arquivo alternativo Uma forma pr´atica de usar registros em modo de inser¸c˜ao ´e usando: Ctrl-r
  • 45. 5.6 Registro de express˜oes ”= 35 Ctrl-r % .... insere o nome do arquivo atual Ctrl-r : .... insere o ´ultimo comando digitado Ctrl-r / .... insere a ´ultima busca efetuada Ctrl-r a .... insere o registro ‘a’ Em modo de inser¸c˜ao pode-se repetir a ´ultima inser¸c˜ao de texto simplesmente pressionando: Ctrl-a 5.6 Registro de express˜oes ”= = O registro de express˜oes permite efetuar c´alculos diretamente no editor, usando o atalho“Ctrl-r =”no modo de inser¸c˜ao, o editor mostrar´a um sinal de igualdade na barra de status e o usu´ario digita ent˜ao uma express˜ao matem´atica como uma multiplica¸c˜ao “6*9” e em seguida pressiona Enter para que o editor finalize a opera¸c˜ao. Veja um v´ıdeo demonstrando sua utiliza¸c˜ao neste link [2]. Para entender melhor como funciona o registro de express˜oes tomemos um exem- plo. Para fazer uma sequˆencia como abaixo: linha 1 tem o valor 150, linha 2 tem o valor 300, linha 3 tem o valor 450, ... Acompanhe os passos para a cria¸c˜ao de uma macro permite fazer uma sequˆencia de quantas linhas forem necess´arias com o incremento proposto acima. Esc ......... sai do modo de inser¸c~ao qa ............. inicia a macro yy ............. copia a primeira linha p .............. cola a linha copiada w .............. pula para o n´umero ‘1’ Ctrl-a ....... incrementa o n´umero (agora 2) 4w ............. avan¸ca 4 palavras at´e 150 ndw ........... apaga o ‘150’ para o registro n a .............. entra em modo de inser¸c~ao Ctrl-r = ....... abre o registro de express~oes Ctrl-r n + 150 insere dentro do registro de express~oes o registro n Enter ........ executa o registro de express~oes Esc ........... sai do modo de inser¸c~ao 0 ............... vai para o come¸co da linha q ............... para a grava¸c~ao da macro
  • 46. 36 Registros Agora posicione o cursor no come¸co da linha e pressione “10@a”. Na se¸c˜ao 12.8.6 p´agina 86 h´a mais dicas sobre o uso do registro de express˜oes c´alculos matem´aticos. 5.7 Registros de arrastar e mover O registro * ´e respons´avel por armazenar o ´ultimo texto selecionado (p.e., atrav´es do mouse). J´a o registro + ´e o denominado“´area de transferˆencia”, normalmente utilizado para se transferir conte´udos entre aplica¸c˜oes—este registro ´e preenchido, por exemplo, usando-se a t´ıpica combina¸c˜ao Ctrl-v encontrada em muitas aplica¸c˜oes. Finalmente, o registro ~ armazena o texto colado pela opera¸c˜ao mais recente de“arrastar-e-soltar”(drag- and-drop). 5.8 Registro buraco negro ” Use este registro quando n˜ao quiser alterar os demais registros, por exemplo: se vocˆe deletar a linha atual, dd Esta a¸c˜ao ir´a colocar a linha atual no registro numerado 1, caso n˜ao queira alterar o conte´udo do registro 1 apague para o buraco negro assim: _dd 5.9 Registros de buscas “/” Se desejar inserir em uma substitui¸c˜ao uma busca pr´evia, vocˆe poderia fazer assim em modo de comandos: :%s,Ctrl-r/,novo-texto,g
  • 47. 5.10 Manipulando registros 37 Observa¸c˜ao: veja que estou trocando o delimitador da busca para deixar claro o uso do registro de buscas “/”. Pode-se usar um registro nomeado de ‘a-z’ assim: let @a=new :%s/old/=@a/g ...... substitui ’old’ por new =@a ................ faz refer^encia ao registro ‘a’ 5.10 Manipulando registros :let @a=@_ ... limpa o registro a :let @a=‘‘’’ ... limpa o registro a :let @a=@ ... salva registro sem nome *N* :let @*=@a ... copia o registro para o buffer de colagem :let @*=@: ... copia o ultimo comando para o buffer de colagem :let @*=@/ ... copia a ´ultima busca para o buffer de colagem :let @*=@% ... copia o nome do arquivo para o buffer de colagem :reg ... mostra o conte´udo de todos os registros Em modo de inser¸c˜ao C-R- ....... Insere o registro de pequenas dele¸c~oes C-R[0-9a-z] .. Insere registros 0-9 e a-z C-R% .. Insere o nome do arquivo C-R=somevar .. Insere o conte´udo de uma vari´avel C-RC-A ..... Insere ‘Big-Words’ veja se¸c~ao 2.1 Um exemplo: pr´e-carregando o nome do arquivo no registro n. coloque em seu ~/.vimrc let @n=@% Como foi atribu´ıdo ao registro n o conte´udo de @%, ou seja, o nome do arquivo, vocˆe pode fazer algo assim em modo de inser¸c˜ao: Ctrl-r n E o nome do arquivo ser´a inserido 5.11 Listando os registros atuais Digitando o comando
  • 48. 38 Registros :reg ou ainda :ls O Vim mostrar´a os registros numerados e nomeados atualmente em uso 5.12 Listando arquivos abertos Suponha que vocˆe abriu v´arios arquivos txt assim: vim *.txt Para listar os arquivos aberto fa¸ca: :buffers Usando o comando acima o Vim exibir´a a lista de todos os arquivos abertos, ap´os exibir a lista vocˆe pode escolher um dos arquivos da lista, algo como: :buf 3 Para editar arquivos em sequˆencia fa¸ca as altera¸c˜oes no arquivo atual e acesso o pr´oximo assim: :wn O comando acima diz → ‘w gravar’ → ‘n pr´oximo’ 5.13 Dividindo a janela com o pr´oximo arquivo da lista de buffers :sn O comando acima ´e uma abrevia¸c˜ao de split next, ou seja, dividir e pr´oximo. 5.14 Como colocar um peda¸co de texto em um registro? Esc ...... vai para o modo normal a10j ...... coloca no registro ‘a’ as pr´oximas 10 linhas ‘10j’
  • 49. 5.15 Como criar um registro em modo visual? 39 Pode-se fazer: Esc ...... para ter certeza que est´a em modo normal ap ........ registro a ‘paste’, ou seja, cole Em modo de inser¸c˜ao faz-se: Ctrl-r a H´a situa¸c˜oes em que se tem caracteres n˜ao “ascii ” que s˜ao complicados de se colocar em uma busca ou substitui¸c˜ao, nestes casos pode-se usar os seguintes comandos: ayl ............. copia para o registro ‘a’ o caractere sob o cursor :%s/c-ra/char .. subsitui o conte´udo do registro ‘a’ por char Pode-se ainda usar esta t´ecnica para copiar rapidamente coment´arios do“bash1 ”, representados pelo caracteres #, em modo normal usando o atalho “0yljP”. 0 ............... posiciona o cursor no in´ıcio a linha yl .............. copia o caractere sob o cursor j ............... desce uma linha P ............... cola o caractere copiado 5.15 Como criar um registro em modo visual? Inicie a sele¸c˜ao visual com o atalho Shift-v ..... seleciona linhas inteiras pressione a letra “j” at´e chegar ao ponto desejado, agora fa¸ca ay pressione “v” para sair do modo visual. 5.16 Como definir um registro no vimrc? Se vocˆe n˜ao sabe ainda como editar preferˆencias no Vim leia antes o cap´ıtulo 12. Vocˆe pode criar uma vari´avel no vimrc assim: 1Interpretador de comandos do GNU/Linux
  • 50. 40 Registros let var=foo ...... define foo para var echo var ........... mostra o valor de var Pode tamb´em dizer ao Vim algo como... :let @d=strftime(c)Enter Neste caso estou dizendo a ele que guarde na vari´avel ‘d’ at d, o valor da data do sistema ‘strftime(c)’ ou ent˜ao cole isto no vimrc: let @d=strftime(c)cr A diferen¸ca entre digitar diretamente um comando e adicion´a-lo ao vimrc ´e que uma vez no vimrc o registro em quest˜ao estar´a sempre dispon´ıvel, observe tamb´em as sutis diferen¸cas, um Enter inserido manualmente ´e apenas uma indica¸c˜ao de uma a¸c˜ao que vocˆe far´a pressionando a tecla especificada, j´a 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-rd nmap ,d dp As atribui¸c˜oes acima correspondem a: 1. Guarda a data na vari´avel ‘d’ 2. Mapeamento para o modo de inser¸c˜ao “imap” digite ,d 3. Mapeamento para o modo normal “nmap” digite ,d E digitar ,d normalmente Desmistificando 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 inser¸c˜ao assim: Ctrl-r d
  • 51. 5.17 Como selecionar blocos verticais de texto? 41 5.17 Como selecionar blocos verticais de texto? Ctrl-v agora use as letras h,l,k,j como setas de dire¸c˜ao at´e finalizar podendo guardar a sele¸c˜ao em um registro que vai de ‘a’ a ‘z’ exemplo: ay Em modo normal vocˆe pode fazer assim para guardar um par´agrafo inteiro em um registro ayip O comando acima quer dizer para o registro ‘a’ ...... a copie ...................... ‘y’ o par´agrafo atual .......... ‘inner paragraph’ 5.18 Referˆencias • http://rayninfo.co.uk/vimtips.html • http://aprendolatex.wordpress.com • http://pt.wikibooks.org/wiki/Latex
  • 52. Cap´ıtulo 6 Buscas e Substitui¸c˜oes Para fazer uma busca, certifique-se de que est´a em modo normal, pressione “/” e digite a express˜ao a ser procurada. Para encontrar a primeira ocorrˆencia 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 trˆes linhas ap´os a ocorrˆencia da palavra “teste” /casa A busca acima localiza ‘casa’ mas n˜ao ‘casamento’. Em express˜oes regulares, e s˜ao representadas por b, que representa, por sua vez, borda de palavras. Ou seja, ‘casa,‘, ‘casa!‘ seriam localizado, visto que sinais de pontua¸c˜ao n˜ao fazem parte da palavra. 6.1 Usando “Express˜oes Regulares” em buscas :h regex, pattern / ........... inicia uma busca (modo normal) %x69 ....... c´odigo da letra ‘i’ /%x69 ...... localiza a letra ‘i’ - hexadecimal 069 d .......... localiza n´umeros [3-8] ....... localiza n´umeros de 3 at´e 8
  • 53. 6.1 Usando “Express˜oes Regulares” em buscas 43 ^ ........... come¸co de linha $ ........... final de linha + .......... um ou mais /^d+$ ..... localiza somente d´ıgitos /r$ ........ localiza linhas terminadas com ^M /^s*$ ...... localiza linhas vazias ou contendo apenas espa¸cos /^t+ ...... localiza linhas que iniciam com tabs s .......... localiza espa¸cos /s+$ ...... localiza espa¸cos no final da linha 6.1.1 Evitando escapes ao usar Express˜oes regulares O Vim possui um modo chamado“very magic”para uso em express˜oes regulares que evita o uso excessivo de escapes, alternativas etc. Usando apenas uma op¸c˜ao: veja “:h /v”. Em um trecho com d´ıgitos + texto + d´ıgitos no qual se deseja manter s´o as letras. 12345aaa678 12345bbb678 12345aac678 Sem a op¸c˜ao “very magic” far´ıamos: :%s/d{5}(D+)d{3}/1/ J´a com a op¸c˜ao “very magic”“v” usa-se bem menos escapes: :%s/vd{5}(D+)d{3}/1/ explica¸c~ao do comando acima : ......... comando % ......... em todo arquivo s ......... substitua / ......... inicia padr~ao de busca v ........ use very magic mode d ........ d´ıgitos {5} ....... 5 vezes ( ........ inicia um grupo D ........ seguido de n~ao d´ıgitos ) ........ fecha um grupo + ......... uma ou mais vezes d ........ novamente d´ıgitos {3} ....... tr^es vezes / ......... inicio da substitui¸c~ao 1 ........ referencia o grupo 1
  • 54. 44 Buscas e Substitui¸c˜oes Analisando o exemplo anterior, a linha de racioc´ınio foi a de “manter o texto entre os d´ıgitos”, o que pode ser traduzido, em uma outra forma de racioc´ınio, como “remover os d´ıgitos”. :%s/d//g explica¸c~ao do comando acima % ......... em todo arquivo s ......... substitua / ......... inicia padr~ao de busca d ........ ao encontrar um d´ıgito / ......... subtituir por vazio ..... exato, substituir por vazio /g ........ a express~ao se torna gulosa Por guloso - /g - se entende que ele pode e deve tentar achar mais de uma ocor- rˆencia do padr˜ao de busca na mesma linha. Caso n˜ao seja gulosa, a express˜ao ir´a apenas casar com a primeira ocorrˆencia em cada linha. Classes POSIX para uso em Express˜oes Regulares Ao fazermos substitui¸c˜oes em textos poderemos nos deparar com erros, pois [a-z] n˜ao inclui caracteres acentuados, as classes POSIX s˜ao a solu¸c˜ao para este pro- blema, pois adequam o sistema ao idioma local, esta ´e a m´agica implementada por estas classes. [:lower:] ...... letras min´usculas incluindo acentos [:upper:] ...... letras mai´usculas incluindo acentos [:punct:] ...... ponto, virgula, colchete, etc Para usar estas classes fazemos: :%s/[[:lower:]]/U/g Explicando o comando acima: : ....... modo de comando % ....... em todo o arquivo atual s ....... substitua / ....... inicia o padr~ao a ser buscado [ ....... inicia um grupo [: ...... inicia uma classe POSIX lower ... letras min´usculas :] ...... termina a classe POSIX ] ....... termina o grupo / ....... inicia substitui¸c~ao U ...... para mai´usculo ....... correponde ao que foi buscado
  • 55. 6.2 Destacando padr˜oes 45 Nem todas as classes POSIX conseguem pegar caracteres acentuados, portanto deve-se habilitar o destaque colorido para buscas usando: :set hlsearch .... destaque colorido para buscas :set incsearch ... busca incremental Dessa forma podemos testar nossas buscas antes de fazer uma substitui¸c˜ao. Para aprender mais sobre Express˜oes Regulares leia: • Guia sobre Espress˜oes Regulares [3] • :help regex • :help pattern Uma forma r´apida para encontrar a pr´oxima ocorrˆencia de uma palavra sob o cursor ´e teclar ‘*’. Para encontrar uma ocorrˆencia anterior da palavra sob o cursor, existe o # (em ambos os casos o cursor deve estar posicionado sobre a palavra que deseja procurar). As duas op¸c˜oes citadas localizam apenas se a palavra corresponder totalmente ao padr˜ao sob o cursor, pode-se bucar por trechos de palavras que fa¸cam parte de palavras maiores usando-se ‘g*’. Pode- se ainda exibir “dentro do contexto” todas as ocorrˆencias de uma palavra sob o cursor usando-se o seguinte atalho em modo normal: [ Shift-i 6.2 Destacando padr˜oes :h % Vocˆe pode destacar linhas com mais de 30 caracteres assim: :match ErrorMsg /%30v/ . destaca linhas maiores que 30 caracteres :match none .............. remove o destaque 6.3 Inserindo linha antes e depois Suponha que se queira um comando, considere “,t”, que fa¸ca com que a linha indentada corrente passe a ter uma linha em branco antes e depois; isto pode ser obtido pelo seguinte mapeamento: :map ,t Esc:.s/^(s+)(.*)/r12r/gcr Explicando:
  • 56. 46 Buscas e Substitui¸c˜oes : ................ entra no modo de comando map ,t ........... mapeia ,t para a fun¸c~ao desejada Esc ............ ao executar sai do modo de inser¸c~ao s/isto/aquilo/g .. substitui isto por aquilo : ................ inicia o modo de comando . ................ na linha corrente s ................ substitua ^ ................ come¸co de linha s+ ............. um espa¸co ou mais (barras s~ao escapes) .* ............... qualquer coisa depois (grupo) ........ agrupo para referenciar com 1 1 ............... repete na substitui¸c~ao o grupo 1 r ............... insere uma quebra de linha g ................ em todas as ocorr^encias da linha cr ............. Enter 6.4 Obtendo informa¸c˜oes do arquivo ga ............. mostra o c´odigo do caractere em decimal hexa e octal ^g ............. mostra o caminho e o nome do arquivo g^g ............ mostra estat´ısticas detalhadas do arquivo Obs: O c´odigo do caractere pode ser usado para substitui¸c˜oes, especialmente em se tratando de caracteres de controle como tabula¸c˜oes “^I” ou final de li- nha DOS/Windows “%x0d”. Vocˆe pode apagar os caracteres de final de linha Dos/Windows usando uma simples substitui¸c˜ao, veja mais adiante: :%s/%x0d//g Uma forma mais pr´atica de substituir o terminador de linha DOS para o termi- nador de linha Unix: :set ff=unix :w Na se¸c˜ao 12 p´agina 79 h´a um c´odigo para a barra de status que faz com que a mesma exiba o c´odigo do caractere sob o cursor na se¸c˜ao 12.10.2. O caractere de final de linha do Windows/DOS pode ser inserido com a seguinte combina¸c˜ao de teclas: i ............ entra em modo de inser¸c~ao INSERT ..... entra em modo de inser¸c~ao Ctrl-v Ctrl-m insere o simbolo ^M (terminador de linha DOS)
  • 57. 6.5 Trabalhando com registradores 47 6.5 Trabalhando com registradores Pode-se guardar trechos do que foi copiado ou apagado para registros distintos (´area de transferˆencia m´ultipla). Os registros s˜ao indicados por aspas seguido por uma letra. Exemplos: a, b, c, etc. Como copiar o texto para um registrador? ´E simples: basta especificar o nome do registrador antes: add ... apaga linha para o registrador a bdd ... apaga linha para o registrador b ap .... cola o conte´udo do registrador a bp .... cola o conte´udo do registrador b x3dd .. apaga 3 linhas para o registrador ‘‘x’’ ayy .. copia linha para o registrador ‘a’ a3yy .. copia 3 linhas para o registrador ‘a’ ayw .. copia uma palavra para o registrador ‘a’ a3yw .. copia 3 palavras para o registrador ‘a’ No “modo de inser¸c˜ao”, como visto anteriormente, pode-se usar um atalho para colar rapidamente o conte´udo de um registrador. Ctrl-r (registro) Para colar o conte´udo do registrador ‘a’ Ctrl-r a Para copiar a linha atual para a ´area de transferˆencia +yy Para colar da ´area de transferˆencia +p Para copiar o arquivo atual para a ´area de transferˆencia “clipboard”: :%y+ 6.6 Edi¸c˜oes complexas Trocando palavras de lugar: Posiciona-se o cursor no espa¸co antes da 1a palavra e digita-se: deep
  • 58. 48 Buscas e Substitui¸c˜oes Trocando letras de lugar: xp .... com a letra seguinte xh[p .. com a letra anterior Trocando linhas de lugar: ddp ... com a linha de baixo ddkP .. com a linha de cima Tornando todo o texto mai´usculo gggUG ggVGU 6.7 Indentando ..... Indenta a linha atual ^t ..... Indenta a linha atual em modo de inser¸c~ao ^d ..... Remove indenta¸c~ao em modo de inser¸c~ao ip .... indenta o par´agrafo atual 6.8 Corrigindo a indenta¸c˜ao de c´odigos Selecione o bloco de c´odigo, por exemplo vip ..... visual ‘‘inner paragraph’’ (selecione este par´agrafo) = ....... corrige a indenta¸c~ao do bloco de texto selecionado ggVG= .... corrige a identa¸c~ao do arquivo inteiro 6.9 Usando o File Explorer O Vim navega na ´arvore de diret´orios com o comando vim . Use o ‘j’ para descer e o ‘k’ para subir ou Enter para editar o arquivo selecio- nado. Pressionando F1 ao abrir o FileExplorer do Vim, vocˆe encontra dicas adicionais sobre este modo de opera¸c˜ao do Vim.
  • 59. 6.10 Selecionando ou deletando conte´udo de tags HTML 49 6.10 Selecionando ou deletando conte´udo de tags HTML tag conte´udo da tag /tag basta usar (em modo normal) as teclas vit ............... visual ‘inner tag | esta tag’ Este recurso tamb´em funciona com parˆenteses vi( ..... visual select vi ..... visual select di( ..... delete inner (, ou seja, seu conte´udo 6.11 Substitui¸c˜oes Para fazer uma busca, certifique-se de que est´a em modo normal, em seguida digite use o comando ‘s’, conforme ser´a explicado. Para substituir “foo” por “bar” na linha atual: :s/foo/bar Para substituir “foo” por “bar” da primeira `a d´ecima linha do arquivo: :1,10 s/foo/bar Para substituir “foo” por “bar” da primeira `a ´ultima 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 op¸c˜oes que modificam seu comportamento. 6.12 Exemplos Busca usando alternativas: /end(if|while|for)
  • 60. 50 Buscas e Substitui¸c˜oes Buscar´a ‘if’, ‘while’ e ‘for’. Observe que ´e necess´ario ‘escapar’ os caracteres (, | e ), caso contr´ario eles ser˜ao interpretados como caracteres comuns. Quebra de linha /quebrande linha Ignorando mai´usculas e min´usculas /cpalavra Usando c o Vim encontrar´a “palavra”, “Palavraa” ou at´e mesmo “PALAVRA”. Uma dica ´e colocar no seu arquivo de configura¸c˜ao “vimrc” veja o cap´ıtulo 12 na p´agina 79. set ignorecase .. ignora mai´usculas e min´usculas na bucsca set smartcase ... se busca contiver mai´usculas ele passa a consider´a-las set hlsearch .... mostra o que est´a sendo buscado em cores set incsearch ... ativa a busca incremental se vocˆe n˜ao sabe ainda como colocar estas preferˆencias no arquivo de confi- gura¸c˜ao pode ativa-las em modo de comando precedendo-as com dois pontos, assim: :set ignorecaseEnter Substitui¸c˜oes com confirma¸c˜ao: :%s/word/palavra/c ..... o ‘c’ no final habilita a confirma¸c~ao Procurando palavras repetidas /(w*) 1 Multilinha /Hello_s+World Buscar´a ‘World’, separado por qualquer n´umero de espa¸cos, incluindo quebras de linha. Buscar´a as trˆes sequˆencias: Hello World Hello World Hello World
  • 61. 6.12 Exemplos 51 Buscar linhas de at´e 30 caracteres de comprimento /^.{,30}$ ^ ..... representa come¸co de linha . ..... representa qualquer caractere :%s/[^]*//g ... apaga tags HTML/XML :%g/^$/d ......... apaga linhas vazias :%s/^[ t]*n//g apaga linhas vazias Remover duas ou mais linhas vazias entre par´agrafos diminuindo para uma s´o linha vazia. :%s/(^n{2,})/r/g Vocˆe pode criar um mapeamento e colocar no seu /.vimrc map ,s Esc:%s/(^n{2,})/r/gcr No exemplo acima, ‘,s’ ´e um mapeamento para reduzir linhas em branco suces- sivas para uma s´o Remove n˜ao d´ıgitos (n˜ao pega n´umeros) :%s/^D.*//g Remove final de linha DOS/Windows ^M que tem c´odigo hexadecimal igual a ‘0d’ :%s/%x0d//g Troca palavras de lugar usando express˜oes regulares: :%s/(.+)s(.+)/2 1/ Modificando todas as tags HTML para min´usculo: :%s/([^]*)/L1/g Move linhas 10 a 12 para al´em da linha 30: :10,12m30
  • 62. 52 Buscas e Substitui¸c˜oes 6.13 O comando global “g” Buscando um padr˜ao e gravando em outro arquivo: :’a,’b g/^Error/ . w errors.txt Apenas imprimir linhas que cont´em determinada palavra, isto ´e ´util quando vocˆe quer ter uma vis˜ao sobre um determina aspecto do seu arquivo vejamos: :set nu ..... habilita numera¸c~ao :g/Error/p .. apenas mostra as linhas correspondentes Para mostrar o as linhas correspondentes a um padr˜ao, mesmo que a nume- ra¸c˜ao de linha n˜ao esteja habilitada use “:g/padr~ao/#”. numerar linhas: :let i=1 | g/^/s//=i.t/ | let i=i+1 Outro modo de inserir n´umeros de linha :%s/^/=line(’.’).’ ’ : ............ comando % ............ em todo o arquivo s ............ substitui¸c~ao / ............ inicio da busca ^ ............ come¸co de linha / ............ inicio da substitui¸c~ao =line(’.’) .. corresponde ao no da linha atual .’ ’ ........ concatena um espa¸co ap´os o no Para copiar linhas come¸cadas com Error para o final do arquivo fa¸ca: :g/^Error/ copy $ Obs: O comando ‘copy’ pode ser abreviado ‘co’ ou ainda pode-se usar ‘t’ para mais detalhes: :h co Como adicionar um padr˜ao copiado com ‘yy’ ap´os um determinado padr˜ao? :g/padrao/+put! :g/padrao/.put=’teste’ Entre as linhas que contiverem ‘fred’ e ‘joe’ substitua:
  • 63. 6.13 O comando global “g” 53 :g/fred/,/joe/s/isto/aquilo/gic As op¸c˜oes ‘gic’ correspondem a global, ignore case e confirm, podendo ser omi- tidas deixando s´o o global. Pegar caracteres num´ericos e jogar no final do arquivo: :g/^d+.*/m $ Inverter a ordem das linhas do arquivo: :g/^/m0 Apagar as linhas que cont´em Line commented: :g/Line commented/d Apagar todas as linhas comentadas :g/^s*#/d Copiar determinado padr˜ao para um registro: :g/pattern/ normal Ayy Copiar linhas que cont´em um padr˜ao e a linha subsequente para o final: :g/padr~ao/;+1 copy $ Deletar linhas que n˜ao contenham um padr˜ao: :v/dicas/d ..... deleta linhas que n~ao contenham ‘dicas’ Incrementar n´umeros no come¸co da linha: :.,20g/^d/exe normal! c-a Sublinhar linhas come¸cadas com Chapter: :g/^Chapter/t.|s/./-/g : ........ comando g ........ global / ........ inicio de um padr~ao ^ ........ come¸co de linha Chapter .. palavra literal
  • 64. 54 Buscas e Substitui¸c˜oes / ........ fim do par~ao t ........ copia . ........ linha atual s ........ substitua / ........ inicio de um padr~ao . ........ qualquer caractere / ........ in´ıcio da substitui¸c~ao - ........ por tra¸co / ........ fim da substitui¸c~ao g ........ em todas as ocorr^encias 6.14 Dicas Para colocar a ´ultima busca em uma substitui¸c˜ao fa¸ca: :%s/Ctrl-r//novo/g A dupla barra corresponde ao ultimo padr˜ao procurado, e portanto o comando abaixo far´a a substitui¸c˜ao da ultima busca por casinha: :%s//casinha/g 6.15 Filtrando arquivos com o vimgrep Por vezes sabemos que aquela anota¸c˜ao foi feita, mas no momento esquecemos em qual arquivo est´a, no exemplo abaixo procuramos a palavra dicas `a partir da nossa pasta pessoal pela palavra ‘dicas’ em todos os arquivos com extens˜ao ‘txt’. ~/ ............ equivale a /home/user :lvimgrep /dicas/gj ~/**/*.txt | ls :h lvim ....... ajuda sobre o comando 6.16 Copiar a partir de um ponto :19;+3 co $ O Vim sempre necessita de um intervalo (inicial e final) mas se usar-mos ‘;’ 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 an´aloga pode-se usar como referˆencia um padr˜ao qualquer: :/palavra/;+10 m 0 O comando acima diz: `a partir da linha que cont´em “palavra” incluindo as 10 pr´oximas linhas mova ‘m’ para a primeira linha ‘0’, ou seja, antes da linha 1.
  • 65. 6.17 Dicas das lista vi-br 55 6.17 Dicas das lista vi-br Fonte: Grupo vi-br do yahoo [4] Problema: Essa deve ser uma pergunta comum. Suponha o seguinte conte´udo de arquivo: ... // v´arias linhas texto1000texto // linha i texto1000texto // linha i+1 texto1000texto // linha i+2 texto1000texto // linha i+3 texto1000texto // linha i+4 ... // v´arias linhas Gostaria de um comando que mudasse para ... // v´arias linhas texto1001texto // linha i texto1002texto // linha i+1 texto1003texto // linha i+2 texto1004texto // linha i+3 texto1005texto // linha i+4 ... // v´arias linhas Ou seja, somasse 1 a cada um dos n´umeros entre os textos especificando 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 n˜ao tem awk, e logo a melhor solu¸c˜ao mesmo ´e usar o Vim: :let i=1 | 10,20 g/textod+texto/s/d+/=submatch(0)+i/ | let i=i+1 Observa¸c˜ao: 10,20 ´e o intervalo, ou seja, da linha 10 at´e a linha 20 :help / :help :s :help pattern O plugin Visincr [5] Possibilita incrementos em modo visual de diversas for- mas, um v´ıdeo demonstrativos pode ser visto neste link: http://vimeo.com/4457161
  • 66. 56 Buscas e Substitui¸c˜oes 6.18 Jun¸c˜ao de linhas com Vim Fonte: dicas-l da unicamp [6] Colabora¸c˜ao: Rubens Queiroz de Almeida Recentemente precisei combinar, em um arquivo, duas linhas consecutivas. O arquivo original continha linhas como: Matr´ıcula: 123456 Senha: yatVind7kned Matr´ıcula: 123456 Senha: invanBabnit3 E assim por diante. Eu precisava converter este arquivo para algo como: Matr´ıcula: 123456 - Senha: yatVind7kned Matr´ıcula: 123456 - Senha: invanBabnit3 Para isto, basta executar o comando: :g/^Matr´ıcula/s/n/ - / Explicando: s/isto/aquilo/g .. substitui isto por aquilo g ................ comando global /................. inicia padr~ao de busca ^ ................ indica come¸co de linha Matr´ıcula ........ palavra a ser buscada s ................ inicia substitui¸c~ao /n/ - / ......... troca quebra de linha ‘n’, por ‘-’ 6.19 Buscando em um intervalo de linhas Para buscar entre as linhas 10 e 50 por um padr˜ao qualquer fazemos: /padrao%10l$50l Esta e outras boas dicas podem ser lidas no site vim-faq [7].
  • 67. Cap´ıtulo 7 Trabalhando com Janelas O Vim trabalha com o conceito de m´ultiplos buffers de arquivo. Cada buffer ´e um arquivo carregado para edi¸c˜ao. Um buffer pode estar vis´ıvel ou n˜ao, e ´e poss´ıvel dividir a tela em janelas, de forma a visualizar mais de um buffer simultaneamente. 7.1 Alternando entre Buffers de arquivo Ao abrir um documento qualquer no Vim o mesmo fica em um buffer. Caso seja decidido que outro arquivo seja aberto na mesma janela, o documento inicial ir´a desaparecer da janela atual cedendo lugar ao mais novo, mas permanecer´a ativo no buffer para futuras modifica¸c˜oes. Para saber quantos documentos est˜ao abertos no momento utiliza-se o comando :ls ou :buffers. Esses comandos listam todos os arquivos que est˜ao referenciados no buffer com suas respectivas ”chaves”de referencia. Para trocar a visualiza¸c˜ao do Buffer atual pode-se usar: :buffer# ...... Altera para o buffer anterior :b2 ........... Altera para o buffer cujo a chave ´e 2 Para os que preferem atalhos para alternar entre os buffers, ´e poss´ıvel utilizar ‘Ctrl-6’ que tem o mesmo funcionamento do comando ‘:b#’ 7.2 Modos de divis˜ao da janela Como foi dito acima, ´e poss´ıvel visualizar mais de um buffer ao mesmo tempo, e isso pode ser feito utilizando tab ou split.
  • 68. 58 Trabalhando com Janelas 7.2.1 Utilizando abas tab A partir do Vim 7 foi disponibilizada a fun¸c˜ao de abrir arquivos em abas, por- tanto ´e poss´ıvel ter v´arios buffers abertos em abas distintas e alternar entre elas facilmente. Os comandos para utiliza¸c˜ao das abas s˜ao: :tabnew ........... Abre uma nova tab :tabprevious ...... Vai para a tab anterior :tabnext .......... Vai para a pr´oxima tab 7.2.2 Utilizando split horizontal Enquanto os comandos referentes a tab deixam a janela inteira dispon´ıvel para o texto e apenas cria uma pequena aba na parte superior, o comando split lite- ramente divide a tela atual em duas para visualiza¸c˜ao simultˆanea dos “buffers” (seja ele o mesmo ou outro diferente). Esse ´e o split padr˜ao do Vim mas pode ser alterado facilmente colocando a linha abaixo no seu ~/.vimrc: :set splitright .... split padr~ao para vertical 7.2.3 Utilizando split vertical O split vertical funciona da mesma maneira que o split horizontal, sendo a unica diferen¸ca o modo como a tela ´e dividida, pois nesse caso a tela ´e dividida verticalmente. 7.3 Abrindo e fechando janelas Ctrl-w-s ...... Divide a janela horizontalmente (:split) Ctrl-w-v ...... Divide a janela verticalmente (:vsplit) Ctrl-w-o ...... Faz a janela atual ser a ´unica (:only) Ctrl-w-n ...... Abre nova janela (:new) Ctrl-w-q ...... Fecha a janela atual (:quit) Ctrl-w-c ...... Fecha a janela atual (:close) Lembrando que o Vim considera todos os arquivos como “buffers” portanto quando um arquivo ´e fechado, o que est´a sendo fechado ´e a visualiza¸c˜ao do mesmo, pois ele continua aberto no “buffer”. 7.4 Salvando e saindo ´E poss´ıvel salvar todas as janelas facilmente, assim como sair tambem: :wall ............. salva todos ‘write all’ :qall ............. fecha todos ‘quit all’
  • 69. 7.5 Manipulando janelas 59 7.5 Manipulando janelas Ctrl-w-w ......... Alterna entre janelas Ctrl-w-j ......... desce uma janela ‘j’ Ctrl-w-k ......... sobe uma janela ‘k’ Ctrl-w-l ......... move para a janela da direta ‘l’ Ctrl-w-h ......... move para a janela da direta ‘h’ Ctrl-w-r ......... Rotaciona janelas na tela Ctrl-w-+ ......... Aumenta o espa¸co da janela atual Ctrl-w-- ......... Diminui o espa¸co da janela atual Pode-se mapear um atalho para redimensionar janelas com as teclas ‘+’ e ‘-’. :map + c-w+ :map - c-w- 7.6 File Explorer :h buffers windows Para abrir o gerenciador de arquivos do Vim use: :Vex ............ abre o file explorer verticalmente :Sex ............ abre o file explorer em nova janela :Tex ............ abre o file explorer em nova aba :e .............. abre o file explorer na janela atual ap´os 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 ´E poss´ıvel mapear um atalho “no caso abaixo F2” para abrir o File Explorer. map F2 Esc:Vexcr Ao editar um arquivo no qual h´a referˆencia a um outro arquivo, por exemplo: ‘/etc/hosts’, pode-se usar o atalho ‘Ctrl-w f’ para abri-lo em nova janela, ou ‘gf’ para abri-lo na janela atual. Mas ´e importante posicionar o cursor sobre o nome do arquivo. Veja tamb´em mapeamentos na se¸c˜ao 12.8 p´agina 83.
  • 70. Cap´ıtulo 8 Repeti¸c˜ao de Comandos Para repetir a ´ultima edi¸c˜ao saia do modo de Inser¸c˜ao e pressione ponto (.): . Para inserir um texto que deve ser repetido v´arias vezes: 1. Posicione o cursor no local desejado; 2. Digite o n´umero de repeti¸c˜oes; 3. Entre em modo de inser¸c˜ao; 4. Digite o texto; 5. Saia do modo de inser¸c˜ao (tecle Esc). Por exemplo, se vocˆe quiser inserir oitenta tra¸cos numa linha, em vez de digitar um por um, vocˆe pode digitar o comando: 80i-Esc Veja, passo a passo, o que aconteceu: Antes de entrar em modo de inser¸c˜ao usamos um quantificador ‘80’ depois iniciamos o modo de inser¸c˜ao i depois digitamos o caractere a ser repetido -
  • 71. 8.1 Repetindo a digita¸c˜ao de uma linha 61 e por fim sa´ımos do modo de inser¸c˜ao Esc Se desej´assemos digitar 10 linhas com o texto isto ´e um teste dever´ıamos ent˜ao fazer assim: Esc .. para ter certeza que ainda estamos no modo normal 10 ..... quantificador antes i ...... entrar no modo de inser¸c~ao isto ´e um teste Enter Esc .. voltar ao modo normal 8.1 Repetindo a digita¸c˜ao de uma linha modo de inser¸c~ao Ctrl-y .......... repete a linha acima Ctrl-e .......... repetira linha abaixo Ctrl-x Ctrl-l ... repete linhas completas O atalho Ctrl-x Ctrl-l s´o funcionar´a para uma linha semelhante, experimente digitar: uma linha qualquer com algum conte´udo uma linha Ctrl-x Ctrl-l e veja o resultado 8.2 Guardando trechos em “registros” Os registradores ‘a-z’ s˜ao uma esp´ecie de ´area de transferˆencia m´ultipla. Deve-se estar em modo normal e ent˜ao digitar aspas duplas e uma das 26 letras do alfabeto, em seguida uma a¸c˜ao por exemplo, ‘y’ (copiar) ‘d’ (apagar). Depois, mover o cursor para a linha desejada e colar 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 conte´udo do registrador ‘a’ abaixo bdd ... apaga a linha atual para o registrador ‘b’
  • 72. 62 Repeti¸c˜ao de Comandos 8.3 Gravando comandos Imagine que vocˆe tem o seguinte trecho de c´odigo: stdio.h fcntl.h unistd.h stdlib.h e quer que ele fique assim: #include stdio.h #include fcntl.h #include unistd.h #include stdlib.h N˜ao ´e poss´ıvel simplesmente executar repetidas vezes um comando do Vim, pois ´e preciso incluir texto tanto no come¸co quanto no fim da linha? ´E necess´ario mais de um comando para isso. ´E a´ı que entram as macros. Pode-se gravar at´e 26 macros, j´a que elas s˜ao guardadas nos registros do Vim, que s˜ao identificados pelas letras do alfabeto. Para come¸car a gravar uma macro no registro ‘a’, digitamos qa No modo Normal. Tudo o que for digitado a partir de ent˜ao, ser´a gravado no registro ‘a’ at´e que seja conclu´ıdo com o comando Escq novamente (no modo Normal). Assim, soluciona-se o problema: Esc ....... para garantir que estamos no modo normal qa .......... inicia a grava¸c~ao da macro ‘a’ I ........... entra no modo de inser¸c~ao no come¸co da linha #include .. insere #include Esc ....... sai do modo de inser¸c~ao A .......... insere o ´ultimo caractere Esc ....... sai do modo de inser¸c~ao j ........... desce uma linha Esc ....... sai do modo de inser¸c~ao q ........... para a grava¸c~ao da macro Agora s´o ´e preciso posicionar o cursor na primeira letra de uma linha como esta stdio.h E executar a macro do registro ‘a’ quantas vezes for necess´ario, usando o co- mando @a. Para executar quatro vezes, digite: 4@a
  • 73. 8.4 Repetindo substitui¸c˜oes 63 Este comando executa quatro vezes o conte´udo do registro ‘a’. Caso tenha sido executada, a macro pode ser repetida com o comando @@ 8.4 Repetindo substitui¸c˜oes Caso seja feito uma substitui¸c˜ao em um intervalo como abaixo :5,32s/isto/aquilo/g Pode-se repetir esta substitui¸c˜ao em qualquer linha que estiver apenas usando este s´ımbolo O Vim substituir´a na linha corrente ‘isto’ por ‘aquilo’. Podendo repetir a ´ultima substitui¸c˜ao globalmente assim: g 8.5 Repetindo comandos @: O atalho acima repete o ´ultimo comando no pr´oprio modo de comandos 8.6 Scripts Vim Usando um script para modificar um nome em v´arios arquivos: Crie um arquivo chamado subst.vim contendo os comandos de substitui¸c˜ao e o comando de salvamento :wq. %s/bgcolor=eeeeee/bgcolor=ffffff/g wq Para executar um script, digite o comando :source nome_do_script.vim O comando :source tamb´em pode ser abreviado com :so bem como ser usado para testar um esquema de cor: :so tema.vim
  • 74. 64 Repeti¸c˜ao de Comandos 8.7 Usando o comando bufdo Com o comando :bufdo, pode-se executar um comando em um conjunto de arquivos de forma r´apida. No exemplo a seguir, ser˜ao abertos todos os arquivos HTML do diret´orio atual, ser´a efetuado uma substitui¸c˜ao e em seguida ser˜ao todos salvos. vim *.html :bufdo %s/bgcolor=eeeeee/bgcolor=ffffff/ge | :wall :qall O comando :wall salva“write”todos“all”os arquivos abertos pelo comando vim *.html. Opcionalmente vocˆe pode combinar “:wall” e “:qall” com o comando :wqall, que salva todos os arquivos abertos e em seguida sai do Vim. A op¸c˜ao ‘e’ faz com que o vim n˜ao exiba mensagens de erro caso o buffer em quest˜ao n˜ao contenha o padr˜ao a ser substitu´ıdo. 8.8 Colocando a ´ultima busca em um comando Observa¸c˜ao: lembre-se Ctrl = ^ :^r/ 8.9 Inserindo o nome do arquivo no comando :^r% 8.10 Inserindo o ´ultimo comando ^r: Se preceder com “:” vocˆe repete o comando, equivale a acessar o hist´orico de comandos com as setas :^r: 8.11 Inserindo a palavra sob o cursor em um comando O comando abaixo pode ser usado para pegar por exemplo, a palavra que est´a atualmente sob o cursor, e coloca-la em um comando de busca. ^r^w
  • 75. 8.12 Para repetir exatamente a ´ultima inser¸c˜ao 65 8.12 Para repetir exatamente a ´ultima inser¸c˜ao ic-a
  • 76. Cap´ıtulo 9 Comandos Externos O Vim permite executar comandos externos para processar ou filtrar o conte´udo de um arquivo. De forma geral, fazemos isso digitando (no modo normal): :!ls .... visualiza o conte´udo do diret´orio Lembrando que anexando um simples ponto, a sa´ıda do comando torna-se o documento que est´a sendo editado: :.!ls .... imprime na tela o conte´udo do diret´orio A seguir, veja alguns exemplos de utiliza¸c˜ao: 9.1 Ordenando Podemos usar o comando sort que ordena o conte´udo de um arquivo dessa forma: :5,15!sort ..... ordena da linha 5 at´e a linha 15 O comando acima ordena da linha 5 at´e a linha 15. O comando sort existe tanto no Windows quanto nos sistemas Unix. Digitando simplesmente sort, sem argumentos, o comportamento padr˜ao ´e de classificar na ordem alfab´etica (baseando-se na linha inteira). Para mais informa¸c˜oes sobre argumentos do comando sort, digite: sort --help ou man sort (no Unix) ou sort /? (no Windows).
  • 77. 9.2 Removendo linhas duplicadas 67 9.2 Removendo linhas duplicadas :%!uniq O caractere “%” representa a regi˜ao equivalente ao arquivo atual inteiro. A vers˜ao do Vim 7 em diante tem um comando sort que permite remover linhas duplicadas uniq e ordenar, sem a necessidade de usar comandos externos, para mais detalhes: :h sort 9.3 Ordenando e removendo linhas duplicadas no Vim 7 :sort u Quando a ordena¸c˜ao envolver n´umeros faz-se: :sort n 9.4 Beautifiers A maior parte das linguagens de programa¸c˜ao possui ferramentas externas cha- madas beautifiers, que servem para embelezar o c´odigo, atrav´es da indenta¸c˜ao e espa¸camento. Por exemplo, para embelezar um arquivo HTML ´e poss´ıvel usar a ferramenta “tidy1 ”, do W3C: :%!tidy 9.5 Editando comandos longos no Linux ´E comum no ambiente GNU/Linux a necessidade de digitar comandos longos no terminal, para facilitar esta tarefa pode-se seguir estes passos: 1. Definir o Vim como editor padr˜ao do sistema editando o arquivo ‘.bashrc2 ’: #configura o vim como editor padr~ao export EDITOR=vim export VISUAL=vim 2. No terminal usar a combina¸c˜ao de teclas ‘Ctrl-x-e’. Esta combina¸c˜ao de teclas abre o editor padr˜ao do sistema onde se deve digitar o comando longo, ao sair do editor o terminal executa o comando editado. 1http://tidy.sourceforge.net/ 2Arquivo de configura¸c˜ao do bash
  • 78. 68 Comandos Externos 9.6 Compilando e verificando erros :h cwindow quickfix-window Se o seu projeto j´a possui um Makefile, ent˜ao vocˆe pode fazer uso do comando :make para poder compilar seus programas no conforto de seu Vim: :make A vantagem de fazer isso ´e poder usar outra ferramenta bastante interessante, a janela de quickfix: :cw[indow] O comando cwindow abrir´a uma janela em um split horizontal com a listagem de erros e warnings. Vocˆe poder´a navegar pela lista usando os cursores e ir diretamente para o arquivo e linha da ocorrˆencia. Modificando o compilador, o comando make pode mudar sua a¸c˜ao. :compiler javac :compiler gcc :compiler php Note que php n˜ao tem um compilador. Logo, quando executado, o make ir´a verificar por erros de sintaxes. :compiler O comando acima lista todos os compiladores suportados. 9.7 Grep :h grep quickfix-window cw Do mesmo jeito que vocˆe usa grep na sua linha de comando vocˆe pode usar o grep interno do Vim. Exatamente do mesmo jeito: :grep caminho padr~ao op¸c~oes Use a janela de quickfix3 aqui tamb´em para exibir os resultados do grep e poder ir diretamente a eles. 3:cope
  • 79. 9.8 Indent 69 9.8 Indent Indent4 ´e um programa que indenta seu c´odigo fonte de acordo com os padr˜oes configurados no seu arquivo HOME/.indent.pro. Vou pressupor que vocˆe j´a saiba usar o indent e como fazer as configura¸c˜oes necess´arias para ele funcionar, ent˜ao vamos ao funcionamento dele no Vim: Para indentar um bloco de c´odigo, primeiro selecione-o com o modo visual line (com V), depois ´e s´o entrar com o comando como se fosse qualquer outro co- mando externo: :!indent No caso, como foi selecionado um bloco de c´odigo, ir˜ao aparecer alguns carac- teres extras, mas o procedimento continua o mesmo: :’,’!indent 9.9 Calculadora Cient´ıfica com o Vim Para usar a fun¸c˜ao de Calculadora Cient´ıfica no Vim usamos uma ferramenta externa, que pode ser o comando ‘bc’ do GNU/Linux, ou uma linguagem de pro- grama¸c˜ao como Python ou Ruby, veremos como habilitar a calculadora usando o Python. Obviamente esta linguagem de programa¸c˜ao deve estar instalada no sistema em que se deseja usar seus recursos. Deve-se testar se a vers˜ao do Vim tem suporte ao Python “:version”, em seguida colocam-se os mapeamentos no “.vimrc”. :command! -nargs=+ Calc :py print args :py from math import * Feito isto pode-se usar o comando “:Calc” como visto abaixo: :Calc pi :Calc cos(30) :Calc pow(5,3) :Calc 10.0/3 :Calc sum(xrange(1,101)) :Calc [x**2 for x in range(10)] 9.10 Editando sa´ıdas do Shell Muitas vezes, precisamos manipular sa´ıdas do shell antes de envi´a-las por e-mail, reportar ao chefe ou at´e mesmo salv´a-las. Utilizando 4http://www.gnu.org/software/indent
  • 80. 70 Comandos Externos vim - ou gvim - a sa´ıda do Shell ´e redirecionada para o (G)Vim automaticamente, n˜ao sendo necess´ario redirecion´a-la para um arquivo tempor´ario e, logo ap´os, abr´ı-lo para edit´a-lo e modific´a-lo. Quem trabalha com sistemas de controle de vers˜ao como svn pode visualizar as diferen¸cas entre o c´odigo que est´a sendo editado e o que est´a no reposit´orio com sintaxe colorida desta forma: svn diff | view - Outra situa¸c˜ao em que se pode combinar o vim com saidas do shell ´e com o comando ‘grep’. Usando-se a op¸c˜ao ‘-l’ do grep listamos apenas os arquivos que correspondem a um padr˜ao. grep -irl voyeg3r . ./src/img/.svn/entries ./src/Makefile ./src/vimbook.tex Pode-se em seguida chamar o vim usando substitui¸c˜ao de comandos, como o comando ‘!!’ corresponde ao ´ultimo comando, e neste caso a saida corresponde a uma lista de arquivos que cont´em o padr˜ao a ser editado faz-se: vim ${!!} 9.11 Log do Subversion A vari´avel de ambiente $SVN EDITOR pode ser usada para se especificar o caminho para o editor de texto de sua preferˆencia, a fim de us´a-lo na hora de dar um commit usando o subversion. export SVN_EDITOR=/usr/bin/vim svn commit Ser´a aberto uma sess˜ao no Vim, que depois de salva, ser´a usada para LOG do commit. 9.12 Referˆencias • http://www.dicas-l.com.br/dicas-l/20070119.php • http://vim.wikia.com/wiki/Scientific_calculator • http://docs.python.org/library/cmath.html • http://docs.python.org/library/math.html
  • 81. Cap´ıtulo 10 Verifica¸c˜ao Ortogr´afica :h spell O Vim possui um recurso nativo de verifica¸c˜ao ortogr´afica (spell) em tempo de edi¸c˜ao, apontando palavras e express˜oes desconhecidas—usualmente erros de grafia—enquanto o usu´ario as digita. Basicamente, para cada palavra digitada o Vim procura por sua grafia em um dicion´ario. N˜ao encontrando-a, a palavra ´e marcada como desconhecida (sublinhando-a ou alterando sua cor), e fornece ao usu´ario mecanismos para corrigi-la (atrav´es de sugest˜oes) ou cadastr´a-la no dicion´ario caso esteja de fato grafada corretamente. 10.1 Habilitando a verifica¸c˜ao ortogr´afica :h spell, spelllang A verifica¸c˜ao ortogr´afica atua em uma linguagem (dicion´ario) por vez, portanto, sua efetiva habilita¸c˜ao depende da especifica¸c˜ao desta linguagem. Por exemplo, para habilitar no arquivo em edi¸c˜ao a verifica¸c˜ao ortogr´afica na l´ıngua portu- guesa (pt), assumindo-se a existˆencia do dicion´ario em quest˜ao: :setlocal spell spelllang=pt ou de forma abreviada: :setl spell spl=pt Trocando-se setlocal (setl) por apenas set (se) faz com que o comando tenha efeito global, isto ´e, todos os arquivos da sess˜ao corrente do Vim estariam sob efeito da verifica¸c˜ao ortogr´afica e do mesmo dicion´ario (no caso o pt). A desabilita¸c˜ao da verifica¸c˜ao d´a-se digitando:
  • 82. 72 Verifica¸c˜ao Ortogr´afica :setlocal nospell :set nospell (efeito global) Caso queira-se apenas alterar o dicion´ario de verifica¸c˜ao ortogr´afica, suponha para a l´ıngua inglesa (en), basta: :setlocal spelllang=en :set spelllang=en (efeito global) 10.1.1 Habilita¸c˜ao autom´atica na inicializa¸c˜ao :h autocmd, Filetype, BufNewFile, BufRead `As vezes torna-se cansativo a digita¸c˜ao expl´ıcita do comando de habilita¸c˜ao da verifica¸c˜ao ortogr´afica sempre quando desejada. Seria conveniente se o Vim habilitasse automaticamente a verifica¸c˜ao para aqueles tipos de arquivos que comumente fazem uso da verifica¸c˜ao ortogr´afica, como por exemplo arquivos “texto”. Isto ´e poss´ıvel editando-se o arquivo de configura¸c˜ao do Vim .vimrc (veja Cap. 12) e incluindo as seguintes linhas: autocmd Filetype text setl spell spl=pt autocmd BufNewFile,BufRead *.txt setl spell spl=pt Assim habilita-se automaticamente a verifica¸c˜ao ortogr´afica usando o dicion´a- rio da l´ıngua portuguesa (pt) para arquivos do tipo texto e os terminados com a extens˜ao .txt. Mais tecnicamente, diz-se ao Vim para executar o co- mando setl spell spl=pt sempre quando o tipo do arquivo (Filetype) for text (texto) ou quando um arquivo com extens˜ao .txt for carregado (BufRead) ou criado (BufNewFile). 10.2 O dicion´ario de termos A qualidade da verifica¸c˜ao ortogr´afica do Vim est´a diretamente ligada `a com- pletude e corretude do dicion´ario da linguagem em quest˜ao. Dicion´arios pouco completos s˜ao inconvenientes `a medida que acusam falso positivos em demasia; pior, dicion´arios contendo palavras grafadas incorretamente, al´em de acusarem falso positivos, induzem o usu´ario ao erro ao sugerirem grafias erradas. ´E razoavelmente comum o Vim j´a vir instalado com dicion´arios de relativa qua- lidade para algumas linguagens (ao menos inglˆes, habitualmente). Entretanto, ainda ´e raro para a maioria das instala¸c˜oes do Vim trazer por default um di- cion´ario realmente completo e atualizado da l´ıngua portuguesa. A pr´oxima se¸c˜ao sintetiza, pois, os passos para a instala¸c˜ao de um excelente—e dispon´ıvel livremente—dicion´ario de palavras para a l´ıngua portuguesa.
  • 83. 10.2 O dicion´ario de termos 73 10.2.1 Dicion´ario portuguˆes segundo o acordo ortogr´afico A equipe do projeto BrOffice.org e seus colaboradores mantˆem e disponibili- zam livremente um grandioso dicion´ario de palavras da l´ıngua portuguesa. Al´em do expressivo n´umero de termos, o dicion´ario contempla as mudan¸cas ortogr´a- ficas definidas pelo Acordo Ortogr´afico [8] que entraram em vigor no in´ıcio de 2009. A instala¸c˜ao envolve trˆes passos, s˜ao eles: 1. obten¸c˜ao do dicion´ario atrav´es do site BrOffice.org; 2. convers˜ao para o formato interno de dicion´ario do Vim; e 3. instala¸c˜ao dos arquivos resultantes. Obten¸c˜ao do dicion´ario O dicion´ario pode ser obtido no site do br.office.org [9]. O arquivo baixado encontra-se compactado no formato Zip, bastando portanto descompact´a-lo com qualquer utilit´ario compat´ıvel com este formato, por exemplo, o comando unzip. Convers˜ao do dicion´ario :h mkspell Ap´os a descompacta¸c˜ao, os arquivos pt_BR.aff e pt_BR.dic, extra´ıdos no dire- t´orio corrente1 , ser˜ao usados para a cria¸c˜ao dos dicion´arios no formato interno do Vim2 . A convers˜ao propriamente dita ´e feita pelo pr´oprio Vim atrav´es do comando mkspell: 1. Carrega-se o Vim a partir do diret´orio onde foram extra´ıdos pt_BR.aff e pt_BR.dic 2. O comando mkspell ´e ent˜ao executado como: :mkspell pt pt_BR O Vim ent˜ao gera um arquivo de dicion´ario da forma pt.codifica¸c~ao.spl, onde codifica¸c~ao ´e a codifica¸c˜ao de caracteres do sistema, normalmente utf-8 ou latin1; caso queira-se um dicion´ario em uma codifica¸c˜ao diferente da padr˜ao ser´a preciso ajustar a vari´avel encoding antes da invoca¸c˜ao do comando mkspell: :set encoding=codifica¸c~ao :mkspell pt pt_BR 1Eventualmente, dependendo da vers˜ao do pacote de corre¸c˜ao ortogr´afica, os arquivos de dicion´ario podem ser extra´ıdos no subdiret´orio dictionaries ou outro qualquer. 2O formato interno de dicion´ario do Vim assegura melhor desempenho, em termos de agilidade e consumo de mem´oria, quando a verifica¸c˜ao ortogr´afica do editor encontra-se em opera¸c˜ao.
  • 84. 74 Verifica¸c˜ao Ortogr´afica Instala¸c˜ao do(s) dicion´ario(s) gerado(s) :h runtimepath Finalmente, o dicion´ario gerado—ou os dicion´arios, dependendo do uso ou n˜ao de codifica¸c˜oes diferentes—deve ser copiado para o subdiret´orio spell/ dentro de qualquer caminho (diret´orio) que o Vim “enxergue”. A lista de caminhos lidos pelo Vim encontra-se na vari´avel runtimepath, que pode ser inspecionada atrav´es de: :set runtimepath ´E suficiente ent˜ao copiar o dicion´ario pt.codifica¸c~ao.spl para o subdiret´o- rio spell/ em qualquer um dos caminhos listados atrav´es do comando mostrado. 10.3 Comandos relativos `a verifica¸c˜ao ortogr´a- fica 10.3.1 Encontrando palavras desconhecidas Muito embora o verificador ortogr´afico cheque imediatamente cada palavra digi- tada, sinalizando-a ao usu´ario caso n˜ao a reconhe¸ca, `as vezes ´e mais apropriado realizar a verifica¸c˜ao ortogr´afica do documento por inteiro. O Vim disp˜oe de comandos espec´ıficos para busca e movimenta¸c˜ao em palavras grafadas incorre- tamente (desconhecidas) no escopo do documento, dentre eles: ]s ..... vai para a pr´oxima palavra desconhecida [s ..... como o ]s, mas procura no sentido oposto Ambos os comandos aceitam um prefixo num´erico, que indica a quantidade de movimenta¸c˜oes (buscas). Por exemplo, o comando 3]s vai para a terceira palavra desconhecida a partir da posi¸c˜ao atual. 10.3.2 Tratamento de palavras desconhecidas H´a basicamente duas opera¸c˜oes poss´ıveis no tratamento de uma palavra apon- tada pelo verificador ortogr´afico do Vim como desconhecida: 1. corrigi-la – identificando o erro com ou sem o aux´ılio das sugest˜oes do Vim. 2. cadastr´a-la no dicion´ario – ensinando o Vim a reconhecer sua grafia. Assume-se nos comandos descritos nas se¸c˜oes a seguir que o cursor do editor encontra-se sobre a palavra marcada como desconhecida.
  • 85. 10.3 Comandos relativos `a verifica¸c˜ao ortogr´afica 75 Corre¸c˜ao de palavras grafadas incorretamente ´E poss´ıvel que na maioria das vezes o usu´ario perceba qual foi o erro cometido na grafia, de forma que o pr´oprio possa corrigi-la sem aux´ılio externo. No entanto, algumas vezes o erro n˜ao ´e evidente, e sugest˜oes fornecidas pelo Vim podem ser bastante convenientes. Para listar as sugest˜oes para a palavra em quest˜ao executa-se: z= ..... solicita sugest~oes ao verificador ortogr´afico Se alguma das sugest˜oes ´e v´alida – as mais prov´aveis est˜ao nas primeiras posi¸c˜oes – ent˜ao basta digitar seu prefixo num´erico e pressionar Enter. Se nenhuma sugest˜ao for adequada, basta simplesmente pressionar Enter e ignorar a cor- re¸c˜ao. Cadastramento de novas palavras no dicion´ario Por mais completo que um dicion´ario seja, eventualmente palavras, especial- mente as de menor abrangˆencia, ter˜ao que ser cadastradas a fim de aprimorar a exatid˜ao da verifica¸c˜ao ortogr´afica. A manuten¸c˜ao do dicion´ario d´a-se pelo cadastramento e retirada de palavras: zg ..... adiciona a palavra no dicion´ario zw ..... retira a palavra no dicion´ario, marcando-a como ‘desconhecida’
  • 86. Cap´ıtulo 11 Salvando Sess˜oes de Trabalho Suponha a situa¸c˜ao em que um usu´ario est´a trabalhando em um projeto no qual v´arios arquivos s˜ao editados simultaneamente; quatro arquivos est˜ao abertos, algumas macros foram criadas e vari´aveis que n˜ao constam no vimrc foram de- finidas. Em uma situa¸c˜ao normal, se o Vim for fechado a quase totalidade dessas informa¸c˜oes se perde1 ; para evitar isto uma sess˜ao pode ser criada, gerando-se um “retrato do estado atual”, e ent˜ao restaurada futuramente pelo usu´ario—na pr´atica ´e como se o usu´ario n˜ao tivesse sa´ıdo do editor. Uma sess˜ao do Vim guarda, portanto, uma s´erie de informa¸c˜oes sobre a edi¸c˜ao corrente, de modo a permitir que o usu´ario possa restaur´a-la quando desejar. Sess˜oes s˜ao bastante ´uteis, por exemplo, para se alternar entre diferentes proje- tos, carregando-se rapidamente os arquivos e defini¸c˜oes relativas a cada projeto. 11.1 O que uma sess˜ao armazena? Uma sess˜ao ´e composta das seguintes informa¸c˜oes: • Mapeamentos globais • Vari´aveis globais • Arquivos abertos incluindo a lista de buffers • Diret´orio corrente (:h curdir) • Posi¸c˜ao e tamanho das janelas (o layout) 1Algumas informa¸c˜oes, no entanto, s˜ao automaticamente armazenadas no arquivo viminfo; veja :h viminfo
  • 87. 11.2 Criando sess˜oes 77 11.2 Criando sess˜oes Sess˜oes s˜ao criadas atrav´es do comando :mksession: :mks[ession] sessao.vim .... cria a sess~ao e armazena-a em sessao.vim :mks[ession]! sessao.vim ... salva a sess~ao e sobrescreve-a em sessao.vim 11.3 Restaurando sess˜oes Ap´os gravar sess˜oes, elas podem ser carregadas ao iniciar o Vim: vim -S sessao.vim ou ent˜ao de dentro do pr´oprio Vim (no modo de comando): :so sessao.vim Ap´os restaurar a sess˜ao, o nome da sess˜ao corrente ´e acess´ıvel atrav´es de uma vari´avel interna “v:this_session”; caso queira-se exibir na linha de comando o nome da sess˜ao ativa (incluindo o caminho), faz-se: :echo v:this_session Podemos fazer mapeamentos para atualizar a sess˜ao atual e exibir detalhes da mesma: mapeamento para gravar sess~ao nmap F4 :waBarexe mksession! . v:this_sessionCR:so ~/sessions/ mapeamento para exibir a sess~ao ativa map s-F4 esc:echo v:this_sessioncr 11.4 Viminfo Se o Vim for fechado e iniciado novamente, normalmente perder´a uma por¸c˜ao consider´avel de informa¸c˜oes. A diretiva viminfo pode ser usada para memorizar estas informa¸c˜oes. • Hist´orico da linha de comando • Hist´orico de buscas • Hist´orico de entradas input-line history • Conte´udo de registros n˜ao vazios • Marcas de v´arios arquivos
  • 88. 78 Salvando Sess˜oes de Trabalho • ´Ultimo padr˜ao de busca/substitui¸c˜ao • A lista de buffers • Vari´aveis globais Deve-se colocar no arquivo de configura¸c˜ao algo como: set viminfo=%,’50,100,/100,:100,n Algumas op˜oes da diretiva viminfo: ! Quando inclu´ıdo salva e restaura vari´aveis globais (vari´aveis com letra mai´us- cula) e que n˜ao cont´em letras em min´usculo como MANTENHAISTO. ” N´umero m´aximo de linhas salvas para cada registro. % Quando inclu´ıdo salva e restaura a lista de buffers. Caso o Vim seja iniciado com um nome como argumento, a lista de buffers n˜ao ´e restaurada. Buffers sem nome e buffers de ajuda n˜ao s˜ao armazenados no viminfo. ’ N´umero m´aximo de arquivos rec´em editados. / M´aximo de itens do hist´orico de buscas. : M´aximo de itens do hist´orico da linha de comando N´umero m´aximo de linhas salvas por cada registro, se zero os registros n˜ao ser˜ao salvos. Quando n˜ao inclu´ıdo, todas as linhas s˜ao salvas. Para ver mais op¸c˜oes sobre o arquivo ‘viminfo’ leia ‘:h viminfo’. Pode-se tam- b´em usar um arquivo de “Sess˜ao”. A diferen¸ca ´e que ‘viminfo’ n˜ao depende do local de trabalho (escopo). Quando o arquivo ‘viminfo’ existe e n˜ao est´a vazio, as informa¸c˜oes novas s˜ao combinadas com as existentes. A op¸c˜ao ‘viminfo’ ´e uma string contendo informa¸c˜oes sobre o que deve ser armazenado, e cont´em limites de o quanto vai ser armazenado para cada item.
  • 89. Cap´ıtulo 12 Como Editar Preferˆencias no Vim O arquivo de preferˆencias do Vim ´e nomeado vimrc, um arquivo oculto que normalmente encontra-se no diret´orio de trabalho (home) do usu´ario: ~/.vimrc /home/usuario/.vimrc No sistema operacional Windows o arquivo costuma ser: ~_vimrc c:documents and settingsusuario_vimrc 12.1 Onde colocar plugins e temas de cor No Windows deve haver uma pasta chamada ‘vimfiles’ (caso n˜ao exista deve-se cri´a-la), que fica em: c:documents and settingsusuariovimfiles No GNU/Linux a pasta de arquivos do Vim ´e chamada .vim, comumente ar- mazenada em /home/user/.vim Tanto em .vim como vimfiles encontram-se usualmente as seguintes pastas: vimfiles ou .vim | +--color
  • 90. 80 Como Editar Preferˆencias no Vim | +--doc | +--syntax | +--plugin Os plugins, como se pode deduzir, devem ser colocados no diret´orio denominado plugin. Na se¸c˜ao Plugins 15 (p. 106) est˜ao descritos alguns plugins para o Vim. 12.2 Coment´arios Coment´arios s˜ao linhas que s˜ao ignoradas pelo interpretador Vim e servem nor- malmente para descri¸c˜ao de comandos e a¸c˜oes, deixando portanto mais leg´ıvel e did´atico o arquivo de configura¸c˜ao. Uma linha ´e um coment´ario se seu primeiro caractere ´e uma aspa ‘’: linhas come¸cadas com aspas s~ao coment´arios e portanto ser~ao ignoradas pelo Vim Recomenda-se usar coment´arios ao adicionar ou modificar comandos no arquivo vimrc, pois assim torna-se mais f´acil futuras leituras e modifica¸c˜oes neste ar- quivo. 12.3 Efetiva¸c˜ao das altera¸c˜oes no vimrc As altera¸c˜oes no vimrc s´o ser˜ao efetivadas na pr´oxima vez que o Vim for aberto, a n˜ao ser que o recarregamento do arquivo de configura¸c˜ao seja instru´ıdo expli- citamente: :source ~/vimrc ....... se estiver no GNU/Linux :source ~/_vimrc ...... caso use o Windows :so arquivo ........... ‘so’ ´e uma abrevia¸c~ao de ‘source’ 12.4 Set Os comandos set, respons´aveis por atribuir valores `a vari´aveis, podem ser co- locados no .vimrc: set nu ou digitados como comandos: :set nu
  • 91. 12.4 Set 81 set number ............... mostra numera¸c~ao de linhas set nu ................... simplifica¸c~ao de ‘number’ set showmode ............. mostra o modo em que estamos set showcmd .............. mostra no status os comandos inseridos set tabstop=4 ............ tamanho das tabula¸c~oes set ts=4 ................. simplifica¸c~ao de ‘tabstop’ set shiftwidth=4 ......... quantidade de espa¸cos de uma tabula¸c~ao set sw=4 ................. simplifica¸c~ao de ‘shiftwidth’ syntax on ................ habilita cores syn on ................... simplifica¸c~ao de ‘syntax’ colorscheme tema ......... esquema de cores ‘syntax highlight’ autochdir ................ configura o diret´orio de trabalho set hls .................. destaca com cores os termos procurados set incsearch ............ habilita a busca incremental set ai ................... auto identa¸c~ao set aw ................... salva automaticamente ao trocar de ‘buffer’ set ignorecase ........... ignora mai´usculas e min´usculas nas buscas set ic ................... simplifica¸c~ao de ignorecase set smartcase ............ numa busca em mai´usculo habilita ‘case’ set scs .................. sin^onimo de ‘smartcase’ set backup ............... habilita a cria¸c~ao de arquivos de backup set bk ................... simplifica¸c~ao de ‘backup’ set backupext=.backup .... especifica a extens~ao do arquivo de backup set bex=.backup .......... simplifica¸c~ao de backupext set backupdir=~/.backup,./ diret´orio(s) para arquivos de backup set bdir ................. simplifica¸c~ao de ‘backupdir’ set nobackup ............. evita a cria¸c~ao de arquivos de backup ste nobk ................. simplifica¸c~ao de ‘nobackup’ set cursorline ........... abrevia¸c~ao de cursor line (destaca linha atual) set cul .................. simplifica¸c~ao de ‘cursorline’ set ttyfast .............. melhora o redraw de janelas. set columns=88 ........... deixa a janela com 88 colunas. set mousemodel=popup ..... exibe o conte´udo de folders e sugest~oes spell set viminfo=%,’50,100,/100,:100,n armazena op¸c~oes (buffers) Se ao iniciar o vim obtivermos mensagens de erros e houver d´uvida se o erro ´e no vim ou em sua configura¸c˜ao, pode-se inicia-lo sem que o mesmo carregue o arquivo ‘.vimrc’. :vim -u NONE
  • 92. 82 Como Editar Preferˆencias no Vim 12.5 Ajustando par´agrafos em modo normal O comando ‘gqap’ ajusta o par´agrafo atual em modo normal. usando a op¸c˜ao ‘:set nojoinspaces’ o vim colocar´a dois espa¸cos ap´os o ponto final ao se ajustar os par´agrafos. geralmente usamos ‘^I’ para representar uma tabula¸c˜ao Tab, e ‘$’ para in- dicar o fim de linha. Mas ´e poss´ıvel customizar essas op¸c˜oes. 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 ´e mostrado pelo primeiro caracter {char1} e seguido por {char2} - trail:{char} Esse caracter representa os espa¸cos em branco. - extends:{char} Esse caracter representa o in´ıcio do fim da linha sem quebr´a-la Est´a op¸c~ao funciona com a op¸c~ao 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 op¸c~ao desabilita a quebra de linha set listchars=extends:+ Caso esteja usando o gvim pode setar um esquema de cores set colo desert 12.6 Exibindo caracteres invis´ıveis :set list
  • 93. 12.7 Definindo registros previamente 83 12.7 Definindo registros previamente Definindo uma macro de nome s para ordenar e retirar linhas duplicadas let @s=:sort u Para executar o registro s definido acima fa¸ca: @s O Vim colocar´a no comando :sort -u Bastando pressionar Enter. Observa¸c˜ao: Este registro pr´evio pode ficar no vimrc ou ser digitado em comando “:” :5,20sort u da linha 5 at´e a linha 20 ordene e retire duplicados :sort n ordene meu documento considerando n´umeros isto ´e ´util pois se a primeira coluna contiver n´umeros a ordena¸c~ao pode ficar errada caso n~ao usemos o par^ametro ‘‘n’’ 12.8 Mapeamentos :h key-mapping, mapping, index Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende da criatividade do usu´ario e do quanto conhece o Vim, com eles podemos con- trolar a¸c˜oes com quaisquer teclas, mas antes temos que saber que para criar mapeamentos, precisamos conhecer a maneira de representar as teclas e combi- na¸c˜oes. Alguns exemplos: tecla ....... tecla mapeada c-x ....... Ctrl-x left ...... seta para a esquerda right ..... seta para a direita c-m-a ..... Ctrl-Alt-a cr ........ Enter Esc ....... Escape leader .... normalmente bar ....... | pipe cword ..... palavra sob o cursor
  • 94. 84 Como Editar Preferˆencias no Vim cfile ..... arquivo sob o cursor cfile ..... arquivo sob o cursor sem extens~ao sfile ..... conte´udo do arquivo sob o cursor left ...... salta um caractere para esquerda up ........ equivale clicar em ‘seta acima’ m-f4 ...... a tecla alt - m mais a tecla f4 c-f ....... Ctrl-f bs ........ backspace space ..... espa¸co tab ....... tab No Vim podemos mapear uma tecla para o modo normal, realizando determi- nada opera¸c˜ao e a mesma tecla pode desempenhar outra fun¸c˜ao qualquer em modo de inser¸c˜ao 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 ´unica diferen¸ca nos mapeamentos acima ´e que o mapeamento para modo de inser¸c˜ao come¸ca com ‘i’, assim como para o modo “comando” ‘:’ come¸ca com ‘c’ no caso ‘cmap’. O comando ‘:echo’ pode ser abreviado assim: ‘:ec’. 12.8.1 Recarregando o arquivo de configura¸c˜ao Cada altera¸c˜ao no arquivo de configura¸c˜ao do Vim s´o ter´a efeito na pr´oxima vez que vocˆe abrir o Vim a menos que vocˆe 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/_vimrcCR nmap F12 :C-usource ~/_vimrc BAR echo Vimrc recarregado!CR else map ,v :e $HOME/.vimrcCR nmap F12 :C-usource ~/.vimrc BAR echo Vimrc recarregado!CR endif Agora basta pressionar “F12” em modo normal e as altera¸c˜oes passam a valer instantaneamente, e para chamar o ‘vimrc’ basta usar. ,v Os mapeamentos abaixo s˜ao ´uteis para quem escreve c´odigos HTML, permi- tem inserir caracteres reservados do HTML usando uma barra invertida para proteger os mesmos, o Vim substituir´a os “barra alguma coisa” pelo caractere correspondente.
  • 95. 12.8 Mapeamentos 85 inoremap amp; amp;amp; inoremap lt; amp;lt; inoremap gt; amp;gt; inoremap . amp;middot; O termo inoremap significa: em modo de inser¸c˜ao n˜ao remapear, ou seja ele mapeia o atalho e n˜ao permite que o mesmo seja remapeado, e o mapeamento s´o funciona em modo de inser¸c˜ao, isso significa que um atalho pode ser mapeado para diferentes modos de opera¸c˜ao. Veja este outro mapeamento: map F11 Esc:set nu!cr Permite habilitar ou desabilitar n´umeros de linha do arquivo corrente. A excla- ma¸c˜ao ao final torna o comando booleano, ou seja, se a numera¸c˜ao estiver ativa ser´a desabilitada, caso contr´ario ser´a ativada. O “cr” ao final representa um Enter. 12.8.2 Limpando o “registro” de buscas A cada busca, se a op¸c˜ao ‘hls’1 estiver habilitada o Vim faz um destaque co- lorido, para desabilitar esta op¸c˜ao pode-se criar um mapeamento qualquer, no caso abaixo usando a combina¸c˜ao de teclas “S-F11”. nno S-F11 Esc:let @/=CR ´E um mapeamento para o modo normal que faz com que a combina¸c˜ao de teclas Shift-F11 limpe o “registro” de buscas 12.8.3 Destacar palavra sob o cursor nmap s-f :let @/=CR O atalho acima ‘s-f’ corresponde a ‘Shift-f’. 12.8.4 Contar ocorrˆencias de uma palavra contagem de ocorr^encias de uma palavra (case insensitive) busca somente ocorr^encias exatas nmap F4 escmz:%s/c(c-r=expand(cword)cr)//gncr‘z busca parcial, ou seja acha palavra como parte de outra nmap s-F4 escmz:%s/c(c-r=expand(cword)cr)//gncr‘z 1hls ´e uma abrevia¸c˜ao de hightlight search
  • 96. 86 Como Editar Preferˆencias no Vim 12.8.5 Remover linhas em branco duplicadas map ,d Esc:%s/(^n{2,})/r/gcr No mapeamento acima estamos associando o atalho: ,d . . . `a a¸c˜ao desejada, fazer com que linhas em branco sucessivas sejam substitu´ı- das por uma s´o linha em branco, vejamos como funciona: map ......... mapear ,d .......... atalho que quermos Esc ....... se estive em modo de inser¸c~ao sai : ........... em modo de comando % ........... em todo o arquivo s ........... substitua n .......... quebra de linha {2,} ........ duas ou mais vezes r .......... trocado por r Enter g ........... globalmente cr ........ confirma¸c~ao do comando As barras invertidas podem n˜ao ser usadas se o seu Vim estiver com a op¸c˜ao magic habilitada :set magic Por acaso este ´e um padr˜ao portanto tente usar assim pra ver se funciona map ,d :%s/n{2,}/r/gcr 12.8.6 Mapeamento para Calcular Express˜oes Os mapeamentos abaixo exibem o resultado das quatro opera¸c˜oes b´asicas (soma, subtra¸c˜ao, multiplica¸c˜ao e divis˜ao). O primeiro para o modo normal no qual posiciona-se o cursor no primeiro caractere da express˜ao tipo“5*9”e em seguida pressiona-se “Shift-F1”, o segundo para o modo insert em que, ap´os digitada a express˜ao pressiona-se o mesmo atalho. calculadora map s-f1 esc0myEA=c-r=c-rmenteresc imap s-f1 spaceescmyBEa=c-r=c-rmenterdel Para efetuar c´alculos com maior precis˜ao e tamb´em resolver problemas como potˆencias ra´ızes, logaritmos pode-se mapear comandos externos, como a biblio- teca matem´atica da linguagem de programa¸c˜ao Python. Neste link [10] h´a um manual que ensina a realizar este procedimento, ou acesse o cap´ıtulo 2.16 na p´agina 17.
  • 97. 12.9 Autocomandos 87 12.8.7 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 Inser¸c~ao Mover linhas com Ctrl-↓ ou Ctrl-↑: tem que estar em modo normal! nmap C-Down ddp nmap C-Up ddkP Salvando com uma tecla de fun¸c˜ao: salva com F9 nmap F9 :wcr F10 - sai do Vim nmap F10 Esc:qcr 12.8.8 Convertendo as iniciais de um documento para mai´us- culas MinusculasMaiusculas: converte a primeira letra de cada frase para MAI´USCULAS nmap ,mm :%s/C([.!?][])’]*($|[ ])_s*)(l)/1U3/gCR Caso queira confirma¸c~ao coloque uma letra ‘‘c’’ no final da linha acima: (...) 3/gcCR 12.9 Autocomandos :h autocmd.txt Autocomandos habilitam comandos autom´aticos para situa¸c˜oes espec´ıficas. Para executar determinada a¸c˜ao ao iniciar um novo arquivo o autocomando dever´a obedecer este padr˜ao: au BufNewFile tipo a¸c~ao Veja um exemplo: au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim
  • 98. 88 Como Editar Preferˆencias no Vim No exemplo acima o Vim aplica autocomandos para arquivos novos“BufNewfile” ou existentes “BufRead” terminados em txt, e para estes tipos carrega um ar- quivo de syntax, ou seja, um esquema de cores espec´ıfico. http://aurelio.net/doc/vim/txt.vim coloque em ~/.vim/syntax au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim Para arquivos do tipo texto ‘*.txt’ use um arquivo de syntax em particular. O autocomando abaixo coloca um cabe¸calho para scripts bash caso a linha 1 esteja vazia, observe que os arquivos em quest˜ao tem que ter a extens˜ao ‘.sh’. au BufNewFile,BufRead *.sh if getline(1) == | normal ,sh Para configurar o vim de modo que o diret´orio corrente fique no path coloque este c´odigo no ‘vimrc’. fonte: wikia - wiki sobre o vim if exists(’+autochdir’) set autochdir else autocmd BufEnter * silent! lcd %:p:h:gs/ / / endif 12.9.1 Exemplos pr´aticos de autocomandos :h expandtab, retab Detectando indenta¸c˜ao fora do padr˜ao H´a situa¸c˜oes em que ´e necess´aria a uniformiza¸c˜ao de a¸c˜oes, por exemplo, em c´odigos Python deve-se manter um padr˜ao para a indenta¸c˜ao, ou ser´a com es- pa¸cos ou ser´a com tabula¸c˜oes, n˜ao se pode misturar os dois pois o interpretador retornaria um erro. Outra situa¸c˜ao em que misturar espa¸cos com tabula¸c˜oes ocasiona erros ´e em c´odigos LATEX, ao compilar o documento a formata¸c˜ao n˜ao sai como desejado. At´e que se perceba o erro leva um tempo. Para configurar o vim de forma que ele detecte este tipo de erro ao entrar no arquivo: au! VimEnter * match ErrorMsg /^t+/ explica¸c~ao para o autocomando acima au! ............... automaticamente VimEnter .......... ao entrar no vim * ................. para qualquer tipo de arquivo match ErrorMsg .... destaque como erro / ................. inicio de um padr~ao ^ ................. come¸co de linha t ................ tabula¸c~ao + ................ uma vez ou mais / ................. fim do padr~ao de buscas
  • 99. 12.10 Fun¸c˜oes 89 Para evitar que este erro se repita, ou seja, que sejam adicionados no come¸co de linha espa¸cos no lugar de tabula¸c˜oes adiciona-se ao ˜/.vimrc set expandtab ´E perfeitamente poss´ıvel um autocomando que fa¸ca direto a substitui¸c˜ao de tabula¸c˜oes por espa¸cos, mas neste caso n˜ao ´e recomendado que o autocomando se aplique a todos os tipos de aquivos. Inserindo automaticamente modelos de documento Pode-se criar um autocomando para inserir um modelo de documento ‘html’ por exemplo de forma autom´atica, ou seja, se vocˆe criar um novo documento do tipo ‘html’ o vim colocar´a em seu conte´udo um modelo pre-definido. au BufNewFile *.html 0r ~/.vim/skel/skel.html 12.10 Fun¸c˜oes 12.10.1 Fechamento autom´atico de parˆenteses -------------------------------------- Ativa fechamento autom´atico para par^entese Set automatic expansion of parenthesis/brackets inoremap ( ()Esc:call BC_AddChar(‘‘)’’)cri inoremap { {}Esc:call BC_AddChar(‘‘}’’)cri inoremap [ []Esc:call BC_AddChar(‘‘]’’)cri ‘‘ ’’ ‘‘’’Esc:call BC_AddChar(‘‘’’)cri mapeia Ctrl-j para pular fora de par^enteses colchetes etc... inoremap C-j Esc:call search(BC_GetChar(), ‘‘W’’)cra 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 op¸c~ao para fechamento de par^enteses’’’
  • 100. 90 Como Editar Preferˆencias no Vim Fechamento autom´atico de par^enteses imap { {}left imap ( ()left imap [ []left pular fora dos par^enteses, colchetes e chaves, mover o cursor no modo de inser¸c~ao imap c-l Escrighta imap c-h Esclefta 12.10.2 Fun¸c˜ao 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 c´odigo n˜ao funcione acesse este link [11]. 12.10.3 Rolar outra janela Se vocˆe dividir janelas tipo Ctrl-w n pode colocar esta fun¸c˜ao 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 fun¸c˜ao ´e acionada com o atalho Alt-↑ e Alt-↓. 12.10.4 Fun¸c˜ao para numerar linhas No site wikia h´a um c´odigo de fun¸c˜ao para numerar linhas [12]
  • 101. 12.10 Fun¸c˜oes 91 12.10.5 Fun¸c˜ao para trocar o esquema de cores function! SIDSwitchColorSchemes() if exists(‘‘e’’) if g:colors_name == ’native’ colorscheme billw elseif g:colors_name == ’billw’ 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 SIDSwitchColorSchemes()CR baixe os esquemas neste link [13]. 12.10.6 Uma fun¸c˜ao para inserir cabe¸calho de script para chamar a fun¸c˜ao basta pressionar ‘,sh’ em modo normal Cria um cabe¸calho 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 modifica¸c~ao:‘‘(’’%a %d/%b/%Y hs %H:%M)) call append(3, # NOME DA SUA EMPRESA) call append(3, # Prop´osito do script) normal($) endfun map ,sh :call InsertHeadBash()cr 12.10.7 Fun¸c˜ao para inserir cabe¸calhos Python fun¸c~ao para inserir cabe¸calhos Python
  • 102. 92 Como Editar Preferˆencias no Vim 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+) 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()crA Ao editar um arquivo ser´a aberto no ´ultimo ponto em que foi editado autocmd BufReadPost * if line(’‘‘’’‘‘(’’’‘‘’’) = line(‘‘$’’) | exe ’’normal g‘‘‘ | endif Permite recarregar o Vim para que modifica¸c~oes no Pr´oprio vimrc seja ativadas com o mesmo sendo editado nmap F12 :C-usource $HOME/.vimrc BAR echo Vimrc recarregado!CR Redimensionar janelas Redimensionar a janela com Alt-seta `a direita e esquerda map M-right Esc:resize +2 CR map M-left Esc:resize -2 CR 12.10.8 Fun¸c˜ao para pular para uma linha ir para linha ir para uma linha espec´ıfica function! GoToLine() let ln = inputdialog(ir para a linha...) exe ‘‘:’’ . ln endfunction no meu caso o mapeamento ´e com Ctrl-l use o que melhor lhe convier imap S-l C-o:call GoToLine()CR nmap S-l :call GoToLine()CR
  • 103. 12.11 Como adicionar o Python ao path do Vim? 93 12.10.9 Fun¸c˜ao para gerar backup A fun¸c˜ao abaixo ´e ´util para ser usada quando vocˆe vai editar um arquivo gerando modifica¸c˜oes significativas, assim vocˆe poder´a restaurar o backup se necess´ario 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 Leaderba :call WriteBackup()CR O atalho “leader” em geral ´e a barra invertida “”, na d´uvida “:help leader”. 12.11 Como adicionar o Python ao path do Vim? Coloque o seguinte script [14] em: * ~/.vim/after/ftplugin/python.vim (on Unix systems) %* $HOME/vimfiles/after/ftplugin/python.vim (on Windows systems) python EOF import os import sys import vim for p in sys.path: # Add each directory in sys.path, if it exists. if os.path.isdir(p): # Command ‘set’ needs backslash before each space. vim.command(r‘‘s’’ % (p.replace(‘‘ ’’, r‘‘ ’’))) EOF Isto lhe permite usar ‘gf’ ou Ctrl-w Ctrl-F para abrir um arquivo sob o cursor 12.12 Criando um menu Como no Vim podemos ter infinitos comandos fica complicado memorizar tudo ´e a´ı que entram os menus, podemos colocar nossos plugins e atalhos favoritos em um menu veja este exemplo amenu Ferramentas.ExibirNomeDoTema :echo g:colors_namecr O comando acima diz:
  • 104. 94 Como Editar Preferˆencias no Vim amenu ........................ cria um menu Ferramentas.ExibirNomeDoTema . Menu plugin submenu ExibirNomeDoTema :echo g:colors_namecr ...... exibe o nome do tema atual Caso haja espa¸cos no nome a definir vocˆe pode fazer assim amenu Ferramentas.Exibir nome do tema :echo g:colors_namecr 12.13 Criando menus para um modo espec´ıfico :menu .... Normal, Visual e Operator-pending :nmenu ... Modo Normal :vmenu ... Modo Visual :omenu ... Operator-pending modo :menu! ... Insert e Comando :imenu ... Modo de inser¸c~ao :cmenu ... Modo de comando :amenu ... Todos os modos 12.14 Exemplo de menu cores menu Temas.cores.quagmire :colo quagmireCR menu Temas.cores.inkpot :colo inkpotCR menu Temas.cores.google :colo googleCR menu Temas.cores.ir_black :colo ir_blackCR menu Temas.cores.molokai :colo molokaiCR Fontes menu Temas.fonte.Inconsolata :set gfn=Inconsolata:h10CR menu Temas.fonte.Anonymous :set anti gfn=Anonymous:h8CR menu Temas.fonte.Envy Code :set anti gfn=Envy_Code_R:h10CR menu Temas.fonte.Monaco :set gfn=monaco:h9CR menu Temas.fonte.Crisp :set anti gfn=Crisp:h12CR menu Temas.fonte.Liberation Mono :set gfn=Liberation Mono:h10CR O comando “:update” Atualiza o menu rec´em modificado. Quando o co- mando “:amenu” ´E usado sem nenhum argumento o Vim mostra os menus de- finidos atualmente. Para listar todas as op¸c˜oes de menu para ‘Plugin’ por exemplo digita-se no modo de comandos “:amenu Plugin”. Ocultando as barras de ferramentas e menu :set guioptions-=m ........ oculta menus :set guioptions-=T ........ oculta icones obs: para exibir novamente repita o comando substituindo o sinal de menos por mais.
  • 105. 12.15 Outros mapeamentos 95 12.15 Outros mapeamentos Destaca espa¸cos e tabula¸c˜oes redundantes: highlight RedundantWhitespace ctermbg=red guibg=red match RedundantWhitespace /s+$| +zet/ Explicando com detalhes s ..... espa¸co + ..... uma ou mais vezes $ ...... no final da linha | ..... ou ‘‘ ’’ .. espa¸co (veja imagem acima) + ..... uma ou mais vezes ze .... at´e o fim t ..... tabula¸c~ao Portanto a express˜ao regular acima localizar´a espa¸cos ou tabula¸c˜oes no final de linha e destacar´a em vermelho. Remove espa¸cos redundantes no fim das linhas map F7 Escmz:%s/s+$//gcr‘z Um detalhe importante mz ... marca a posi¸c~ao atual do cursor para retornar no final do comando ‘z ... retorna `a marca criada Se n˜ao fosse feito isto o cursor iria ficar na linha da ´ultima substitui¸c˜ao! Abre o vim explorer map F6 Esc:vne .crbar:vertical resize -30crbar:set nonucr Podemos usar“Express˜oes Regulares2 ”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 aCREsc join lines -- Junta as linhas com Shift-F2 nmap S-F2 ADelSpace Para mais detalhes sobre buscas acesse o cap´ıtulo “6 na p´agina 42”. 2http://guia-er.sourceforge.net
  • 106. 96 Como Editar Preferˆencias no Vim 12.16 Complementa¸c˜ao com “tab” Word completion Complementa¸c~ao de palavras set dictionary+=/usr/dict/words set complete=.,w,k ------ complementa¸c~ao de palavras ---- usa o tab em modo de inser¸c~ao para completar palavras function! InsertTabWrapper(direction) let col = col(‘‘.’’) - 1 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 12.17 Abrevia¸c˜oes Abrevia¸c˜oes habilitam auto-texto para o Vim. O seu funcionamento consiste de trˆes campos, o primeiro ´e o modo no qual a abrevia¸c˜ao funcionar´a, o segundo ´e a palavra que ir´a disparar a abrevia¸c˜ao e o terceiro campo ´e a abrevia¸c˜ao propriamente dita. Para que em modo de comando ‘:’ a palavra ‘salvar’ funcione para salvar os arquivos, adiciona-se a seguinte abrevia¸c˜ao ao ‘~/.vimrc’. cab salvar wcr cr corresponde ao Enter Abaixo abrevia¸c˜oes para o modo de inser¸c˜ao: iab slas S´ergio Luiz Ara´ujo Silva iab Linux GNU/Linux iab linux GNU/Linux 12.18 Evitando arquivos de backup no disco Nota-se em algumas situa¸c˜oes que existem alguns arquivos com o mesmo nome dos arquivos que foram editados, por´em com um til (˜) no final. Esses arquivos
  • 107. 12.19 Mantendo apenas um Gvim aberto 97 s˜ao backups que o Vim gera antes de sobrescrever os arquivos, e podem desde ocupar espa¸co significativo no disco r´ıgido at´e representar falha de seguran¸ca, como por exemplo arquivos .php~ que n˜ao s˜ao interpretados pelo servidor web e exp˜oem o c´odigo-fonte. Para que os backups sejam feitos enquanto os arquivos estejam sendo escritos, por´em n˜ao mantidos ap´os terminar a escrita, utiliza-se no .vimrc: set nobackup set writebackup Fonte: Site do Eust´aquio Rangel [15]. 12.19 Mantendo apenas um Gvim aberto Essa dica destina-se apenas `a vers˜ao do Vim que roda no ambiente gr´afico, ou seja, o Gvim, pois ela faz uso de alguns recursos que s´o funcionam nesse ambiente. A meta ´e criar um comando que vai abrir os arquivos indicados em abas novas sempre na janela j´a existente. Para isso deve-se definir um script que esteja no seu path3 do sistema (e que possa ser executado de alguma forma por programas do tipo launcher no modo gr´afico) que vai ser utilizado sempre que quisermos abrir nossos arquivos dessa maneira. Para efeito do exemplo, o nome do arquivo ser´a tvim (de tabbed vim), por´em pode ser nomeado com o nome que for conveniente. A ´unica necessidade para essa dica funcionar ´e a vers˜ao do Vim ter suporte para o argumento -serverlist, o que deve ser garantido nas vers˜oes presentes na ´epoca em que esse documento foi escrito. Para fazer uma simples verifica¸c˜ao se o comando est´a dispon´ıvel, deve ser digitado em um terminal: vim --serverlist gvim --serverlist Se ambos os comandos acima resultaram em erro, o procedimento n˜ao poder´a ser implementado. Do contr´ario, deve-se utilizar o comando que teve um retorno v´alido (vim ou gvim) para criar o script. Supondo que foi o comando gvim que n˜ao retornou um erro, criamos o script da seguinte forma: #!/bin/bash if [ $# -ne 1 ] then echo Sem arquivos para editar. exit fi gvim --servername $(gvim --serverlist | head -1) --remote-tab $1 3Diret´orios nos quais o sistema busca pelos comandos
  • 108. 98 Como Editar Preferˆencias no Vim Desse modo, se for digitado tvim sem qualquer argumento, ´e exibida a mensagem de erro, do contr´ario, o arquivo ´e aberto na c´opia corrente do Gvim, em uma nova aba, por exemplo: tvim .vimrc Fonte: Site do Eust´aquio Rangel [16] 12.20 Referˆencias * http://www.dicas-l.com.br/dicas-l/20050118.php
  • 109. Cap´ıtulo 13 Um Wiki para o Vim ´E ineg´avel a facilidade que um Wiki nos traz, os documentos s˜ao indexados e linkados de forma simples. J´a pesquisei uma por¸c˜ao de Wikis e, para uso pes- soal recomendo o Potwiki. O “link” do Potwiki ´e este [17]. O Potwiki ´e um Wiki completo para o Vim, funciona localmente embora possa ser aberto remo- tamente via ssh1 . Para criar um “link” no Potwiki basta usar WikiNames, s˜ao nomes iniciados com letra mai´uscula e que contenham outra letra em mai´usculo no meio. Ao baixar o arquivo salve em ~/.vim/plugin. Mais ou menos na linha 53 do Potwiki ~/.vim/plugin/potwiki.vim vocˆe define onde ele guardar´a os arquivos, no meu caso /home/docs/textos/wiki. a linha ficou assim: call s:default(’home’,~/.wiki/HomePage) Outra forma de indicar a p´agina inicial seria colocar no seu .virmc let potwiki_home = $HOME/.wiki/HomePage 13.1 Como usar O Potwiki trabalha com WikiWords, ou seja, palavras iniciadas com letras em mai´usculo e que tenham outra letra em mai´usculo no meio (sem espa¸cos). Para iniciar o Potwiki abra o Vim e pressione ww. Leader ´e igual a - veja :help leader ww .... abra a sua HomePage wi .... abre o Wiki index 1Sistema de acesso remoto
  • 110. 100 Um Wiki para o Vim 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 ´e igual a Enter Tab.... move para a pr´oxima WikiWords BS .... move para os WikiWords anteriores (mesma p´agina) wr .... recarrega WikiWords 13.2 Salvamento autom´atico para o Wiki Procure por uma se¸c˜ao autowrite no manual do Potwiki :help potwiki O valor que est´a em zero dever´a ficar em 1 call s:default(‘autowrite’,0) 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”. 13.3 Problemas com codifica¸c˜ao de caracteres Atualmente uso o Ubuntu em casa e ele j´a usa utf-8. Ao restaurar meu“backup” do Wiki no Kurumin os caracteres ficaram meio estranhos, da´ı fiz: baixei o pacote [recode] # apt-get install recode para recodificar caracteres de ‘utf-8’ para ‘iso’ fa¸ca: recode -d u8..l1 arquivo
  • 111. Cap´ıtulo 14 H´abitos para Edi¸c˜ao Efetiva Um dos grandes problemas relacionados com os softwares ´e sua subutiliza¸c˜ao. Por in´ercia o usu´ario tende a aprender o m´ınimo para a utiliza¸c˜ao de um pro- grama e deixa de lado recursos que poderiam lhe ser de grande valia. O mantene- dor do Vim, Bram Moolenaar1 , recentemente publicou v´ıdeos e manuais sobre os “7 h´abitos para edi¸c˜ao efetiva de textos”2 , este cap´ıtulo pretende resumir alguns conceitos mostrados por Bram Moolenaar em seu artigo. 14.1 Mova-se rapidamente no texto O cap´ıtulo 3, “Movendo-se no Documento”, p´agina 24 mostra uma s´erie de comandos para agilizar a navega¸c˜ao no texto. Memorizando estes comandos ganha-se tempo consider´avel, um exemplo simples em que o usu´ario est´a na linha 345 de um arquivo decide ver o conte´udo da linha 1 e em seguida voltar `a linha 345: gg ....... vai para a linha 1 ’’ ....... retorna ao ´ultimo ponto em que estava Fica claro portanto que a navega¸c˜ao r´apida ´e um dos requisitos para edi¸c˜ao efetiva de documentos. 14.2 Use marcas veja a se¸c˜ao 3.2 na p´agina 29. ma ..... em modo normal cria uma marca ‘a’ ’a ..... move o cursor at´e a marca ‘a’ d’a .... deleta at´e a marca ‘a’ y’a .... copia at´e a marca ‘a’ 1http://www.moolenaar.net 2http://br-linux.org/linux/7-habitos-da-edicao-de-texto-efetiva
  • 112. 102 H´abitos para Edi¸c˜ao Efetiva gg ... vai para a linha 1 do arquivo G .... vai para a ´ultima linha do arquivo 0 .... vai para o in´ıcio da linha $ .... vai para o fim da linha fx ... pula at´e a pr´oxima ocorr^encia de ‘‘x’’ dfx .. deleta at´e a pr´oxima ocorr^encia de ‘‘x’’ g, ... avan¸ca na lista de altera¸c~oes g; ... retrocede na lista de altera¸c~oes p .... cola o que foi deletado/copiado abaixo P .... cola o que foi deletado/copiado acima H .... posiciona o cursor no primeiro caractere da tela M .... posiciona o cursor no meio da tela L .... posiciona o cursor na ´ultima linha da tela * ........ localiza a palavra sob o cursor % ........ localiza fechamentos de chaves, par^enteses etc. g* ....... localiza palavra parcialmente ’. apostrofo + ponto retorna ao ´ultimo local editado ’’ retorna ao local do ultimo salto Suponha que vocˆe est´a procurando a palavra ‘argc’: /argc Digita ‘n’ para buscar a pr´oxima ocorrˆencia n Um jeito mais f´acil seria: coloque a linha abaixo no seu vimrc :set hlsearch Agora use asterisco para destacar todas as ocorrˆencias do padr˜ao desejado e use a letra ‘n’ para pular entre ocorrˆencias, caso deseje seguir o caminho inverso use ‘N’. 14.3 Use quantificadores Em modo normal vocˆe pode fazer 10j ..... desce 10 linhas 5dd ..... apaga as pr´oximas 5 linhas :50 ..... vai para a linha 50 50gg .... vai para a linha 50
  • 113. 14.4 Edite v´arios arquivos de uma s´o vez 103 14.4 Edite v´arios arquivos de uma s´o vez O Vim pode abrir v´arios arquivos que contenham um determinado padr˜ao. Um exemplo seria abrir dezenas de arquivos HTML e trocar a ocorrˆencia bgcolor=ffffff Para bgcolor=eeeeee Usar´ıamos a seguinte sequˆencia de comandos: vim *.html .............................. abre os arquivos :bufdo :%s/bgcolor=‘ffffff’/bgcolor=‘eeeeee’/g substitui¸c~ao :wall .................................... salva todos :qa[ll] .................................... fecha todos Ainda com rela¸c˜ao `a edi¸c˜ao de v´arios arquivos poder´ıamos abrir alguns arquivos txt e mudar de um para o outro assim: :wn O ‘w’ significa gravar e o ‘n’ significa next, ou seja, gravar´ıamos o que foi modi- ficado no arquivo atual e mudar´ıamos para o pr´oximo. Veja tamb´em “Movendo-se no documento”, cap´ıtulo 3 p´agina 24 14.5 N˜ao digite duas vezes • O Vim complementa com ‘tab’. Veja mais na se¸c˜ao 12.16 na p´agina 96. • Use macros. Detalhes na se¸c˜ao 8.3 p´agina 62. • Use abrevia¸c˜oes coloque abrevia¸c˜oes como abaixo em seu ~/.vimrc. Veja mais na se¸c˜ao 12.17. • As abrevia¸c˜oes fazem o mesmo que auto-corre¸c˜ao e auto-texto em outros editores iab tambem tamb´em iab linux GNU/Linux No modo de inser¸c˜ao vocˆe 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 conte´udo em um registrador: ayy ... copia a linha atual para o registrador ‘a’ ap ... cola o registrador ‘a’ Crie abrevia¸c˜oes para erros comuns no seu arquivo de configura¸c˜ao ( /.vimrc):
  • 114. 104 H´abitos para Edi¸c˜ao Efetiva iabbrev teh the syntax keyword WordError teh As linhas acima criam uma abrevia¸c˜ao para erro de digita¸c˜ao da palavra ‘the’ e destaca textos que vocˆe abrir que contenham este erro. 14.6 Use dobras O Vim pode ocultar partes do texto que n˜ao est˜ao sendo utilizadas permitindo uma melhor visualiza¸c˜ao do conte´udo. Mais detalhes no cap´ıtulo 4 p´agina 30. 14.7 Use autocomandos :h autocmd.txt No arquivo de configura¸c˜ao do Vim ~/.vimrc pode-se pode criar comandos autom´aticos que ser˜ao executados diante de uma determinada circunstˆancia. O comando abaixo ser´a executado em qualquer arquivo existente, ao abrir o mesmo, posicionando o cursor no ´ultimo local editado: autocmd BufEnter * lcd %:p:h autocmd BufReadPost * if line(’) 0 line(’) = line($) | exe normal g‘ | endif Grupo de comandos para arquivos do tipo ‘html’. Observe que o autocomando carrega um arquivo de configura¸c˜ao do Vim exclusivo para o tipo html/htm e no caso de arquivos novos ‘BufNewFile’ ele j´a cria um esqueleto puxando do endere¸co 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 ap´os o corpo body au BufNewFile,BufRead *.html,*.shtml,*.htm set noautoindent augroup end 14.8 Use o File Explorer O Vim pode navegar em pastas assim:
  • 115. 14.9 Torne as boas pr´aticas um h´abito 105 vim . Vocˆe pode usar ‘j’ e ‘k’ para navegar e Enter para editar o arquivo selecionado: 14.9 Torne as boas pr´aticas um h´abito Para cada pr´atica produtiva procure adquirir um h´abito e mantenha-se atento ao que pode ser melhorado. Imagine tarefas complexas, procure um meio melhor de fazer e torne um h´abito. 14.10 Referˆencias • http://www.moolenaar.net/habits_2007.pdf por Bram Moolenaar • http://vim.wikia.com/wiki/Did_you_know
  • 116. Cap´ıtulo 15 Plugins “Plugins”1 s˜ao um meio de estender as funcionalidades do Vim, h´a“plugins”para diversas tarefas, desde wikis para o Vim at´e ferramentas de aux´ılio a navega¸c˜ao em arquivos com ´e o caso do “plugin” NerdTree [18], que divide uma janela que permite navegar pelos diret´orios do sistema a fim de abrir arquivos a serem editados. 15.1 Como testar um plugin sem instal´a-lo? :source path/plugin Caso o plugin atenda as necessidades, pode-se instal´a-lo. Este procedimento tamb´em funciona para temas de cor! No GNU/Linux ~/.vim/plugin/ No Windows ~/vimfiles/plugin/ Obs: Caso ainda n˜ao exista o diret´orio, ele pode ser criado pelo pr´oprio usu´ario Exemplo no GNU/Linux + /home/usuario/ | | + .vim | | + plugin 1Plugins s˜ao recursos que se adicionam aos programas
  • 117. 15.2 Atualizando a documenta¸c˜ao dos plugins 107 Obs: Alguns plugins dependem da vers˜ao do Vim, para saber qual a que est´a atualmente instalada: :ve[rsion] 15.2 Atualizando a documenta¸c˜ao dos plugins :h helptags Caso seja adicionado algum arquivo de documenta¸c˜ao em ‘~/.vim/doc’ pode-se gerar novamente as tags “links” para navega¸c˜ao de ajuda. :helptags $VIMRUNTIME/doc :helptags ~/.vim/doc 15.3 Plugin para LATEX Um plugin completo para LATEXest´a acess´ıvel aqui [19]. Uma vez adicionado o plugin vocˆe pode inserir seus templates em: ~/.vim/ftplugin/latex-suite/templates 15.4 Criando folders para arquivos LATEX set foldmarker=begin,end set foldmethod=marker Adicionar marcadores (labels) `as se¸c˜oes de um documento LATEX :.s/^(section)({.*})/12rlabel2 : ........... comando / ........... inicia padr~ao de busca ^ ........... come¸co de linha (palavra) . agrupa um trecho (section) agrupa ‘section’ .......... torna literal { ........... chave literal .* .......... qualquer caractere em qualquer quantidade } ........... chave literal / ........... finaliza par~ao de busca 1 .......... repeter o grupo 1 (section) 2 .......... repete o grupo 2 ({.*}) r .......... insere quebra de linha .......... insere uma barra invertida 2 .......... repete o nome da se¸c~ao
  • 118. 108 Plugins 15.5 Criando se¸c˜oes LATEX o comando abaixo substitui ==se¸c~ao== por section{se¸c~ao} :.s/^==s?([^=]*)s?==/section{1}/g : ......... comando . ......... linha atual s ......... substitua ^ ......... come¸co de linha == ........ dois sinais de igual s? ...... seguido ou n~ao de espa¸co [^=] ...... n~ao pode haver = (^ dentro de [] ´e nega¸c~ao) * ......... diz que o que vem antes pode vir zero ou mais vezes s? ...... seguido ou n~ao de espa¸co ........ insere uma barra invertida 1 ........ repete o primeiro trecho entre () 15.6 Plugin para manipular arquivos Acesse o plugin neste link [20]. Para entender este plugin acesse um v´ıdeo neste link [21]. 15.7 Complementa¸c˜ao de c´odigos O “plugin” snippetsEmu ´e um misto entre complementa¸c˜ao de c´odigos e os cha- mados modelos ou templates. Insere um trecho de c´odigo pronto, mas vai al´em disso, permitindo saltar para trechos do modelo inserido atrav´es de um atalho configur´avel de modo a agilizar o trabalho do programador. Link para bai- xar [22]. 15.7.1 Instala¸c˜ao Um artigo ensinando como instalar o “plugin” snippetsEmu pode ser lido nesse artigo na internet [23]. Outro plugin muito interessante para complementa¸c˜ao ´e o “autocompletepopup” que complementa mostrando um popup durante a digita¸c˜ao, o mesmo pode ser obtido neste link [24], em seguida coloca-se esta linha ao vimrc: let g:AutoComplPop_CompleteoptPreview = 1
  • 119. 15.8 Um wiki para o Vim 109 A linha acima faz com que o vim abra uma janela pequena com a documenta¸c˜ao de cada m´etodo que est´a sendo digitado. 15.8 Um wiki para o Vim O “plugin” wikipot implementa um wiki para o Vim no qual vocˆe define um “link” com a nota¸c˜ao WikiWord, onde um “link”´e uma palavra que come¸ca com uma letra mai´uscula e tem outra letra mai´uscula no meio Obtendo o plugin neste link [17]. 15.9 Acessando documenta¸c˜ao do Python no Vim Obtenha um plugin para esta tarefa em seu site oficial [25]. 15.10 Formatando textos planos com syntax Um plugin que adiciona syntaxe colorida a textos planos pode ser obtido neste link [26]. Veja como instalar o este plugin no cap´ıtulo 15.8. 15.11 Movimentando em camel case O plugin CamelCaseMotion [27] auxilia a navega¸c˜ao em palavras em camel case [28] ou separadas por sublinhados, atrav´es de mapeamentos similares aos que fazem a movimenta¸c˜ao normal entre strings, e ´e um recurso de grande ajuda quando o editor ´e utilizado para programa¸c˜ao. Ap´os instalado o plugin, os seguintes atalhos ficam dispon´ıveis: ,w Movimenta para a pr´oxima posi¸c˜ao camel dentro da string ,b Movimenta para a posi¸c˜ao camel anterior dentro da string ,e Movimenta para o caractere anterior `a pr´oxima posi¸c˜ao camel dentro da string Fonte: Blog do Eust´aquio Rangel [29] 15.12 Plugin FuzzyFinder Este plugin ´e a implementa¸c˜ao de um recurso do editor Texmate2 . Sua proposta ´e acessar de forma r´apida: 1. Arquivos :FuzzyFinderFile 2Editor de textos da Apple com muitos recursos
  • 120. 110 Plugins 2. Arquivos rec´em editados :FuzzyFinderMruFile 3. Comandos rec´em utilizados :FuzzyFinderMruCmd 4. Favoritos :FuzzyFinderAddBookmark, :FuzzyFinderBookmarks 5. Navega¸c˜ao por diret´orios :FuzzyFinderDir 6. Tags :FuzzyFinderTag Para ver o plugin em a¸c˜ao acesse este video para obte-lo acesse este endere¸co, para instal´a-lo basta copiar para o diret´orio /.vim/plugin. 15.13 O plugin EasyGrep Usu´arios de sistemas Unix Like3 , j´a conhecem o poder do comando grep, usando este comando procuramos palavras dentro de arquivos, este plugin simplifica esta tarefa, al´em de permitir a utiliza¸c˜ao da vers˜ao do grep nativa do Vim vimgrep, assim usu´arios do Windows tamb´em podem usar este recurso. Um comando grep funciona mais ou menos assim: grep [op¸c~oes] padr~ao /caminho Mas no caso do plugin EasyGrep fica assim: :Grep foo ........ procura pela palavra ’foo’ :GrepOptions ...... exibe as op¸c~oes de uso do plugin O plugin pode ser obtido no seguinte endere¸co, j´a sua instala¸c˜ao ´e simples, basta copiar o arquivo obtido no link acima para a pasta: ~/.vim/plugin .......... no caso do linux ~/vimfiles/plugin ...... no caso do windows Um v´ıdeo de exemplo (na verdade uma anima¸c˜ao gif) pode ser visto aqui. 15.14 O plugin SearchComplete Para que o vim complete op¸c˜oes de busca “com a tecla tab”, digita-se uma palavra parcialmente e o plugin atua, exibindo palavras que tem o mesmo in´ıcio, por exemplo: /mercatab /mercado /mercantil /mercadol´ogico 3Sistemas da fam´ılia Unix tipo o GNU/Linux
  • 121. 15.15 O plugin AutoComplete 111 Cada vez que se pressiona a tecla tab o cursor saltar´a para a pr´oxima ocor- rˆencia daquele fragmento de palavra. Pode-se obter o plugin SearchComplete no seguinte endere¸co, e para instal´a-lo basta copi´a-lo para a pasta apropriada: ~/vimfiles/plugin .......... no windows ~/.vim/plugin .............. no Gnu/Linux H´a outro plugin similar chamado CmdlineComplete dispon´ıvel neste link. 15.15 O plugin AutoComplete Este plugin trabalha exibindo sugest˜oes no modo de inser¸c˜ao, `a medida que o usu´ario digita aparece um popup com sugest˜oes para poss´ıveis complementos, bastando pressionar Enter para aceitar as sugest˜oes. Neste link, vocˆe pode fazer o download do plugin. 15.16 O plugin Ctags Ctags em si ´e um programa externo que indexa arquivos de c´odigo fonte. Ele lˆe o c´odigo fonte em busca de identificadores, declara¸c˜oes de fun¸c˜ao, vari´aveis, e constr´oi seu ´ındex de referˆencias cruzadas. Mas vamos ao plugin, mesmo por que n˜ao estamos no CtagsBook. Primeiro precisamos ter o arquivos de tags. Para tal, usamos o comando: ctags -R arquivos Normalmente o parˆametro arquivos pode ser uma express˜ao regular do tipo *.[ch] e afins. Depois de obter o arquivo de tags, vocˆe j´a pode sair usando os atalhos do plugin para navegar pelo c´odigo fonte. Com o cursor em cima de um identificador, usando o atalho ‘ctrl+]’ o cursor pula diretamente para a sua declara¸c˜ao. O atalho ‘ctrl+o’ volta o cursor para a posi¸c˜ao inicial. Quando navegando por um c´odigo fonte muito extenso com v´arios diret´o- rios, ´e mapear o caminho dos arquivos usando o caminho absoluto deles no seu diret´orio de trabalho deste jeito: find $(pwd) -regex .*py$ | xargs ctags Assim vocˆe pode copiar o arquivo de tags para todos os diret´orios e mesmo assim conseguir usar os atalhos do plugin para navegar no c´odigo fonte. Pode-se obter o programa Ctags neste link. O plugin de Ctags para o Vim est´a neste link”, e para instal´a-lo basta copi´a-lo para a pasta apropriada: ~/vimfiles/plugin .......... no windows ~/.vim/plugin .............. no Gnu/Linux
  • 122. 112 Plugins 15.17 O Plugin Project O plugin project acess´ıvel atrav´es deste link cria toda uma estrutura de geren- ciamento de projetos, para programadores ´e uma funcionalidade extremamente necess´aria, costuma-se trabalhar com v´arios arquivos da mesma fam´ılia “exten- s˜ao”, e ao clicar em um dos arquivos do projeto o mesmo ´e aberto instantanea- mente. :Project ......... abre uma janela lateral para o projeto C ............... inicia a cria¸c~ao de um projeto (recursivamente) c ............... inicia a cria¸c~ao de um projeto na pasta local Ap´os digitar o atalho de cria¸c˜ao do projeto aparecer´a uma janela para designar um nome para o mesmo, em seguida digita-se o caminho para o diret´orio do projeto, ap´os isto digita-se ‘.’ (ponto) como parˆametro, cria-se um filtro como ‘*.py’. Para criar uma entrada (acesso ao plugin) no menu do Gvim colocamos a seguinte linha no ‘vimrc’. amenu Projetos.togle PlugToggleProjectcr Pode-se definir um projeto manualmente assim: nome=~/docs/ CD=. filter=*.txt { } Ao recarregar o Vim pode-se abrir o Plugin“:Projetc”e pressionar o atalho ‘r’ para que o mesmo gere um ´ındice dos arquivos contidos no caminho indicado. 15.18 O plugin pydiction Um que completa c´odigos python assim: import sys sys.tab O plugin cont´em dois arquivos: 1. pydiction.py deve ser colocado no path 2. pydiction deve ser colocado em um lugar de sua preferˆencia Deve-se adicionar algumas linhas do .vimrc. No exemplo abaixo o dicion´ario ´e adicionado ao diret´orio /.vim/dict if has(autocmd) autocmd FileType python set complete+=k/.vim/dict/pydiction isk+=.,( endif has(autocmd) Pode-se obter o plugin neste link.
  • 123. 15.19 O plugin FindMate 113 15.19 O plugin FindMate Um plugin que agiliza a busca por arquivos na pasta pessoal, dispon´ıvel neste link. Basta coloca-lo na pasta “/home/usuario/.vim/plugins/” e digitar duas vezes v´ırgula e ele substituir´a para: :FindMate Digita-se ent˜ao uma palavra e Enter para se obter a lista de arquivos que correspondem ao padr˜ao. 15.20 Atualizando a documenta¸c˜ao dos plugins :h helptags Caso seja adicionado algum arquivo de documenta¸c˜ao em em ‘~/.vim/doc’ pode-se gerar novamente as tags “links” para navega¸c˜ao de ajuda. :helptags ~/.vim/doc
  • 124. Cap´ıtulo 16 Referˆencias • http://www.vivaolinux.com.br/artigos/impressora.php?codigo=2914 VIM avan¸cado (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
  • 125. Bibliografia [1] UNKNOWN, “PC: MS-DOS and MS-Windows”, 2009, acessado 19/05/2009, http://www.vim.org/download.php. [2] SILVA, S. L. A., “Using expression register in Vim”, 2009, acessado 14/05/2009, http://vimeo.com/2967392. [3] JARGAS, A. M., Express˜oes Regulares - Guia de Consulta R´apida. 2001, acessado em 14/05/2009, http://guia-er.sourceforge.net/. [4] ANGELO, O. H. E., “Mudan¸ca em v´arias linhas”, 2007, aces- sado em 14/05/2009, http://tech.groups.yahoo.com/group/vi-br/ message/853. [5] CHARLES CAMPBELL, “Produce increasing/decreasing columns of num- bers, dates, or daynames”, 2006, Acessado no dia 19 de agosto de 2009, http://vim.sourceforge.net/scripts/script.php?script_id=670. [6] ALMEIDA, R. Q. D., “Jun¸c˜ao de linhas com vim”, 2008, acessado em 14/05/2009, http://www.dicas-l.com.br/dicas-l/20081228.php. [7] LAKSHMANAN, Y., “Vim documentation: vim faq”, 2005, acessado 17/05/2009, http://vimdoc.sourceforge.net/htmldoc/vimfaq.html. [8] WIKIPEDIA, “Acordo Ortogr´afico de 1990”, 2009, acessado em 21/07/2009, http://pt.wikipedia.org/wiki/Acordo_Ortogr%C3% A1fico_de_1990. [9] MOURA, R. S., “Dicion´arios do Broffice.org”, 2009, acessado 14/05/2009, http://www.broffice.org/verortografico/baixar. [10] ANONYMOUS, “Scientific calculator”, 2006, acessado 14/05/2009, http: //vim.wikia.com/wiki/Scientific_calculator. [11] BOUNGA, “Writing a valid statusline”, 2004, acessado 14/05/2009, http: //vim.wikia.com/wiki/Writing_a_valid_statusline. [12] MEDLEY, B., “Number a group of lines”, 2001, acessado 14/05/2009, http://vim.wikia.com/wiki/Number_a_group_of_lines. [13] UNKNOWN, “Gvim colorscheme screenshot”, 2009, acessado 14/05/2009, http://nanasi.jp/old/colorscheme_0.html.
  • 126. 116 Referˆencias Bibliogr´aficas [14] LEGNER, “Automatically add Python paths to Vim path”, 2008, aces- sado em 14/05/2009, http://vim.wikia.com/wiki/Automatically_add_ Python_paths_to_Vim_path. [15] RANGEL, E., “Backups do Vim”, 2008, acessado 14/05/2009, http:// eustaquiorangel.com/posts/520. [16] RANGEL, E., “Instˆancia solit´aria do Vim”, 2007, acessado 14/05/2009, http://eustaquiorangel.com/posts/477. [17] STEINER, E., “potwiki.vim : Maintain a Wiki of plain text files”, 2008, acessado 14/05/2009, http://www.vim.org/scripts/script.php? script_id=1018. [18] GRENFELL, M., “The NERD tree : A tree explorer plugin for naviga- ting the filesystem”, 2009, acessado 14/05/2009, http://www.vim.org/ scripts/script.php?script_id=1658. [19] UNKNOWN, “Plugin para latex”, acessado 14/05/2009, http:// vim-latex.sourceforge.net/. [20] NATSUNO, K., “ku : An interface for anything”, 2009, aces- sado 14/05/2009, http://www.vim.org/scripts/script.php?script_ id=2337#0.1.9. [21] UNKNOWN, “Video about ku file”, 2009, acessado 14/05/2009, http://www.screencast.com/users/kana/folders/Jing/media/ 278e3c04-864f-4dcb-bb7e-8db0fdd2e383. [22] INGRAM, F., “snippetsEmu : An attempt to emulate TextMate’s snippet expansion”, 2008, acessado 14/05/2009, http://www.vim.org/scripts/ script.php?script_id=1318. [23] SILVA, S. L. A., “Instalando o plugin snippetsEmu no vim”, 2008, acesso em 13/05/2009, http://vivaotux.blogspot.com/2008/03/ instalando-o-plugin-snippetsemu-no-vim.html. [24] NISHIDA, T., “Plugin para complementa¸c˜ao autom´atica com popup”, 2009, acesso em 14/05/2009, http://www.vim.org/scripts/script.php? script_id=1879. [25] KELPE, A., “pydoc.vim : Python documentation view- and search-tool (uses pydoc)”, 2005, acessado 14/05/2009, http://www.vim.org/scripts/ script.php?script_id=910. [26] STAHLMAN, B., “Txtfmt (The Vim Highlighter) : Highlight plain text in Vim! (Beautify your documents with colors and formats.)”, 2009, acessado 14/05/2009, http://www.vim.org/scripts/script.php? script_id=2208rating=helpful#1.3. [27] KARKAT, I., “camelcasemotion : Motion through CamelCaseWords and underscore notation.” 2009, acessado em 14/05/2009, http://www.vim. org/scripts/script.php?script_id=1905.
  • 127. Referˆencias Bibliogr´aficas 117 [28] WIKIPEDIA, A. E. L., “CamelCase”, 2009, acessado 14/05/2009, http: //en.wikipedia.org/wiki/Camel_case. [29] RANGEL, E.,“Plugin do Vim para altos, baixos e rasteiros”, 2008, acessado 14/05/2009, http://eustaquiorangel.com/posts/522.
  • 128. Colaboradores Se¸c˜ao dedicada aos colaboradores do projeto vimbook
  • 129. ´Indice ´area de transferˆencia, 11 ajuda, 4 atalhos, 4, 6 autocomandos, 87, 104 backup fun¸c˜ao para gerar backup, 93 nobackup, 97 writebackup, 97 barra de status, 90 buscas intervalo, 56 clipboard, 11 colar, 9–11 copiar, 9–11 cores esquemas, 63, 81, 91 deletar, 8, 9 linhas duplicadas, 11 documentos modelos, 89 editando, 7 v´arios arquivos, 103 em caso de erros, 4 express˜oes regulares, 2 buscas, 42 fechar o programa, 8 fileExplorer, 104 folders, 104 fun¸c˜oes, 89 grep, 13 hist´orico, 13 ide, 2 indenta¸c˜ao, 48, 88 iniciar, 3, 7 linha espec´ıfica, 7 novo arquivo, 11 padr˜ao espec´ıfico, 7 jun¸c˜ao de linhas, 56 linhas numerar, 90 lista de altera¸c˜oes, 13 manual, 4 mapeamento, 4 mapeamentos, 83 exibir numera¸c˜ao de linhas, 85 globais, 87 marcas, 101 menus, 93 exemplos, 94 modo de comando, 5 modo de inser¸c˜ao, 5, 8 modo normal, 5 modo visual, 5 modos de opera¸c˜ao, 5, 8, 24 errors comuns, 6 exemplos, 5 movendo-se big words, 26 efetuando saltos, 25 em palavras grandes, 26 entre caracteres, 24 entre linhas, 24, 101 entre senten¸cas, 26 numeros incrementar, 53 ordenando, 12 par´agrafo ajustar, 82
  • 130. 120 ´Indice tabula¸c˜ao, 82, 88 path, 88 plugins arquivos, 108 camel case motion, 109 python, 109 texto plano, 109 wiki, 109 python path, 93 qunatificadores, 102 registros definindo previamente, 83 salvar o texto, 8 snippets, 108 syntax, 88 tecla ctrl, 4 tab, 96 vari´avel, 26 verifica¸ca¸c˜ao ortogr´afica, 73 vim, 2 instalar, 2 vimrc ignorando, 81 recarregando, 80, 84