P. 1
vimbook-17-04-2009

vimbook-17-04-2009

5.0

|Views: 57|Likes:
Livro em português sobre o editor de textos vim
Livro em português sobre o editor de textos vim

More info:

Published by: Sérgio Luiz Araújo Silva on Apr 17, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

10/05/2015

pdf

text

original

o editor de texto Vim

“Um livro escrito em portuguˆs sobre o editor de e texto Vim. A ideia ´ que este material cres¸a e e c torne-se uma referˆncia confi´vel e pr´tica. Use este e a a livro nos termos da Licen¸a de Documenta¸˜o Livre c ca GNU (GFDL).” Este trabalho est´ em constante aprimoramento, a e ´ fruto da colabora¸˜o de volunt´rios. Participe e ca a do desenvolvimento enviando sugest˜es e melhorias; o acesse o site do projeto no endere¸o: c http://code.google.com/p/vimbook

Vers˜o gerada em a 17 de Abril de 2009

Autores
S´rgio Luiz Ara´ jo Silva e u Douglas Adriano Augusto Eust´quio Rangel a Eduardo Otubo Gustavo Dutra . . . <voyeg3r@gmail.com> <daaugusto@gmail.com> <eustaquiorangel@gmail.com> <eduardo.otubo@gmail.com> <gustavotkg@gmail.com> . . .

Conte´ do u
1 Introdu¸˜o ca 1.1 Instala¸˜o do Vim . . . . . . . . . . . . . . . . . . . . . . . . . . ca 1.1.1 1.1.2 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 Instala¸ao no Windows . . . . . . . . . . . . . . . . . . . c˜ Instala¸ao no GNU/Linux . . . . . . . . . . . . . . . . . . c˜ 1 2 2 2 2 3 3 4 4 5 5 5 7 7 8 9 11 12 12 13 13 13 14 15 15

Dicas iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ajuda integrada . . . . . . . . . . . . . . . . . . . . . . . . . . .

Em caso de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . Como interpretar atalhos e comandos . . . . . . . . . . . . . . .

Modos de opera¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . ca Entrando em modo de edi¸˜o . . . . . . . . . . . . . . . . . . . . ca Erros comuns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Movendo-se no Documento 2.1 2.2 2.3 2.4 2.5 2.6 Big words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Os saltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Copiar e Deletar . . . . . . . . . . . . . . . . . . . . . . . . . . . Paginando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando marcadores . . . . . . . . . . . . . . . . . . . . . . . . . . Marcas globais . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Editando 3.1 3.2 3.3 Usando o grep interno do Vim . . . . . . . . . . . . . . . . . . . Deletando uma parte do texto . . . . . . . . . . . . . . . . . . . . Copiando sem deletar . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 3.4 Usando a ´rea de transferˆncia Clipboard a e . . . . . . . . .

Lista de altera¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . co

´ CONTEUDO 3.5 3.6 3.7 3.8 3.9 For¸ando a edi¸˜o de um novo arquivo . . . . . . . . . . . . . . . c ca Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Removendo linhas duplicadas . . . . . . . . . . . . . . . . . . . . Substituindo tabula¸˜es por espa¸os . . . . . . . . . . . . . . . . co c Convertendo para mai´sculas . . . . . . . . . . . . . . . . . . . . u

5 16 16 17 17 17 18 19 19 20 20 20 20 20 21 22 22 23 23 24 24 25 26 27 27 28 29 30 30 31 31 31 31 32 33

3.10 Editando em modo de comando . . . . . . . . . . . . . . . . . . . 3.11 O arquivo alternativo . . . . . . . . . . . . . . . . . . . . . . . .

3.12 Lendo um arquivo para a linha atual . . . . . . . . . . . . . . . . 3.13 Incrementando n´meros em modo normal . . . . . . . . . . . . . u 3.14 Repetindo a digita¸˜o de linhas . . . . . . . . . . . . . . . . . . . ca 3.15 Movendo um trecho de forma inusitada . . . . . . . . . . . . . .

3.16 Uma calculadora diferente . . . . . . . . . . . . . . . . . . . . . . 3.17 Desfazendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.17.1 Undo tree . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.18 Salvando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.19 Usando marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.19.1 Marcas globais . . . . . . . . . . . . . . . . . . . . . . . . 3.20 Abrindo o ultimo arquivo rapidamente . . . . . . . . . . . . . . . ´ 3.21 Modelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.22 Edi¸˜o avan¸ada de linhas . . . . . . . . . . . . . . . . . . . . . . ca c 3.23 Comentando rapidamente um trecho . . . . . . . . . . . . . . . . 3.24 Comparando arquivos com o vimdiff . . . . . . . . . . . . . . . . 4 Folders 4.1 4.2 4.3 M´todos de dobras . . . . . . . . . . . . . . . . . . . . . . . . . . e Manipulando dobras . . . . . . . . . . . . . . . . . . . . . . . . . Criando dobras usando o modo visual . . . . . . . . . . . . . . .

5 Registros 5.1 5.2 5.3 5.4 5.5 5.6 5.7 O registro sem nome “” . . . . . . . . . . . . . . . . . . . . . . . . Registros nomeados de 0 a 9 . . . . . . . . . . . . . . . . . . . . . Registro de pequenas dele¸oes - . . . . . . . . . . . . . . . . . . . c˜ Registros nomeados de “a at´ z” ou “A at´ Z” . . . . . . . . . . . e e Registros somente leitura “: . % #” . . . . . . . . . . . . . . . . . Registro de express˜es ”= . . . . . . . . . . . . . . . . . . . . . . o Registros de arrastar e mover . . . . . . . . . . . . . . . . . . . .

6 5.8 5.9

´ CONTEUDO Registro buraco negro ” . . . . . . . . . . . . . . . . . . . . . . . Registros de buscas “/” . . . . . . . . . . . . . . . . . . . . . . . . 33 33 34 34 35 35 35 36 36 37 38 39 39 40 42 42 43 44 44 45 45 45 46 46 46 49 50 51 51 51 52 52

5.10 Manipulando registros . . . . . . . . . . . . . . . . . . . . . . . . 5.11 Listando os registros atuais . . . . . . . . . . . . . . . . . . . . . 5.12 Listando arquivos abertos . . . . . . . . . . . . . . . . . . . . . . 5.13 Dividindo a janela com o pr´ximo arquivo da lista de buffers . . o 5.14 Como colocar um peda¸o de texto em um registro? . . . . . . . . c 5.15 Como criar um registro em modo visual? . . . . . . . . . . . . . . 5.16 Como definir um registro no vimrc? . . . . . . . . . . . . . . . . 5.17 Como selecionar blocos verticais de texto? . . . . . . . . . . . . . 5.18 Referˆncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 6 Buscas e Substitui¸˜es co 6.1 Usando “Express˜es Regulares” em buscas . . . . . . . . . . . . . o 6.1.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 Evitando escapes ao usar Express˜es regulares . . . . . . o

Destacando padr˜es . . . . . . . . . . . . . . . . . . . . . . . . . o Inserindo linha antes e depois . . . . . . . . . . . . . . . . . . . . Obtendo informa¸˜es do arquivo . . . . . . . . . . . . . . . . . . co Trabalhando com registradores . . . . . . . . . . . . . . . . . . . Edi¸˜es complexas . . . . . . . . . . . . . . . . . . . . . . . . . . co Indentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Corrigindo a indenta¸˜o de c´digos . . . . . . . . . . . . . . . . . ca o Usando o File Explorer . . . . . . . . . . . . . . . . . . . . . . . .

6.10 Selecionando ou deletando conte´do de tags HTML . . . . . . . . u 6.11 Substitui¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 6.12 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.13 O comando global “g” . . . . . . . . . . . . . . . . . . . . . . . . 6.14 Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6.15 Filtrando arquivos com o vimgrep . . . . . . . . . . . . . . . . . 6.16 Copiar a partir de um ponto . . . . . . . . . . . . . . . . . . . . . 6.17 Dicas das lista vi-br . . . . . . . . . . . . . . . . . . . . . . . . . 6.18 Dicas do dicas-l . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.19 Jun¸˜o de linhas com Vim . . . . . . . . . . . . . . . . . . . . . . ca

´ CONTEUDO 7 Trabalhando com Janelas 7.1 7.2 7.3 7.4 7.5 Dividindo a janela . . . . . . . . . . . . . . . . . . . . . . . . . . Abrindo e fechando janelas . . . . . . . . . . . . . . . . . . . . . Manipulando janelas . . . . . . . . . . . . . . . . . . . . . . . . . File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7 54 54 54 54 55 55 56 . . . . . . . . . . . . . . . . 57 57 58 59 59 59 60 60 60 60 60 61 62 62 63 63 63 63 64 64 64 65 65 66 66

8 Repeti¸˜o de Comandos ca 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 Repetindo a digita¸˜o de uma linha ca

Guardando trechos em “registros” . . . . . . . . . . . . . . . . . . Gravando comandos . . . . . . . . . . . . . . . . . . . . . . . . . Repetindo substitui¸˜es . . . . . . . . . . . . . . . . . . . . . . . co Repetindo comandos . . . . . . . . . . . . . . . . . . . . . . . . . Scripts Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando o comando bufdo . . . . . . . . . . . . . . . . . . . . . . Colocando a ultima busca em um comando . . . . . . . . . . . . ´ Inserindo o nome do arquivo no comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8.10 Inserindo o ultimo comando ´

8.11 Inserindo a palavra sob o cursor em um comando . . . . . . . . . 8.12 Para repetir exatamente a ultima inser¸˜o ´ ca 9 Comandos Externos 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Removendo linhas duplicadas . . . . . . . . . . . . . . . . . . . . Ordenando e removendo linhas duplicadas no Vim 7 . . . . . . . Beautifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Editando comandos longos no Linux . . . . . . . . . . . . . . . . Compilando e verificando erros . . . . . . . . . . . . . . . . . . . Grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Indent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Calculadora Cient´ ıfica com o Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9.10 Editando sa´ ıdas do Shell . . . . . . . . . . . . . . . . . . . . . . . 9.11 Log do Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . 9.12 Referˆncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e

8 10 Verifica¸˜o Ortogr´fica ca a

´ CONTEUDO 67 67 68 68 69 70 70 70 72 72 73 73 73 75 75 76 76 76 78 78 79 80 81 81 81 82 82

10.1 Habilitando a verifica¸˜o ortogr´fica . . . . . . . . . . . . . . . . ca a 10.1.1 Habilita¸˜o autom´tica na inicializa¸˜o . . . . . . . . . . ca a ca 10.2 O dicion´rio de termos . . . . . . . . . . . . . . . . . . . . . . . . a 10.2.1 Dicion´rio portuguˆs segundo o acordo ortogr´fico . . . . a e a 10.3 Comandos relativos ` verifica¸˜o ortogr´fica . . . . . . . . . . . . a ca a 10.3.1 Encontrando palavras desconhecidas . . . . . . . . . . . . 10.3.2 Tratamento de palavras desconhecidas . . . . . . . . . . . 11 Salvando Sess˜es de Trabalho o 11.1 O que uma sess˜o armazena? . . . . . . . . . . . . . . . . . . . . a 11.2 Criando sess˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 11.3 Restaurando sess˜es . . . . . . . . . . . . . . . . . . . . . . . . . o 11.4 Viminfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Como Editar Preferˆncias no Vim e 12.1 Onde colocar plugins e temas de cor . . . . . . . . . . . . . . . . 12.2 Coment´rios a . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12.3 Efetiva¸˜o das altera¸˜es no vimrc . . . . . . . . . . . . . . . . . ca co 12.4 Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5 Exibindo caracteres invis´ ıveis . . . . . . . . . . . . . . . . . . . . 12.6 Definindo macros previamente . . . . . . . . . . . . . . . . . . . . 12.7 Mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.7.1 Recarregando o arquivo de configura¸˜o . . . . . . . . . . ca 12.7.2 Limpando o “registro” de buscas . . . . . . . . . . . . . . 12.7.3 Destacar palavra sob o cursor . . . . . . . . . . . . . . .

12.7.4 Remover linhas em branco duplicadas . . . . . . . . . . . 12.7.5 Mapeamento para Calcular Express˜es . . . . . . . . . . . o 12.7.6 Mapeamentos globais . . . . . . . . . . . . . . . . . . . .

12.7.7 Convertendo as iniciais de um documento para mai´sculas 83 u 12.8 Autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.1 Exemplo pr´tico de autocomandos . . . . . . . . . . . . . a 12.9 Fun¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 12.9.1 Fechamento autom´tico de parˆnteses . . . . . . . . . . . a e 12.9.2 Fun¸˜o para barra de status . . . . . . . . . . . . . . . . . ca 12.9.3 Rolar outra janela . . . . . . . . . . . . . . . . . . . . . . 83 84 84 84 85 85

´ CONTEUDO 12.9.4 Fun¸˜o para numerar linhas . . . . . . . . . . . . . . . . . ca 12.9.5 Fun¸˜o para trocar o esquema de cores . . . . . . . . . . . ca 12.9.6 Uma fun¸˜o para inserir cabe¸alho de script . . . . . . . . ca c 12.9.7 Fun¸˜o para inserir cabe¸alhos Python . . . . . . . . . . . ca c 12.9.8 Fun¸˜o para pular para uma linha . . . . . . . . . . . . . ca 12.9.9 Fun¸˜o para gerar backup . . . . . . . . . . . . . . . . . . ca 12.10Como adicionar o Python ao path do Vim? . . . . . . . . . . . . 12.11Criando um menu . . . . . . . . . . . . . . . . . . . . . . . . . . 12.12Criando menus para um modo espec´ ıfico . . . . . . . . . . . . . . 12.13Exemplo de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.14Outros mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . 12.15Complementa¸˜o com “tab” . . . . . . . . . . . . . . . . . . . . . ca 12.16Abrevia¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 12.17Evitando arquivos de backup no disco . . . . . . . . . . . . . . . 12.18Mantendo apenas um Gvim aberto . . . . . . . . . . . . . . . . . 12.19Referˆncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 13 Um Wiki para o Vim 13.1 Como usar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Salvamento autom´tico para o Wiki . . . . . . . . . . . . . . . . a 13.3 Dicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4 Problemas com codifica¸˜o de caracteres . . . . . . . . . . . . . . ca 14 H´bitos para Edi¸˜o Efetiva a ca 14.1 Mova-se rapidamente no texto . . . . . . . . . . . . . . . . . . . . 14.2 Use marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3 Use quantificadores . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4 Edite v´rios arquivos de uma s´ vez . . . . . . . . . . . . . . . . a o 14.5 N˜o digite duas vezes a . . . . . . . . . . . . . . . . . . . . . . . .

9 86 86 86 87 88 88 88 89 89 89 90 91 91 91 92 93 94 94 95 95 95 96 96 96 97 98 98 99 99 99

14.6 Use dobras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.7 Use autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . 14.8 Use o File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . 14.9 Torne as boas pr´ticas um h´bito a a

. . . . . . . . . . . . . . . . . 100

14.10Referˆncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 e

0 15 Plugins

´ CONTEUDO 101

15.1 Como testar um plugin sem instal´-lo? . . . . . . . . . . . . . . . 101 a
A 15.2 Plugin para L TEX . . . . . . . . . . . . . . . . . . . . . . . . . . 102 A 15.3 Criando folders para arquivos L TEX . . . . . . . . . . . . . . . . 102

15.4 Criando se¸˜es L TEX . . . . . . . . . . . . . . . . . . . . . . . . . 102 co A 15.5 Plugin para manipular arquivos . . . . . . . . . . . . . . . . . . . 103 15.6 Complementa¸ao de c´digos . . . . . . . . . . . . . . . . . . . . . 103 c˜ o 15.7 Instala¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 ca 15.8 Um wiki para o Vim . . . . . . . . . . . . . . . . . . . . . . . . . 103 15.9 Acessando documenta¸˜o do Python no Vim . . . . . . . . . . . 104 ca 15.10Formatando textos planos com syntax . . . . . . . . . . . . . . . 104 15.11Movimentando em camel case . . . . . . . . . . . . . . . . . . . . 104 15.12Plugin FuzzyFinder . . . . . . . . . . . . . . . . . . . . . . . . . . 104 15.13O plugin EasyGrep . . . . . . . . . . . . . . . . . . . . . . . . . . 105 15.14O plugin SearchComplete . . . . . . . . . . . . . . . . . . . . . . 105 15.15O plugin AutoComplete . . . . . . . . . . . . . . . . . . . . . . . 106 15.16O plugin Ctags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 15.17O Plugin Project . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 16 Referˆncias e 108

Cap´ ıtulo 1

Introdu¸˜o ca
A edi¸˜o de texto ´ uma das tarefas mais frequentemente executadas por seres ca e humanos em ambientes computacionais, em qualquer n´ ıvel. Usu´rios finais, a administradores de sistemas, programadores de software, desenvolvedores web, e tantas outras categorias, todos eles, constantemente, necessitam editar textos. Usu´rios finais editam texto para criar documentos, enviar e-mails, atualizar a o blog, escrever recados ou simplesmente trocar mensagens instantˆneas pela a internet. Administradores de sistemas editam arquivos de configura¸˜o, criam ca regras de seguran¸a, editam scripts e manipulam sa´ c ıdas de comandos armazenados em arquivos de texto. Programadores desenvolvem c´digos-fonte e a o documenta¸˜o de programas essencialmente em editores de texto. Desenvolveca dores web interagem com editores de texto para criarem layout e dinˆmica de a sites. Tamanha ´ a frequˆncia e onipresen¸a da tarefa de edi¸˜o de texto que a eficie e c ca ˆncia, flexibilidade e o repert´rio de ferramentas de editores de texto tornam-se e o quesitos cr´ ıticos para se atingir produtividade e conforto na edi¸˜o de textos. ca O “Vim” ´ um editor de texto extremamente configur´vel, criado para permitir e a a edi¸˜o de forma eficiente, tornando-a produtiva e confort´vel. Tamb´m ´ uma ca a e e aprimora¸˜o do editor “Vi”, um tradicional programa dos sistemas Unix. Possui ca uma s´rie de mudan¸as em rela¸˜o a este ultimo. O pr´prio slogan do Vim e c ca ´ o ´ Vi IMproved, ou seja, Vi Melhorado. O Vim ´ t˜o conhecido e respeitado e e a entre programadores, e t˜o util para programa¸˜o, que muitos o consideram a ´ ca uma verdadeira “IDE1 ”. Ele ´ capaz de reconhecer mais de 500 sintaxes de linguagens de programa¸˜o e ca e marca¸˜o, possui mapeamento para teclas, macros, abrevia¸˜es, busca por ca co Express˜es Regulares2 , entre outras facilidades. Conta com uma comunidade o bastante atuante e ´, ao lado do Emacs3 , um dos editores mais usados nos e sistemas GNU/Linux4 , embora esteja tamb´m dispon´ e ıvel em outros sistemas, como o Windows e o Macintosh. O site oficial do Vim ´ http://www.vim.org. e
1 Ambiente

Integrado de Desenvolvimento.

2 http://guia-er.sourceforge.net/guia-er.html 3 http://www.gnu.org/software/emacs/ 4O

kernel Linux sem os programas GNU n˜o serviria para muita coisa. a

2

Introdu¸˜o ca

1.1

Instala¸˜o do Vim ca
:h install

1.1.1

Instala¸˜o no Windows ca

H´ uma vers˜o gr´fica do Vim dispon´ a a a ıvel para v´rios sistemas, incluindo o a Windows; esta vers˜o pode ser encontrada em http://www.vim.org/download. a php#pc. Para instal´-lo basta baixar o instalador no link indicado e dispar´-lo a a com um duplo clique (este procedimento requer privil´gios de administrador). e

1.1.2

Instala¸˜o no GNU/Linux ca

A maioria das distribui¸˜es GNU/Linux traz o Vim em seus reposit´rios, sendo co o que ´ bastante comum o Vim j´ vir inclu´ na instala¸˜o t´ e a ıdo ca ıpica da distribui¸˜o. ca A forma de instala¸˜o prefer´ depende do Vim: ca ıvel • J´ vir instalado por default – neste caso nada precisa ser feito. a • Estar dispon´ no reposit´rio mas n˜o instalado – em distribui¸˜es deıvel o a co rivadas da Debian GNU/Linux5 , a instala¸˜o do Vim atrav´s dos reposica e t´rios ´ usualmente executada digitando-se ‘apt-get install vim’6 em o e um terminal (este procedimento requer privil´gios de administrador e, tie picamente, conex˜o com a internet). a • N˜o estar dispon´ no reposit´rio da distribui¸˜o – cen´rio improv´vel, a ıvel o ca a a mas nas sua ocorrˆncia o Vim pode ser instalado atrav´s da compilae e ¸˜o do c´digo-fonte; basta seguir as instru¸˜es em http://www.vim.org/ ca o co download.php.

1.2

Dicas iniciais

Ao longo do livro alguns comandos ou dicas podem estar duplicados, o que ´ util e´ devido ao contexto e tamb´m porque o aprendizado por satura¸˜o ´ um ´timo e ca e o recurso. Ao perceber uma dica duplicada, antes de reclamar veja se j´ sabe o a que est´ sendo passado. Contudo dicas e sugest˜es ser˜o bem vindas! a o a Para chamar o Vim digite num terminal: vim texto.txt
5 http://www.debian.org/index.pt.html 6 Recomenda-se tamb´m instalar a documenta¸˜o em HTML do Vim: ‘apt-get install e ca vim-doc’

1.3 Ajuda integrada

3

1.3

Ajuda integrada

O Vim possui uma ajuda integrada muito completa, s˜o mais de 100 arquivos a somando milhares de linhas. O unico inconveniente ´ n˜o haver ainda tradu¸˜o ´ e a ca para o portuguˆs, sendo o inglˆs seu idioma oficial; entretanto, as explica¸˜es e e co costumam ser sint´ticas e diretas, de forma que no¸˜es em inglˆs seriam suficie co e entes para a compreens˜o de grande parte do conte´do da ajuda integrada. a u 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´ pode ser abreviado o at´ o ponto em que este nome mais curto n˜o coincida com o nome de algum e a outro comando existente. Para chamar a ajuda do Vim pressione <Esc> e em seguida: :help .... vers~o longa, ou a :h ....... vers~o abreviada a Ou simplesmente: <F1> Siga os links usando o atalho “Ctrl-]”, em modo gr´fico o clique com o mouse a tamb´m funciona, e para voltar use “Ctrl-O”. Para as situa¸˜es de desespero e co pode-se digitar: :help!

1.4

Em caso de erros

Recarregue o arquivo que est´ sendo editado assim: a <Esc> .. para sair do modo de edi¸~o ca :e! .... recarrega o arquivo sem qualquer edi¸~o ca Ou simplesmente inicie outro arquivo ignorando o atual :enew! ou saia do arquivo sem modifica-lo :q! .... sa´da for¸ada, nada ´ alterado ı c e :wq! ... tenta gravar e sair for¸ado c

4

Introdu¸˜o ca

1.5

Como interpretar atalhos e comandos

A tecla “<Ctrl>” ´ representada na maioria dos manuais e na ajuda pelo carace tere “^” circunflexo, ou seja, o atalho Ctrl-L aparecer´ assim: a ^L No arquivo de configura¸˜o do Vim, um “<Enter>” pode aparecer como: ca <cr> Para saber mais sobre como usar atalhos no Vim veja a se¸˜o 12.7 na p´gina 79 ca a e para ler sobre o arquivo de configura¸˜o veja o cap´ ca ıtulo 12 na p´gina 75. a

1.6

Modos de opera¸˜o ca

A tabela abaixo mostra uma referˆncia r´pida para os modos de opera¸˜o do e a ca Vim, a seguir mais detalhes sobre cada um dos modos. Modo Normal Inser¸˜o ca Visual Comando Descri¸˜o ca Neste modo podemos deletar, copiar e formatar Digita¸˜o de texto ca Sele¸˜o de blocos verticais e linhas inteiras ca Uma verdadeira linguagem de programa¸˜o ca Atalho <Esc> i,a,I,A,o,O V, v, Ctrl-v <Esc>:

Em oposi¸˜o ` esmagadora maioria dos editores o Vim ´ um editor que trabalha ca a e com “modos de opera¸˜o (modo de inser¸˜o, modo normal, modo visual etc)”, ca ca 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´rios significados, sen˜o vejamos: Em modo normal pressionar ‘dd’ apaga a a a linha atual, j´ em modo de inser¸˜o ele ir´ se comportar como se vocˆ estivesse a ca a e usando qualquer outro editor, ou seja, ir´ inserir duas vezes a letra ‘d’. Em a modo normal pressionar a tecla ‘v’ inicia uma sele¸˜o visual (use as setas de ca dire¸˜o). Para sair do novo visual <Esc>. Como um dos princ´ ca ıpios do vim ´ e agilidade pode-se usar ao inv´s de setas (em modo normal) as letras h,l,k,j e como se fossem setas: k h j Imagine as letras acima como teclas de dire¸˜o, a letra “k” ´ uma seta acima a ca e letra “j” ´ uma seta abaixo e assim por diante. e l

1.7 Entrando em modo de edi¸˜o ca

5

1.7
a i A I o O

Entrando em modo de edi¸˜o ca
.... .... .... .... .... .... inicia inicia inicia inicia inicia inicia inser¸~o ca inser¸~o ca inser¸~o ca inser¸~o ca inser¸~o ca inser¸~o ca de de de de de de texto texto texto texto texto texto ap´s o atual o antes do caractere atual no final da linha no come¸o da linha c na linha abaixo na linha acima

Agora come¸amos a sentir o gostinho de usar o Vim, uma tecla seja mai´scula c u ou min´scula, faz muita diferen¸a se vocˆ n˜o estiver em modo de inser¸˜o, e u c e a ca para sair do modo de inser¸˜o sempre use <Esc>. ca

1.8

Erros comuns

• Estando em modo de inser¸˜o pressionar ‘j’ na inten¸˜o de rolar o docuca ca mento, neste caso estaremos inserindo simplesmente a letra ‘j’. • Estando em modo normal acionar acidentalmente o “<Caps Lock>” e tentar rolar o documento usando a letra “J”, o efeito ´ a jun¸˜o das linhas, e ca ali´s um ´timo recurso quando a inten¸˜o ´ de fato esta. a o ca e • Em modo normal tentar digitar um n´mero seguido de uma palavra e ao u perceber que nada est´ sendo digitado, iniciar o modo de inser¸˜o, digia ca tando por fim o que se queria, o resultado ´ que o n´mero que foi digitado e u inicialmente vira um quantificador para o que se digitou ao entrar no modo de inser¸˜o. A palavra aparecer´ repetida na quantidade do n´mero dica a u gitado. Assim, se vocˆ quiser digitar 10 vezes “isto ´ um teste” fa¸a e e c assim: <Esc> ........... se assegure de estar em modo normal 10 .............. quantificador i ............... entra no modo de inser¸~o ca isto ´ um teste <Enter> <Esc> e

1.9

Dicas

Alguns atalhos uteis. . . ´ Ctrl-O ..... i Ctrl-a ... @: ......... Shift-insert gi ......... gv ......... comando do modo normal no modo insert repetir a ´ltima insera¸~o u ca repeter o ´ltimo comando u colar texto da ´rea de transfer^ncia a e modo de inser¸~o no mesmo ponto da ´ltima vez ca u repete sele¸~o visual ca

6

Introdu¸˜o ca

Para saber mais sobre repeti¸˜o de comandos veja o cap´ ca ıtulo 8, na p´gina 56. a No Vim, cada arquivo aberto ´ chamado de buffer, ou seja, dados carregados e na mem´ria. Vocˆ pode acessar o mesmo buffer em mais de uma janela, bem o e como dividir a janela em v´rios buffers distintos o que veremos mais adiante. a

Cap´ ıtulo 2

Movendo-se no Documento
:h motion.txt

A fim de facilitar o entendimento acerca das teclas e atalhos de movimenta¸˜o, ca faz-se util uma breve recapitula¸˜o de conceitos relacionados. Para se entrar em ´ ca modo de inser¸˜o, estando em modo normal, pode-se pressionar qualquer uma ca das teclas abaixo: i ..... I ..... a ..... A ..... o ..... O ..... <Esc> . entra no modo de inser¸~o ca entra no modo de inser¸~o ca entra no modo de inser¸~o ca entra no modo de inser¸~o ca entra no modo de inser¸~o ca entra em modo de inser¸~o ca sai do modo de inser¸~o ca antes do caractere atual no come¸o da linha c ap´s o caractere atual o no final da linha uma linha abaixo uma linha cima

Uma vez no modo de inser¸˜o todas as teclas s˜o efetivamente, assim como nos ca a outros editores simples, caracteres que constituem o conte´do do texto sendo u digitado. Para sair do modo de inser¸˜o e retornar ao modo normal digita-se ca <Esc> ou Ctrl-[. As letras h, k, l, j funcionam como setas: k h j Ou seja, a letra ‘k’ ´ usada para subir no texto, a letra ‘j’ para descer, a letra ‘h’ e para mover-se para a esquerda e a letra ‘l’ para mover-se para a direita. A ideia ´ que se consiga ir para qualquer lugar do texto sem tirar as m˜os do teclado, e a sendo portando alternativas para as setas de movimenta¸˜o usuais do teclado. ca l

2.1

Big words

Para o Vim “palavras-separadas-por-h´ ıfen” s˜o consideradas em separado, pora tanto se vocˆ usar, em modo normal “w” avan¸ar entre as palavras ele pular´ e c a

8

Movendo-se no Documento

uma de cada vez, no entanto se usar “W” em mai´sculo (como visto) ele pular´ u 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¸o) c Para ir para linhas espec´ ıficas digite: :n<Enter> ..... vai para linha ‘n’ ngg ............ vai para linha ‘n’ nG ............. vai para linha ‘n’ onde “n” corresponde ao n´mero da linha. Para retornar ao modo normal presu sione <Esc> ou use Ctrl-[ (^[).

2.2

Os saltos
gg .... G ..... 0 ..... ^ ..... $ ..... yG .... 25gg .. ’’ .... fx .... tx .... Fx .... Tx .... * ..... % ..... ‘’ .... d$ .... gi .... gv .... gf .... gd .... gD .... w ..... W ..... E ..... e ..... zt .... zm .... zz .... n ..... N ..... o ..... vai para o in´cio do arquivo ı vai para o final do arquivo vai para o in´cio da linha ı vai para o primeiro caractere da linha (ignora espa¸os) c vai para o final da linha copia da linha atual at´ o final do arquivo e salta para a linha 25 salta para a linha da ´ltima posi¸~o em que o cursor estava u ca para primeria ocorr^ncia de x e Para ir para uma letra antes de x Para ir para ocorr^ncia anterior de x e Para ir para uma letra ap´s o ´ltimo x o u Pr´xima ocorr^ncia de palavra sob o cursor o e localiza par^nteses correspondente e salta exatamente para a posi¸~o em que o cursor estava ca deleta do ponto atual at´ o final da linha e entra em modo de inser¸~o no ponto da ´ltima edi¸~o ca u ca repete a ´ltima sele¸~o visual e posiciona o cursor neste local u ca abre o arquivo sob o cursor salta para declara¸~o de vari´vel sob o cursor ca a salta para declara¸~o (global) de vari´vel sob o cursor ca a move para o in´cio da pr´xima palavra ı o pula para pr´xima palavra (desconsidera h´fens) o ı pula para o final da pr´xima palavra (desconsidera hifens) o move o cursor para o final da pr´xima palavra o movo o cursor para o topo da p´gina a move o cursor para o meio da p´gina a move a p´gina de modo com que o cursor fique no centro a move o cursor para a pr´xima ocorr^ncia da busca o e move o cursor para a ocorr^ncia anterior da busca e letra ‘o’, alterna extremos de sele¸~o visual ca

2.3 Copiar e Deletar

9

2.3

Copiar e Deletar
:h delete, d

Deletar est´ associado ` letra “d”. a a dd .... D ..... d$ .... d^ .... d0 .... deleta deleta deleta deleta deleta linha atual restante da linha restante da linha do cursor ao primeiro caractere n~o-nulo da linha a do cursor ao in´cio da linha ı 

Pode-se combinar o comando de dele¸˜o “d” com o comando de movimento ca
(considere o modo normal) para apagar at´ a pr´xima v´ e o ırgula use: “df,”. Copiar est´ associado ` letra “y”. a a yy .... Y ..... ye .... yb .... copia copia copia copia a linha atual a linha atual do cursor ao fim da palavra do come¸o da palavra ao cusor c

A maioria dos comandos do Vim pode ser precedida por um quantificador: 5j ..... d5j .... k ...... 5k ..... y5k .... w ...... 5w ..... d5w .... b ...... 5b ..... fx ..... dfx .... dgg .... dG ..... yG ..... yfx .... y5j .... desce 5 linhas deleta as pr´ximas 5 linhas o em modo normal sobe uma linha sobe 5 linhas copia 5 linhas (para cima) pula uma palavra para frente pula 5 palavras deleta 5 palavras retrocede uma palavra retrocede 5 palavras posiciona o cursor em ‘‘x’’ deleta at´ o pr´ximo ‘‘x’’ e o deleta da linha atual at´ o come¸o do arquivo e c deleta at´ o final do arquivo e copia at´ o final do arquivo e copia at´ o pr´ximo ‘‘x’’ e o copia 5 linhas

Podemos pular senten¸as: c ) .... ( .... } .... { .... y) ... d} ... pula uma senten¸a para frente c pula uma senten¸a para tr´z c a pula um par´grafo para frente a pula um par´grafo para tr´z a a copia uma senten¸a para frente c deleta um par´grafo para frente a

10 O que foi deletado ou copiado pode ser colado: p .... P .... [p ... ]p ... cola cola cola cola o o o o que que que que foi foi foi foi copiado copiado copiado copiado ou ou ou ou

Movendo-se no Documento

deletado deletado deletado deletado

abaixo acima antes do cursor ap´s o cursor o

Caso tenha uma estrutura como abaixo: def pot(x): return x**2 E tiver uma referˆncia qualquer para a fun¸˜o pot e desejar mover o cursor at´ e ca e sua defini¸˜o basta posicionar o cursor sobre a palavra pot e pressionar (em ca modo normal) gd Se a vari´vel for global, ou seja, estive fora do documento (provavelmente em a outro) use: gD Quando definimos uma vari´vel tipo a var = ‘teste’ e em algum ponto do documento houver referˆncia a esta vari´vel e se desejar e a ver seu conte´do fazemos u [i Na verdade o atalho acima lhe mostrar´ o ultimo ponto onde foi feita a atribui¸˜o a ´ ca a `quela vari´vel que est´ sob o cursor, uma m˜o na roda para os programadores a a a de plant˜o! a Obs: observe a barra de status do Vim se o tipo de arquivo est´ certo, tipo. a Para detalhes sobre como personalizar a barra de status na se¸˜o 12.9.2. ca ft=python a busca por defini¸˜es de fun¸˜o s´ funciona se o tipo de arquivo estiver correto co ca o :set ft=python outro detalhe para voltar ao ultimo ponto em que vocˆ estava ´ e ’’

2.4 Paginando

11

2.4

Paginando

Para rolar uma p´gina de cada vez (em modo normal) a Ctrl-f Ctrl-b :h jumps . :jumps ... Ctrl-i ... Ctrl-o ... ’0 ....... ’1 ....... gd ....... } ........ 10| ...... [i ....... ajuda sobre a lista de saltos exibe a lista de saltos salta para a posi¸~o mais recente ca salta para a posi¸~o mais antiga ca abre o ´ltimo arquivo editado u abre o pen´ltimo arquivo editado u pula para a difini¸~o de uma vari´vel ca a pula para o fim do par´grafo a pula para a coluna 10 pula para defini¸~o de vari´vel sob o cursor ca a

Observa¸˜o: lembre-se ca ^ .... equivale a Ctrl ^I ... equivale a Ctrl-I ´ E poss´ abrir v´rios arquivos tipo vim *.txt. Editar algum arquivo, salvar ıvel a e ir para o pr´ximo arquivo com o comando ` seguir: o a :wn Ou voltar ao arquivo anterior :wp ´ E poss´ ainda “rebobinar” sua lista de arquivos. ıvel :rew[wind] Ir para o primeiro :fir[ist] Ou para o ultimo ´ :la[st]

12

Movendo-se no Documento

2.5

Usando marcadores

No Vim podemos marcar o ponto em que o cursor est´ para poder retornar a rapidamente, certifique-se de estar em modo normal, para tanto pressiona-se <Esc>, pressiona-se ent˜o a tecla “m” seguida de uma das letras do alfabeto: a ma ....... cria uma marca ‘a’ ‘a ....... move o cursor para a marca ‘a’

2.6

Marcas globais

Marcas globais s˜o marcas que permitem pular de um arquivo a outro. Para a criar uma marca global use a letra que designa a marca em mai´sculo. u mA ....... cria uma marca global A

Cap´ ıtulo 3

Editando
Que tal abrir um arquivo j´ na linha 10 por exemplo? a vim +10 /caminho/para/o/arquivo Ou ainda abrir na linha que cont´m um determinado padr˜o? e a vim +/padr~o arquivo a Obs: caso o padr˜o tenha espa¸os no nome coloque entre parˆnteses ou use a c e escape “\” a fim de n˜o obter erro. a

3.1

Usando o grep interno do Vim
:h vimgrep, lvimgrep

Para editar todos os arquivos que contenham a palavra “inusitada”: :vimgrep /\cinusitada/ * a op¸~o ‘\c’ torna a busca insens´vel ao case ca ı Obs: o Vim busca ` partir do diret´rio atual, para se descobrir o diret´rio atual a o o ou mud´-lo: a :pwd ........... exibe o diret´rio atual o :cd /diret´rio o muda de diret´rio o

3.2

Deletando uma parte do texto
:h deleting

O comando ‘d’ remove o conte´do para a mem´ria. u o

14 x .... xp ... ddp .. d5x .. dd .. 5dd .. d5G .. dw .. 5dw .. dl .. 5dl .. d0 .. d^ .. d$ .. dgg .. dG .. D .... apaga troca troca apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga apaga o caractere sob o cursor letras de lugar linhas de lugar os pr´ximos 5 caracteres o a linha atual 5 linhas (tamb´m pode ser: d5d) e at´ a linha 5 e uma palavra 5 palavras (tamb´m pode ser: d5w) e uma letra (sin^nimo: x) o 5 letras (tamb´m pode ser: d5l ou 5x) e at´ o in´cio da linha e ı at´ o primeiro caractere da linha e at´ o final da linha (sin^nimo: D) e o at´ o in´cio do arquivo e ı at´ o final do arquivo e o resto da linha

Editando

Depois do texto ter sido colocado na mem´ria, digite ‘p’ para ‘inserir’ o texto o em uma outra posi¸˜o. Outros comandos: ca diw .. apaga palavra mesmo que n~o esteja posicionado no in´cio a ı dip .. apaga o par´grafo atual a d4b .. apaga as quatro palavras anteriores dfx .. apaga at´ o pr´ximo ‘‘x’’ e o d/casa/+1 - deleta at´ a linha ap´s a palava casa e o Trocando a letra ‘d’ nos comandos acima por ‘c’ de change (“mudan¸a”) ao inv´s c e de deletar ser´ feita uma mudan¸a de conte´do. Por exemplo: a c u
:h change

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

modifica modifica modifica modifica

uma palavra um par´grafo a uma senten¸a c at´ o final da linha e

3.3

Copiando sem deletar
:h yank

O comando ‘y’ (yank) permite copiar uma parte do texto para a mem´ria sem o deletar. Existe uma semelhan¸a muito grande entre os comandos ‘y’ e os comanc dos ‘d’, um ativa a ‘c´pia’ e outro a ‘exclus˜o’ de conte´do, suportando ambos o a u quantificadores: yy .... copia a linha atual (sin^nimo: Y) o 5yy .... copia 5 linhas (tamb´m pode ser: y5y ou 5Y) e

3.4 Lista de altera¸˜es co y/pat .. yw .... 5yw .... yl .... 5yl .... y^ .... y$ .... ygg .... yG .... copia copia copia copia copia copia copia copia copia

15

at´ ‘pat’ e uma palavra 5 palavras (tamb´m pode ser: y5w) e uma letra 5 letras (tamb´m pode ser: y5l) e da posi¸~o atual at´ o in´cio da linha (sin^nimo: y0) ca e ı o da posi¸~o atual at´ o final da linha ca e da posi¸~o atual at´ o in´cio do arquivo ca e ı da posi¸~o atual at´ o final do arquivo ca e

Digite ‘P’ (p mai´sculo) para colar o texto rec´m copiado na posi¸˜o onde u e ca encontra-se o cursor, ou ‘p’ para colar o texto na posi¸˜o imediatamente ap´s o ca o cursor. yi" .... copia trecho entre aspas (atual - inner) vip .... sele¸~o visual para par´grafo atual ca a ‘inner paragraph’ yip .... copia o par´grafo atual a yit .... copia a tag agual ‘inner tag’ ´til para arquivos u HTML, XML, etc.

3.3.1

Usando a ´rea de transferˆncia Clipboard a e
:h paste, clipboard, quoteplus

Exemplos para o modo visual: Ctrl-insert .... copia ´rea selecionada a Shift-insert ... cola o que est´ no clipboard a Ctrl-del ....... recorta para o clipboard Caso obtenhamos erro ao colar textos da ´rea de transferˆncia usando os coa e mandos acima citados podemos usar outra alternativa. Os comandos abaixo preservam a indenta¸˜o1 . ca "+p ............ cola preservando indenta¸~o ca "+y ............ copia ´rea selecionada a 

Para evitar erros ao colar usando Shift-insert use este comando ‘:set paste’.

3.4

Lista de altera¸oes c˜
:h changelist, changes

O Vim mant´m uma lista de altera¸˜es, veremos agora como usar este recurso. e co g, ................. avan¸a na lista de altera¸~es c co g; ................. recua na lista de altera¸~es co :changes ........... visualiza a lista de altera¸~es co
1 Espa¸amento c

entre o come¸o da linha e o in´ c ıcio do texto

16

Editando

3.5

For¸ando a edi¸˜o de um novo arquivo c ca
:h edit!

O Vim como qualquer outro editor ´ muito exigente no que se refere a altera¸˜es e co de arquivo. Ao tentar abandonar um arquivo editado e n˜o salvo, o Vim ir´ se a a certificar da a¸˜o. Para abrir um novo arquivo sem salvar o antigo: ca :enew! O comando acima ´ uma abrevia¸˜o de edit new. De modo similar pode-se e ca ignorar todas as altera¸oes feitas desde a abertura do arquivo: c˜ :e!

3.6

Ordenando
:h sort

O Vim 7 passa a ter um comando de ordena¸˜o que tamb´m retira linhas duca e plicadas :sort u ... ordena e retira linhas duplicadas :sort n ... ordena numericamente Obs: a ordena¸˜o num´rica ´ diferente da ordena¸˜o alfab´tica se em um trecho ca e e ca e contendo algo como: 8 9 10 11 12 Vocˆ tentar fazer: e :sort O Vim colocar´ nas trˆs primeiras linhas a e 10 11 12 Portanto lembre-se que se a ordena¸˜o envolver n´meros use: ca u :sort n

3.7 Removendo linhas duplicadas Vocˆ pode fazer a ordena¸˜o em um intervalo assim: e ca :1,15 sort n

17

O comando acima diz “Ordene numericamente da linha 1 at´ a linha 15”. Poe demos ainda ordenar ` partir de uma coluna: a :sort /.*\%8v/ ..... ordena ` partir do 8o caractere a

3.7

Removendo linhas duplicadas
:sort u

3.8

Substituindo tabula¸˜es por espa¸os co c
:h expandtab, retab

Se houver necessidade2 de trocar tabula¸˜es por espa¸os fazemos assim: co c :set expandtab :retab Para fazer o contr´rio usamos algo como: a :%s/\s\{4,}/<pressiona-se ctrl-i>/g <Crl-i>...... insere uma tabula¸~o ca Explicando : ............ % ............ s ............ / ............ \s ........... \{4,} ........ / ............ <Ctrl-i> ..... / ............ g ............

comando em todo arquivo substitua padr~o de busca a localiza espa¸o c quatro vezes inicio da substitui¸~o ca pressione Ctrl-i para inserir <Tab> fim da substitui¸~o ca global

3.9

Convertendo para mai´ sculas u
:h case

gUU ....... guu ....... gUiw ...... ~ .........
2 Em

converte converte converte altera o

a linha para mai´sculo u a linha para min´sculo u a palavra atual para mai´sculo u case do caractere atual

c´digos Python por exemplo n˜o se pode misturar espa¸os e tabula¸˜es o a c co

18

Editando

3.10

Editando em modo de comando
:h put, move, global

Para mover um trecho usando o modo de comandos fa¸a: c :10,20m $ O comando acima move ‘m’ da linha 10 at´ a linha 20 para o final $. e :g /palavra/ m 0 Move as linhas contendo ‘palavra’ para o come¸o (linha zero) c :10,20y a Copia da linha ‘10’ at´ a linha ‘20’ para o registro ‘a’ e :56pu a Cola o registro ‘a’ na linha 56 :g/padr~o/d a O comando acima deleta todas as linhas contendo a palavra ‘padr˜o’. a Podemos inverter a l´gica do comando global g: o :g!/padr~o/d a N˜o delete as linhas contendo padr˜o, ou seja, delete tudo menos as linhas a a contendo a palavra ‘padr˜o’. a :v/padr~o/d a A op¸˜o acima equivale a “:g!/padr~o/d”. Para ler mais sobre o comando ca a “global” utilizado nesta se¸˜o veja o cap´ ca ıtulo 6.13. :7,10copy $ Da linha 7 at´ a linha 10 copie para o final.  Veja mais sobre edi¸˜o no modo e ca de comando na se¸˜o “6 Buscas e substitui¸˜es”. ca co

3.11 O arquivo alternativo Gerando sequˆncias e

19

Para inserir uma sequˆncia de 1 a 10 ` partir da linha inicial “zero” fazemos: e a :0put =range(1,10) Caso queira inserir sequˆncias como esta: e 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

3.11

O arquivo alternativo
:h Ctrl-6, alternate-file

´ E muito comum um usu´rio concluir a edi¸˜o em um arquivo no Vim e inoa ca centemente imaginar que n˜o vai mais modificar qualquer coisa nele, ent˜o este a a usu´rio abre um novo arquivo: a :e novo-arquivo.txt Mas de repente o usu´rio lembra que seria necess´rio adicionar uma linha no a a arquivo rec´m editado, neste caso usa-se o atalho e Ctrl-6 cuja fun¸˜o ´ alternar entre o arquivo atual e o ultimo editado. Para retornar ca e ´ 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

3.12

Lendo um arquivo para a linha atual
:h :read

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

20

Editando

3.13

Incrementando n´ meros em modo normal u
:h Ctrl-a, Ctrl-x

Posicione o cursor sobre um n´mero e pressione u Ctrl-a ..... incrementa o n´mero u Ctrl-x ..... decrementa o n´mero u

3.14

Repetindo a digita¸˜o de linhas ca
modo insert repete linha acima repete linha abaixo repete linhas inteiras repete a ´ltima inser¸~o u ca

" atalhos para o Ctrl-y ......... Ctrl-e ......... Ctrl-x Ctrl-l .. Ctrl-a ......... 56. 

Para saber mais sobre repeti¸˜o de comandos veja o cap´ 8, na p´gina ca ıtulo a 3.15 Movendo um trecho de forma inusitada

:20,30m 0 ..... move da linha ‘20’ at´ ‘30’ para o come¸o e c :20,/pat/m 5 .. move da linha ‘20’ at´ ‘pat’ para a linha 5 e

3.16

Uma calculadora diferente

Sempre que for necess´rio digitar o resultado de uma express˜o matem´tica a a a (portanto no modo de inser¸˜o) pode-se usar o atalho “Ctrl-r =”, ele ativa o ca registro de express˜es, na linha de comando do Vim aparece um sinal de igual, o digita-se ent˜o uma express˜o matem´tica qualquer tipo “35*6” e em seguida a a a pressiona-se “Enter”, o Vim coloca ent˜o o resultado da express˜o no lugar a a desejado. Portanto n˜o precisa-se recorrer a nenhuma calculadora para fazer a c´lculos. Pode-se fazer uso do “Registro de Express˜es” dentro de macros, ou a o seja, ao gravar a¸˜es pode-se fazer uso deste recurso, aumentando assim sua co complexidade e poder! Para ler sobre “macros” acesse a se¸˜o 8.3 na 58. Para ca saber mais sobre o “registro de express˜es” leia a se¸˜o 5.6 na p´gina 32. o ca a

3.17

Desfazendo
:h undo

Se vocˆ cometer um erro, n˜o se preocupe! Use o comando ‘u’: e a u ............ desfazer U ............ desfaz mudan¸as na ´ltima linha editada c u Ctrl-r ...... refazer

3.17 Desfazendo

21

3.17.1

Undo tree

Um novo recurso muito interessante foi adicionado ao Vim “a partir da vers˜o 7” a ´ a chamada ´rvore do desfazer. Se vocˆ desfaz alguma coisa, fez uma altera¸˜o e a e ca um novo branch ou galho, deriva¸˜o de altera¸˜o ´ criado. Basicamente, os ca ca e branches nos permitem acessar quaisquer altera¸˜es ocorridas no arquivo. co Um exemplo did´tico a Siga estes passos (para cada passo <Esc>, ou seja, saia do modo de inser¸˜o) ca Passo 1 - digite na linha 1 o seguinte texto # controle de fluxo <Esc> Passo 2 - digite na linha 2 o seguinte texto # um la¸o for <Esc> c Passo 3 - Nas linhas 3 e 4 digite... for i in range(10): print i <Esc> Passo 4 - pressione ‘u’ duas vezes (vocˆ voltar´ ao passo 1) e a Passo 5 - Na linha 2 digite # operador tern´rio <Esc> a Passo 6 - na linha 3 digite var = (1 if teste == 0 else 2) <Esc>

Obs: A necessidade do Esc ´ para demarcar as a¸˜es, pois o Vim considera e co cada inser¸˜o uma a¸˜o. Agora usando o atalho de desfazer tradicional “u” e de ca ca refazer Ctrl-r observe que n˜o ´ mais poss´ acessar todas as altera¸˜es efetua e ıvel co adas. Em resumo, se vocˆ fizer uma nova altera¸˜o ap´s um desfazer (altera¸˜o e ca o ca derivada) o comando refazer n˜o mais vai ser poss´ para aquele momento. a ıvel Agora volte at´ a altera¸˜o 1 e use seguidas vezes: e ca g+ e/ou gDessa forma vocˆ acessar´ todas as altera¸˜es ocorridas no texto. e a co

22

Editando

3.18

Salvando
:h writing

A maneira mais simples de salvar um arquivo, ´ usar o comando: e :w Para especificar um novo nome para o arquivo, simplesmente digite: :w! >> ‘‘file’’ O conte´do ser´ gravado no arquivo “file” e vocˆ continuar´ no arquivo original. u a e a Tamb´m existe o comando e :saveas nome salva o arquivo com um novo nome e muda para esse novo arquivo (o arquivo original n˜o ´ apagado). Para sair do editor, salvando o arquivo atual, digite :x a e (ou :wq). :w ............................ :w ‘novonome’ ................. :wq .......................... :saveas nome .................. :x ............................ :10,20 w! ~/Desktop/teste.txt . :w! ........................... :e! ........................... salva salvar como salva e sai’ salvar como salva se existirem modifica¸~es co sava um trecho para outro arquivo salvamento for¸ado c reinicia a edi¸~o ignorando altera¸~es ca co

3.19

Usando marcas
:h mark-motions

As marcas s˜o um meio eficiente de se pular para um local no arquivo. Para a criar uma, estando em modo normal faz-se: ma Onde ‘m’ indica a cria¸˜o de uma marca e ‘a’ ´ o nome da marca. Para pular ca e para a marca ‘a’: ‘a Para voltar ao ponto do ultimo salto: ´ ’’ Para deletar de at´ a marca ‘a’ (em modo normal): e d’a

3.20 Abrindo o ultimo arquivo rapidamente ´

23

3.19.1

Marcas globais

Durante a edi¸˜o de v´rios arquivos pode-se definir uma marca global com o ca a comando: mA Onde ‘m’ cria a marca e ‘A’ (mai´sculo) define uma marca ‘A’ acess´ a qualquer u ıvel momento com o comando: ’A Isto far´ o Vim dar um salto at´ a marca ‘A’ mesmo que esteja em outro arquivo, a e mesmo que vocˆ tenha acabado de fecha-lo. Para abrir e editar v´rios arquivos e a do Vim fazemos: vim :bn :bp :ls :wn :wp *.txt ......... ............... ............... ............... ............... ............... abre todos os arquivos ‘txt’ vai para o pr´ximo da lista o volta para o arquivo anterior lista todos os arquivos abertos salva e vai para o pr´ximo o salva e vai para o pr´vio e

3.20

Abrindo o ultimo arquivo rapidamente ´

O Vim guarda um registro para cada arquivo editado veja mais no cap´ ıtulo 5 na p´gina 30. a ’0 ........ abre o ´ltimo arquivo editado u ’1 ........ abre o pen´ltimo arquivo editado u Ctrl-6 .... abre o arquivo alternativo (booleano) Bom, j´ que abrimos o nosso ultimo arquivo editado com o comando a ´ ‘0 podemos, e provavelmente o faremos, editar no mesmo ponto em que est´vamos a 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´gina a 39 vocˆ encontra mais dicas de edi¸ao. e c˜
3 Abrevia¸˜o ca

para um comando do GNU/Linux

24

Editando

3.21

Modelines
:h modeline

S˜o um modo de guardar preferˆncias no pr´prio arquivo, suas preferˆncias a e o e 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ˆ deve colocar um espa¸o entre a palavra ‘vim’ e a primeira coluna, e c ou seja, a palavra ‘vim’ deve vir precedida de um espa¸o, da´ em diante cada c ı op¸˜o fica assim: ca :op¸~o: ca Por exemplo: posso salvar um arquivo com extens˜o .sh e dentro do mesmo a indicar no modeline algo como: # vim:ft=txt:nu: Apesar de usar a extens˜o ‘sh’ o Vim reconhecer´ este arquivo como ‘txt’, e a a caso eu n˜o tenha habilitado a numera¸˜o, ainda assim o Vim usar´ por causa a ca a da op¸˜o ‘nu’. Portanto o uso de modelines pode ser um grande recurso para o ca seu dia-a-dia pois vocˆ pode coloca-las dentro dos coment´rios! e a

3.22

Edi¸˜o avan¸ada de linhas ca c

Seja o seguinte texto: 1 2 3 4 5 6 7 8 9 10 este este este este este este este este este este e ´ e ´ e ´ e ´ e ´ e ´ e ´ e ´ e ´ e ´ um um um um um um um um um um texto texto texto texto texto texto texto texto texto texto novo novo novo novo novo novo novo novo novo novo

Suponha que queira-se apagar “´ um texto” da linha 5 at´ o fim (linha 10). e e Isto pode ser feito assim: :5,$ normal 0wd3w Explicando o comando acima:

3.23 Comentando rapidamente um trecho :5,$ .... normal .. 0 ....... w ....... d3w .....

25

indica o intervalo que ´ da linha 5 at´ o fim ‘$’ e e executa em modo normal move o cursor para o come¸o da linha c pula uma palavra apaga 3 palavras ‘w’

´ Obs: E claro que um comando de substitui¸˜o simples ca :5,$s/´ um texto//g e Resolveria neste caso, mas a vantagem do m´todo anterior ´ que ´ v´lido para e e e a trˆs palavras, sejam quais forem. e Tamb´m ´ poss´ empregar comandos de inser¸˜o como ‘i’ ou ‘a’ e retornar e e ıvel ca ao modo normal, bastando para isso usar o recurso Ctrl-v Esc, de forma a simular o acionamento da tecla Esc (sa´ do modo de inser¸˜o). Por exemplo, ıda ca suponha agora que deseja-se mudar a frase “este ´ um texto novo” para “este e n˜o ´ um texto velho”; pode ser feito assim: a e :5,$ normal 02win~o ^[$ciwvelho a Decompondo o comando acima temos: :5,$ .... normal .. 0 ....... 2w ...... i ....... n~o .... a ^[ ...... $ ....... ciw ..... velho ... indica o intervalo que ´ da linha 5 at´ o fim ‘$’ e e executa em modo normal move o cursor para o come¸o da linha c pula duas palavras (vai para a palavra "´") e entra no modo de inser¸~o ca insere a palavra "n~o" seguida de espa¸o " " a c sai do modo de inser¸~o (atrav´s de Ctrl-v seguido de Esc) ca e vai para o fim da linha apaga a ´ltima palavra ("novo") e entra em modo de inser¸~o u ca insere a palavra "velho" no lugar de "novo"

A combina¸˜o Ctrl-v ´ utilizada para inserir caracteres de controle na sua forma ca e literal, prevenindo-se assim a interpreta¸˜o destes neste exato momento. ca

3.23

Comentando rapidamente um trecho

Tomando como exemplo um trecho de c´digo como abaixo: o 1 2 3 4 5 input{capitulo1} input{capitulo2} input{capitulo3} input{capitulo4} input{capitulo5}

26 6 7 8 9 input{capitulo6} input{capitulo7} input{capitulo8} input{capitulo9}

Editando

Se desejamos comentar da linha 4 at´ a linha 9 podemos fazer: e posicionar o cursor no come¸o da linha 4 c Ctrl-v ........... inicia sele¸~o por blocos ca 5j ............... extende a sel¸~o at´ o fim ca e Shift-i .......... inicia inser¸~o no come¸o da linha ca c % ................ insere coment´rio (LaTeX) a Esc .............. sai do modo de inser¸~o ca

3.24

Comparando arquivos com o vimdiff
:h diff

O vim possui um modo para checagem de diferen¸as entre arquivos, ´ bastante c e util especialmente para programadores, para saber quais s˜o as diferen¸as entre ´ a c dois arquivos faz-se: vimdiff arquivo1.txt arquivo2.txt ... exibe as diferen¸as c ]c .................................. mostra pr´xima diferen¸a o c vim -d .............................. outro modo de abrir o vimdiff mode Para usu´rios do GNU/Linux ´ poss´ a e ıvel ainda checar diferen¸as remotamente c assim: vimdiff projeto scp://usuario@estacao//caminho/projeto O comando acima ir´ exibir lado a lado o arquivo local chamado ‘projeto’ e o a arquivo remoto contido no computador de nome ‘estacao’ de mesmo nome.

Cap´ ıtulo 4

Folders
Folders s˜o como dobras nas quais o Vim esconde partes do texto, algo assim: a +-- 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¸˜o completa do texto. Um modo de entender ca rapidamente como funcionam as dobras no Vim seria criando uma “dobra” para as pr´ximas 10 (dez) linhas com o comando abaixo: o zf10j Vocˆ pode ainda criar uma sele¸˜o visual e ca Shift-v ............ j .................. zf ................. zo ................. sele¸~o por linha ca desce linha cria o folder abre o folder

4.1

M´todos de dobras e

O Vim tem seis modos fold, s˜o eles: a • Sintaxe (syntax) • Identa¸˜o (indent) ca • Marcas (marker) • Manual (manual) • Diferen¸as (diff) c

28 • Express˜es Regulares (expr) o Para determinar o tipo de dobra fa¸a c :set foldmethod=tipo onde o tipo pode ser um dos tipos listados acima, exemplo: :set foldmethod=marker

Folders

Outro modo para determinar o m´todo de dobra seria colocando na ultima linha e ´ do seu arquivo algo assim: vim:fdm=marker:fdl=0: Obs: fdm significa foldmethod, e fdl significa foldlevel. Deve haver um espa¸o c entre a palavra inicial “vim” e o come¸o da linha este recurso chama-se modeline, c leia mais na se¸˜o “3.21 modelines” na p´gina 24. ca a

4.2

Manipulando dobras
zo ................ zO ................ za ................ zA ................ zR ................ zc ................ zC ................ zfap .............. zf/casa ........... zf’a .............. zd ................ zj ................ zk ................ [z ................ ]z ................ zi ................ zm, zr ............ :set fdl=0 ........ :set foldcolumn=4 . abre a dobra abre a dobra, recursivamente abre/fecha (alterna) a dobra abre/fecha (alterna) a dobra, recursivamente abre todas as dobras do arquivo atual fecha uma dobra fecha a dobra abaixo do cursor, recursivamente cria uma dobra para o par´grafo ‘ap’ atual a cria uma dobra at´ a palavra casa e cria uma dobra at´ a marca ‘a’ e apaga a dobra (n~o o seu conte´do) a u move para o in´cio da pr´xima dobra ı o move para o final da dobra anterior move o cursor para in´cio da dobra aberta ı move o cursor para o fim da dobra aberta desabilita ou habilita as dobras diminui/aumenta n´vel da dobra ‘fdl’ ı n´vel da dobra 0 (foldlevel) ı mostra uma coluna ao lado da numera¸~o ca

Para abrir e fechar as dobras usando a barra de espa¸os coloque o trecho abaixo c no seu arquivo de configura¸˜o do Vim .vimrc - veja o cap´ ca ıtulo 12, p´gina 75. a nnoremap <space> @=((foldclosed(line(".")) < 0) ? ’zc’ : ’zo’)<CR> Para abrir e fechar as dobras utilizando o clique do mouse, basta acrescentar na configura¸˜o do seu .vimrc: ca

4.3 Criando dobras usando o modo visual set foldcolumn=2 o que adiciona uma coluna ao lado da coluna de enumera¸˜o das linhas. ca

29

4.3

Criando dobras usando o modo visual

Para iniciar a sele¸˜o visual ca Esc ........ shift-v .... j .......... zf ......... vai para o modo normal inicia sele¸~o visual ca aumenta a sele¸~o visual (desce) ca cria a dobra na sele¸~o ativa ca

Um modo inusitado de se criar dobras ´: e Shift-v ..... inicia sele¸~o visual ca /chapter/-2 . extende a sele¸~o at´ /chapter -2 linhas ca e 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ˆ pode usar um registro que guarda o ultimo comando digitado, pode e ´ ainda imprimir dentro do texto o nome do pr´prio arquivo, armazenar por¸˜es o co distintas de texto (´rea de transferˆncia m´ltipla) etc. Vamos aos detalhes. a e u • O registro sem nome “” • 10 registros nomeados de “9” • O registro de pequenas dele¸˜es co • 26 registros nomeados de “z” ou de “Z” • 4 registros somente leitura • O registro de express˜es ”= o • Os registro de sele¸˜o e ”*, ”+ and ” ca • O registro “o” • Registro do ultimo padr˜o de busca ”/ ´ a

5.1

O registro sem nome “”

Armazena o conte´do de a¸˜es como: u co d ....... s ....... c ....... x ....... yy ...... dele¸~o ca substitui¸~o ca modifica¸~o ‘change’ ca apaga um caractere copia uma linha inteira

Para acessar o conte´do deste registro basta usar as letras “p” ou “P” que na u verdade s˜o comandos para colar abaixo da linha atual e acima da linha atual a (em modo normal)

5.2 Registros nomeados de 0 a 9

31

5.2

Registros nomeados de 0 a 9
:h registers

O registro zero armazena o conte´do da ultima c´pia ‘yy’, ` partir do registro u ´ o a 1 v˜o sendo armazenadas as dele¸oes sucessivas de modo que a mais recente a c˜ dele¸˜o ser´ armazenada no registro 1 e os registros v˜o sendo incrementados ca a a em dire¸˜o ao nono. Dele¸˜o menores que uma linha n˜o s˜o armazenadas ca ca a a nestes registros, caso em que o Vim usa o registro de pequenas dele¸˜es ou que co se tenha especificado algum outro registro.

5.3

Registro de pequenas dele¸˜es co

Quando se deleta algo menor que uma linha o Vim armazena os dados deletados neste registro.

5.4

Registros nomeados de “a at´ z” ou “A at´ e e Z”

Pode-se armazenar uma linha em modo normal assim: "ayy Desse modo o Vim guarda o conte´do da linha no registro ‘a’ caso queira armau zenar mais uma linha no registro ‘a’ use este comando: "Add Neste caso a linha corrente ´ apagada ‘dd’ e adicionada ao final do registro “a”. e "ayip .. "a ..... y ...... ip ..... copia o par´grafo atual para o registro ‘‘a’’ a registro a yank (copia) inner paragraph (este par´grafo) a

5.5
": ". "% "#

Registros somente leitura “: . % #”
..... ..... ..... ..... armazena armazena cont´m o e cont´m o e o ´ltimo comando u uma c´pia do ´ltimo texto inserido o u nome do arquivo corrente nome do arquivo alternativo

Uma forma pr´tica de usar registros em modo de inser¸˜o ´ usando: Ctrl-r a ca e

32 Ctrl-r Ctrl-r Ctrl-r Ctrl-r % : / a .... .... .... .... insere insere insere insere o o a o nome do arquivo atual u ´ltimo comando digitado u ´ltima busca efetuada registro ‘a’

Registros

Em modo de inser¸˜o pode-se repetir a ultima inser¸˜o de texto simplesmente ca ´ ca pressionando: Ctrl-a

5.6
"=

Registro de express˜es ”= o

O registro de express˜es permite efetuar c´lculos diretamente no editor, usando o o a atalho “Ctrl-r =” no modo de inser¸˜o, o editor mostrar´ um sinal de igualdade ca a na barra de status e o usu´rio digita ent˜o uma express˜o matem´tica como uma a a a a multiplica¸˜o “6*9” e em seguida pressiona Enter para que o editor finalize a ca opera¸˜o. Veja um v´ ca ıdeo demonstrando sua utiliza¸˜o aqui: http://vimeo. ca com/2967392. Para entender melhor como funciona o registro de express˜es tomemos um exemo plo. Para fazer uma sequˆncia como abaixo: e linha 1 tem o valor 150, linha 2 tem o valor 300, linha 3 tem o valor 450, ... Acompanhe os passos para a cria¸˜o de uma macro permite fazer uma sequˆncia ca e de quantas linhas forem necess´rias com o incremento proposto acima. a <Esc> ......... qa ............. yy ............. p .............. w .............. <Ctrl-a> ....... 4w ............. "ndw ........... a .............. Ctrl-r = ....... Ctrl-r n + 150 <Enter> ........ <Esc> ........... 0 ............... q ............... sai do modo de inser¸~o ca inicia a macro copia a primeira linha cola a linha copiada pula para o n´mero ‘1’ u incrementa o n´mero (agora 2) u avan¸a 4 palavras at´ 150 c e apaga o ‘150’ para o registro "n entra em modo de inser¸~o ca abre o registro de express~es o insere dentro do registro de express~es o o registro "n executa o registro de express~es o sai do modo de inser¸~o ca vai para o come¸o da linha c para a grava¸~o da macro ca

5.7 Registros de arrastar e mover Agora posicione o cursor no come¸o da linha e pressione “10@a”. c

33 

Na se¸˜o 12.7.5 p´gina 82 h´ mais dicas sobre o uso do registro de express˜es ca a a o
c´lculos matem´ticos. a a

5.7

Registros de arrastar e mover

O registro "* ´ respons´vel por armazenar o ultimo texto selecionado (p.e., atrav´s do mouse). e a ´ e J´ o registro a "+ ´ o denominado “´rea de transferˆncia”, normalmente utilizado para se transferir e a e conte´dos entre aplica¸˜es—este registro ´ preenchido, por exemplo, usando-se u co e a t´ ıpica combina¸˜o Ctrl-v encontrada em muitas aplica¸˜es. Finalmente, o ca co registro "~ armazena o texto colado pela opera¸˜o mais recente de “arrastar-e-soltar” (dragca and-drop).

5.8

Registro buraco negro ”

Use este registro quando n˜o quiser alterar os demais registros, por exemplo: se a vocˆ deletar a linha atual, e dd Esta a¸˜o ir´ colocar a linha atual no registro numerado 1, caso n˜o queira ca a a alterar o conte´do do registro 1 apague para o buraco negro assim: u "_dd

5.9

Registros de buscas “/”

Se desejar inserir em uma substitui¸˜o uma busca pr´via, vocˆ poderia fazer ca e e assim em modo de comandos: :%s,<Ctrl-r>/,novo-texto,g Observa¸˜o: veja que estou trocando o delimitador da busca para deixar claro ca o uso do registro de buscas “/”

34

Registros

5.10

Manipulando registros
@a=@_ @a=‘‘’’ @a=@" @*=@a @*=@: @*=@/ @*=@% ... ... ... ... ... ... ... ... limpa o registro a limpa o registro a salva registro sem nome *N* copia o registro para o buffer de colagem copia o ultimo comando para o buffer de colagem copia a ´ltima busca para o buffer de colagem u copia o nome do arquivo para o buffer de colagem mostra o conte´do de todos os registros u

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

Em modo de inser¸˜o ca <C-R>....... <C-R>[0-9a-z] .. <C-R>% .. <C-R>=somevar .. Insere Insere Insere Insere o registro de pequenas dele¸~es co registros 0-9 e a-z o nome do arquivo o conte´do de uma vari´vel u a

Um exemplo: pr´-carregando o nome do arquivo no registro n. e coloque em seu ~/.vimrc let @n=@% Como foi atribu´ ao registro n o conte´do de @%, ou seja, o nome do arquivo, ıdo u vocˆ pode fazer algo assim em modo de inser¸˜o: e ca Ctrl-r n E o nome do arquivo ser´ inserido a

5.11

Listando os registros atuais

Digitando o comando :reg ou ainda :ls O Vim mostrar´ os registros numerados e nomeados atualmente em uso a

5.12 Listando arquivos abertos

35

5.12

Listando arquivos abertos

Suponha que vocˆ abriu v´rios arquivos txt assim: e a vim *.txt Para listar os arquivos aberto fa¸a: c :buffers Usando o comando acima o Vim exibir´ a lista de todos os arquivos abertos, a ap´s exibir a lista vocˆ pode escolher um dos arquivos da lista, algo como: o e :buf 3 Para editar arquivos em sequˆncia fa¸a as altera¸˜es no arquivo atual e acesso e c co o pr´ximo assim: o :wn O comando acima diz ‘grave’ --> w e pr´ximo ‘next’ --> n o

5.13
:sn

Dividindo a janela com o pr´ximo arquivo o da lista de buffers

O comando acima ´ uma abrevia¸˜o de split next, ou seja, dividir e pr´ximo. e ca o

5.14

Como colocar um peda¸o de texto em um c registro?

<Esc> ...... vai para o modo normal "a10j ...... coloca no registro ‘a’ as pr´ximas 10 linhas ‘10j’ o Pode-se fazer: <Esc> ...... para ter certeza que est´ em modo normal a "ap ........ registro a ‘paste’, ou seja, cole Em modo de inser¸˜o faz-se: ca Ctrl-r a

36

Registros 

H´ situa¸˜es em que se tem caracteres n˜o ‘ascii’ que s˜o complicados de a co a a se colocar em uma busca ou substitui¸˜o, nestes casos pode-se usar os seguintes ca comandos:
"ayl ............. copia para o registro ‘a’ o caractere sob o cursor :%s/<c-r>a/char .. subsitui o conte´do do registro ‘a’ por char u Pode-se ainda usar esta t´cnica para copiar rapidamente coment´rios do ‘bash -- #’ e a em modo normal usando o atalho ‘0yljP’. 0 ............... yl .............. j ............... P ............... posiciona o cursor no in´cio a linha ı copia o caractere sob o cursor desce uma linha cola o caractere copiado

5.15

Como criar um registro em modo visual?

Inicie a sele¸˜o visual com o atalho ca Shift-v ..... seleciona linhas inteiras pressione a letra “j” at´ chegar ao ponto desejado, agora fa¸a e c "ay pressione “v” para sair do modo visual

5.16

Como definir um registro no vimrc?

Se vocˆ n˜o sabe ainda como editar preferˆncias no Vim leia antes o cap´ e a e ıtulo 12. Vocˆ pode criar uma vari´vel no vimrc assim: e a let var="foo" ...... define foo para var echo var ........... mostra o valor de var Pode tamb´m dizer ao Vim algo como... e :let @d=strftime("c")<Enter> Neste caso estou dizendo a ele que guarde na vari´vel ‘d’ at d, o valor da data a do sistema ‘strftime("c")’ ou ent˜o cole isto no vimrc: a let @d=strftime("c")<cr>

5.17 Como selecionar blocos verticais de texto?

37

A diferen¸a entre digitar diretamente um comando e adicion´-lo ao vimrc ´ c a e que uma vez no vimrc o registro em quest˜o estar´ sempre dispon´ a a ıvel, observe tamb´m as sutis diferen¸as, um Enter inserido manualmente ´ apenas uma e c e indica¸˜o de uma a¸˜o que vocˆ far´ pressionando a tecla especificada, j´ o ca ca e a a comando mapeado vira “<cr>”, veja ainda que no vimrc os dois pontos “:” somem. Pode mapear tudo isto let @d=strftime("c")<cr> imap ,d <cr-r>d nmap ,d "dp As atribui¸˜es acima correspondem a: co 1. Guarda a data na vari´vel ‘d’ a 2. Mapeamento para o modo de inser¸˜o “imap” digite ,d ca 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¸˜o assim: ca Ctrl-r d

5.17

Como selecionar blocos verticais de texto?

Ctrl-v agora use as letras h,l,k,j como setas de dire¸˜o at´ finalizar podendo guardar ca e a sele¸˜o em um registro que vai de ‘a’ a ‘z’ exemplo: ca "ay Em modo normal vocˆ pode fazer assim para guardar um par´grafo inteiro em e a um registro

38 "ayip O comando acima quer dizer para o registro ‘a’ ...... "a copie ...................... ‘y’ o par´grafo atual .......... ‘inner paragraph’ a

Registros

5.18

Referˆncias e

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

Cap´ ıtulo 6

Buscas e Substitui¸oes c˜
Para fazer uma busca, certifique-se de que est´ em modo normal, pressione “/” a e digite a express˜o a ser procurada. a Para encontrar a primeira ocorrˆncia de “foo” no texto: e /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ˆs linhas ap´s a ocorrˆncia da palavra “teste” e o e

/\<casa\> A busca acima localiza ‘casa’ mas n˜o ‘casamento’. Em express˜es regulares, a o \< e \> s˜o representadas por \b, que representa, por sua vez, borda de palavras. a Ou seja, ‘casa,‘, ‘casa!‘ seriam localizado, visto que sinais de pontua¸˜o n˜o ca a fazem parte da palavra.

6.1

Usando “Express˜es Regulares” em buscas o
:h regex, pattern

/ ........... \%x69 ....... /\%x69 ...... \d .......... [3-8] .......

inicia uma busca (modo normal) c´digo da letra ‘i’ o localiza a letra ‘i’ - hexadecimal 069 localiza n´meros u localiza n´meros de 3 at´ 8 u e

40 ^ ........... $ ........... \+ .......... /^\d\+$ ..... /\r$ ........ /^\s*$ ...... /^\t\+ ...... \s .......... /\s\+$ ......

Buscas e Substitui¸˜es co come¸o de linha c final de linha um ou mais localiza somente d´gitos ı localiza linhas terminadas com ^M localiza linhas vazias ou contendo apenas espa¸os c localiza linhas que iniciam com tabs localiza espa¸os c localiza espa¸os no final da linha c

6.1.1

Evitando escapes ao usar Express˜es regulares o

O Vim possui um modo chamado “very magic” para uso em express˜es regulares o que evita o uso excessivo de escapes, alternativas etc. Usando apenas uma op¸˜o: ca veja “:h /\v”. Em um trecho com d´ ıgitos + texto + d´ ıgitos no qual se deseja manter s´ as o letras. 12345aaa678 12345bbb678 12345aac678 Sem a op¸˜o “very magic” far´ ca ıamos: :%s/\d\{5\}\(\D\+\)\d\{3\}/\1/ J´ com a op¸˜o “very magic”“\v” usa-se bem menos escapes: a ca :%s/\v\d{5}(\D+)\d{3}/\1/ " explica¸~o do comando acima ca : ......... comando % ......... em todo arquivo s ......... substitua / ......... inicia padr~o de busca a \v ........ use very magic mode \d ........ d´gitos ı {5} ....... 5 vezes ( ........ inicia um grupo \D ........ seguido de n~o d´gitos a ı ) ........ fecha um grupo + ......... uma ou mais vezes \d ........ novamente d´gitos ı {3} ....... tr^s vezes e / ......... inicio da substitui¸~o ca \1 ........ referencia o grupo 1

6.1 Usando “Express˜es Regulares” em buscas o

41

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¸~o do comando acima ca % ......... em todo arquivo s ......... substitua / ......... inicia padr~o de busca a \d ........ ao encontrar um d´gito ı / ......... subtituir por vazio ..... exato, substituir por vazio /g ........ a express~o se torna gulosa a Por guloso - /g - se entende que ele pode e deve tentar achar mais de uma ocorrˆncia do padr˜o de busca na mesma linha. Caso n˜o seja gulosa, a express˜o e a a a ir´ apenas casar com a primeira ocorrˆncia em cada linha. a e Classes POSIX para uso em Express˜es Regulares o Ao fazermos substitui¸˜es em textos poderemos nos deparar com erros, pois [a-z] co n˜o inclui caracteres acentuados, as classes POSIX s˜o a solu¸˜o para este proa a ca blema, pois adequam o sistema ao idioma local, esta ´ a m´gica implementada e a por estas classes. [:lower:] ...... letras min´sculas incluindo acentos u [:upper:] ...... letras mai´sculas incluindo acentos u [: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~o a ser buscado a [ ....... inicia um grupo [: ...... inicia uma classe POSIX lower ... letras min´sculas u :] ...... termina a classe POSIX ] ....... termina o grupo / ....... inicia substitui¸~o ca \U ...... para mai´sculo u & ....... correponde ao que foi buscado

42

Buscas e Substitui¸˜es co

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¸˜o. ca Para aprender mais sobre Express˜es Regulares leia: o • http://guia-er.sourceforge.net • :help regex • :help pattern 

Uma forma r´pida para encontrar a pr´xima ocorrˆncia de uma palavra sob a o e
o cursor ´ teclar ‘*’. Para encontrar uma ocorrˆncia anterior da palavra sob o e e cursor, existe o # (em ambos os casos o cursor deve estar posicionado sobre a palavra que deseja procurar). Pode-se ainda exibir “dentro do contexto” todas as ocorrˆncias de uma palavra sob o cursor usando-se o seguinte atalho em modo e normal: [ Shift-i

6.2

Destacando padr˜es o
:h %>

Vocˆ pode destacar linhas com mais de 30 caracteres assim: e :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¸a com que a linha c indentada corrente passe a ter uma linha em branco antes e depois; isto pode ser obtido pelo seguinte mapeamento: :map ,t <Esc>:.s/^\(\s\+\)\(.*\)/\r\1\2\r/g<cr> Explicando:

6.4 Obtendo informa¸˜es do arquivo co : ................ map ,t ........... <Esc> ............ s/isto/aquilo/g .. : ................ . ................ s ................ ^ ................ \s\+ ............. .* ............... \(grupo\) ........ \1 ............... \r ............... g ................ <cr> ............. entra no modo de comando mapeia ,t para a fun¸~o desejada ca ao executar sai do modo de inser¸~o ca substitui isto por aquilo inicia o modo de comando na linha corrente substitua come¸o de linha c um espa¸o ou mais (barras s~o escapes) c a qualquer coisa depois agrupo para referenciar com \1 repete na substitui¸~o o grupo 1 ca insere uma quebra de linha em todas as ocorr^ncias da linha e Enter

43

6.4

Obtendo informa¸oes do arquivo c˜
ga ............. mostra o c´digo do caractere em decimal hexa e octal o ^g ............. mostra o caminho e o nome do arquivo g^g ............ mostra estat´sticas detalhadas do arquivo ı

Obs: O c´digo do caractere pode ser usado para substitui¸˜es, especialmente o co em se tratando de caracteres de controle como tabula¸˜es “^I” ou final de lico nha DOS/Windows “\%x0d”. Vocˆ pode apagar os caracteres de final de linha e Dos/Windows usando uma simples substitui¸˜o, veja mais adiante: ca

:%s/\%x0d//g Uma forma mais pr´tica de substituir o terminador de linha DOS para o termia nador de linha Unix:

:set ff=unix :w Na se¸˜o 12 p´gina 75 h´ um c´digo para a barra de status que faz com que a ca a a o mesma exiba o c´digo do caractere sob o cursor na se¸˜o 12.9.2. Outra dica: O o ca caractere de final de linha do Windows/DOS pode ser inserido com a seguinte combina¸˜o de teclas: ca

i ............ entra em modo de inser¸~o ca <INSERT> ..... entra em modo de inser¸~o ca Ctrl-v Ctrl-m insere o simbolo ^M (terminador de linha DOS)

44

Buscas e Substitui¸˜es co

6.5

Trabalhando com registradores

Pode-se guardar trechos do que foi copiado ou apagado para registros distintos (´rea de transferˆncia m´ltipla). Os registros s˜o indicados por aspas seguido a e u a 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 ... "bdd ... "ap .... "ab .... "x3dd .. "ayy .. "a3yy .. "ayw .. "a3yw .. apaga apaga cola" cola" apaga copia copia copia copia linha para o registrador a linha para o registrador b o conte´do do registrador a u o conte´do do registrador b u 3 linhas para o registrador ‘‘x’’ linha para o registrador ‘a’ 3 linhas para o registrador ‘a’ uma palavra para o registrador ‘a’ 3 palavras para o registrador ‘a’

No “modo de inser¸˜o”, como visto anteriormente, pode-se usar um atalho para ca colar rapidamente o conte´do de um registrador. u Ctrl-r (registro) Para colar o conte´do do registrador ‘a’ u Ctrl-r a Para copiar a linha atual para a ´rea de transferˆncia a e "+yy Para colar da ´rea de transferˆncia a e "+p Para copiar o arquivo atual para a ´rea de transferˆncia “clipboard”: a e :%y+

6.6

Edi¸oes complexas c˜

Trocando palavras de lugar: Posiciona-se o cursor no espa¸o antes da 1a palavra c e digita-se: deep

6.7 Indentando 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´sculo u gggUG ggVGU

45

6.7

Indentando
>> ..... ^T ..... ^D ..... >ip .... Indenta a linha atual Indenta a linha atual em modo de inser¸~o ca Remove indenta¸~o em modo de inser¸~o ca ca indenta o par´grafo atual a

6.8

Corrigindo a indenta¸˜o de c´digos ca o

Selecione o bloco de c´digo, por exemplo o vip ..... visual ‘‘inner paragraph’’ (selecione este par´grafo) a = ....... corrige a indenta¸~o do bloco de texto selecionado ca ggVG= .... corrige a identa¸~o do arquivo inteiro ca

6.9

Usando o File Explorer

O Vim navega na ´rvore de diret´rios com o comando a o vim . Use o ‘j’ para descer e o ‘k’ para subir ou Enter para editar o arquivo selecionado.  Pressionando F1 ao abrir o FileExplorer do Vim, vocˆ encontra dicas e adicionais sobre este modo de opera¸˜o do Vim. ca

46

Buscas e Substitui¸˜es co

6.10

Selecionando ou deletando conte´ do de tags u HTML

<tag> conte´do da tag </tag> u basta usar (em modo normal) as teclas vit ............... visual ‘inner tag | esta tag’ Este recurso tamb´m funciona com parˆnteses e e vi( ..... visual select vi" ..... visual select di( ..... delete inner (, ou seja, seu conte´do u

6.11

Substitui¸˜es co

Para fazer uma busca, certifique-se de que est´ em modo normal, em seguida a digite use o comando ‘s’, conforme ser´ explicado. a Para substituir “foo” por “bar” na linha atual: :s/foo/bar Para substituir “foo” por “bar” da primeira ` d´cima linha do arquivo: a e :1,10 s/foo/bar Para substituir “foo” por “bar” da primeira ` ultima linha do arquivo: a´ :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¸˜es que modificam seu comportamento. co

6.12

Exemplos

Busca usando alternativas: /end\(if\|while\|for\)

6.12 Exemplos

47

Buscar´ ‘if’, ‘while’ e ‘for’. Observe que ´ necess´rio ‘escapar’ os caracteres a e a \(, \| e \), caso contr´rio eles ser˜o interpretados como caracteres comuns. a a Quebra de linha /quebra\nde linha Ignorando mai´sculas e min´sculas u u /\cpalavra Usando \c o Vim encontrar´ “palavra”, “Palavraa” ou at´ mesmo “PALAVRA”. a e Uma dica ´ colocar no seu arquivo de configura¸˜o “vimrc” veja o cap´ e ca ıtulo 12. set set set set ignorecase .. smartcase ... hlsearch .... incsearch ... ignora mai´sculas e min´sculas na bucsca u u se busca contiver mai´sculas ele passa a consider´-las u a mostra o que est´ sendo buscado em cores a ativa a busca incremental

se vocˆ n˜o sabe ainda como colocar estas preferˆncias no arquivo de confie a e gura¸˜o pode ativa-las em modo de comando precedendo-as com dois pontos, ca assim: :set ignorecase<Enter> Substitui¸˜es com confirma¸˜o: co ca :%s/word/palavra/c ..... o ‘c’ no final habilita a confirma¸~o ca Procurando palavras repetidas /\<\(\w*\) \1\> Multilinha /Hello\_s\+World Buscar´ ‘World’, separado por qualquer n´mero de espa¸os, incluindo quebras a u c de linha. Buscar´ as trˆs sequˆncias: a e e Hello World Hello Hello World World

48 Buscar linhas de at´ 30 caracteres de comprimento e /^.\{,30\}$ ^ . ..... representa come¸o de linha c ..... representa qualquer caractere

Buscas e Substitui¸˜es co

:%s/<[^>]*>//g ... apaga tags HTML/XML :%g/^$/d ......... apaga linhas vazias :%s/^[\ \t]*\n//g apagarlinhas vazias Remover duas ou mais linhas vazias entre par´grafos diminuindo para uma s´ a o linha vazia. :%s/\(^\n\{2,}\)/\r/g Vocˆ pode criar um mapeamento e colocar no seu /.vimrc e map ,s <Esc>:%s/\(^\n\{2,}\)/\r/g<cr> No exemplo acima, ‘,s’ ´ um mapeamento para reduzir linhas em branco sucese sivas para uma s´ o Remove n˜o d´ a ıgitos (n˜o pega n´meros) a u :%s/^\D.*//g Remove final de linha DOS/Windows ^M que tem c´digo hexadecimal igual a o ‘0d’ :%s/\%x0d//g Troca palavras de lugar usando express˜es regulares: o :%s/\(.\+\)\s\(.\+\)/\2 \1/ Modificando todas as tags HTML para min´sculo: u :%s/<\([^>]*\)>/<\L\1>/g Move linhas 10 a 12 para al´m da linha 30: e :10,12m30

6.13 O comando global “g”

49

6.13

O comando global “g”

Buscando um padr˜o e gravando em outro arquivo: a :’a,’b g/^Error/ . w >> errors.txt Apenas imprimir linhas que cont´m determinada palavra, isto ´ util quando e e ´ vocˆ quer ter uma vis˜o sobre um determina aspecto do seu arquivo vejamos: e a :set nu ..... habilita numera¸~o ca :g/Error/p .. apenas mostra as linhas correspondentes 

Para mostrar o as linhas correspondentes a um padr˜o, mesmo que a numea
ra¸˜o de linha n˜o esteja habilitada use “:g/padr~o/#”. ca a a numerar linhas: :let i=1 | g/^/s//\=i."\t"/ | let i=i+1 Para copiar linhas come¸adas com Error para o final do arquivo fa¸a: c c :g/^Error/ copy $ Obs: O comando copy pode ser abreviado ‘co’ ou ainda vocˆ pode usar ‘t’ para e mais detalhes leia: :h co Entre as linhas que contiverem “fred” e “joe” substitua: :g/fred/,/joe/s/isto/aquilo/gic As op¸˜es ‘gic’ correspondem a global, ignore case e confirm, podendo ser omico tidas deixando s´ o global. o Pegar caracteres num´ricos e jogar no final do arquivo: e :g/^\d\+.*/m $ Inverter a ordem das linhas do arquivo: :g/^/m0 Apagar as linhas que cont´m Line commented: e :g/Line commented/d

50 Apagar todas as linhas comentadas :g/^\s*#/d Copiar determinado padr˜o para um registro: a :g/pattern/ normal "Ayy

Buscas e Substitui¸˜es co

Copiar linhas que cont´m um padr˜o e a linha subsequente para o final: e a :g/padr~o/;+1 copy $ a Deletar linhas que n˜o contenham um padr˜o: a a :v/dicas/d ..... deleta linhas que n~o contenham ‘dicas’ a

Incrementar n´meros no come¸o da linha: u c :.,20g/^\d/exe "normal! \<c-a>" Sublinhar linhas come¸adas com Chapter: c :g/^Chapter/t.|s/./-/g : ........ g ........ / ........ ^ ........ Chapter .. / ........ t ........ . ........ s ........ / ........ . ........ / ........ - ........ / ........ g ........ comando global inicio de um padr~o a come¸o de linha c palavra literal fim do par~o a copia linha atual substitua inicio de um padr~o a qualquer caractere in´cio da substitui¸~o ı ca por tra¸o c fim da substitui¸~o ca em todas as ocorr^ncias e

6.14

Dicas

Para colocar a ultima busca em uma substitui¸˜o fa¸a: ´ ca c :%s/Ctrl-r//novo/g A dupla barra corresponde ao ultimo padr˜o procurado, e portanto o comando a abaixo far´ a substitui¸˜o da ultima busca por casinha: a ca :%s//casinha/g

6.15 Filtrando arquivos com o vimgrep

51

6.15

Filtrando arquivos com o vimgrep

Por vezes sabemos que aquela anota¸˜o foi feita, mas no momento esquecemos ca em qual arquivo est´, no exemplo abaixo procuramos a palavra dicas ` partir a a da nossa pasta pessoal pela palavra ‘dicas’ em todos os arquivos com extens˜o a ‘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´loga pode-se usar como referˆncia um padr˜o qualquer: a e a :/palavra/;+10 m 0 O comando acima diz: ` partir da linha que cont´m “palavra” incluindo as 10 a e pr´ximas linhas mova ‘m’ para a primeira linha ‘0’, ou seja, antes da linha 1. o

6.17

Dicas das lista vi-br

Fonte: http://groups.yahoo.com/group/vi-br/message/853 Problema: Essa deve ser uma pergunta comum. Suponha o seguinte conte´do u de arquivo: ... // v´rias linhas a texto1000texto // texto1000texto // texto1000texto // texto1000texto // texto1000texto // ... // v´rias linhas a

linha linha linha linha linha

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

Gostaria de um comando que mudasse para ... // v´rias linhas a texto1001texto // linha i texto1002texto // linha i+1

52 texto1003texto // linha i+2 texto1004texto // linha i+3 texto1005texto // linha i+4 ... // v´rias linhas a

Buscas e Substitui¸˜es co

Ou seja, somasse 1 a cada um dos n´meros entre os textos especificando como u 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˜o tem awk, e logo a melhor solu¸˜o mesmo ´ usar o Vim: a ca e :let i=1 | 10,20 g/texto\d\+texto/s/\d\+/\=submatch(0)+i/ | let i=i+1 Observa¸˜o: 10,20 ´ o intervalo, ou seja, da linha 10 at´ a linha 20 ca e e :help / :help :s :help pattern

6.18

Dicas do dicas-l

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

6.19

Jun¸˜o de linhas com Vim ca

Colabora¸˜o: Rubens Queiroz de Almeida ca 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/ - / ı

6.19 Jun¸˜o de linhas com Vim ca Explicando: s/isto/aquilo/g .. g ................ /................. ^ ................ Matr´cula ........ ı s ................ /\n/ - / ......... substitui isto por aquilo comando global inicia padr~o de busca a indica come¸o de linha c palavra a ser buscada inicia substitui¸~o ca troca quebra de linha (\n), por -

53

Cap´ ıtulo 7

Trabalhando com Janelas
O Vim trabalha com o conceito de m´ltiplos “buffers”. Cada “buffer” ´ um aru e quivo carregado para edi¸˜o. Um “buffer” pode estar vis´ ou n˜o, e ´ poss´ ca ıvel a e ıvel dividir a tela em janelas, de forma a visualizar mais de um “buffer” simultaneamente.

7.1

Dividindo a janela

Observa¸˜o: Ctrl = ^ ca Ctrl-w-s Ctrl-w-o Ctrl-w-n Ctrl-w-q Divide a janela atual em duas (:split) Faz a janela atual ser a ´nica (:only) u Abre nova janela (:new) Fecha a janela atual (:quit)

Caso tenha duas janelas e use o atalho acima ^wo, ´ recomendado salvar tudo e ao fechar, pois apesar de a outra janela estar fechada o arquivo ainda estar´ a carregado, portanto fa¸a: c :wall ... salva todos ‘write all’ :qall ... fecha todos ‘quite all’

7.2

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

7.3

Manipulando janelas
Ctrl-w-w ... Alterna entre janelas

7.4 File Explorer Ctrl-w-j Ctrl-w-k Ctrl-w-r Ctrl-w-+ Ctrl-w-... ... ... ... ... desce uma sobe uma Rotaciona Aumenta o Diminui o janela ‘j’ janela ‘k’ janelas na tela espa¸o da janela atual c espa¸o da janela atual c

55

7.4

File Explorer

Para abrir o gerenciador de arquivos do Vim use: :Vex ........... abre o file explorer verticalmente :e . ......... abre o file explorer na janela atual ap´s abrir chame a ajuda <F1> o Para abrir o arquivo sob o cursor em nova janela coloque a linha abaixo no seu ~/.vimrc let g:netrw_altv = 1 ´ E poss´ mapear um atalho “no caso abaixo F2” para abrir o File Explorer. ıvel map <F2> <Esc>:Vex<cr> Maiores informa¸˜es: co :help buffers :help windows

7.5

Dicas

Ao editar um arquivo no qual h´ referˆncia a um outro arquivo, por exemplo: a e “/etc/hosts”, pode-se usar o atalho Ctrl-w f para abri-lo. Mas ´ importante e posicionar o cursor sobre o nome do arquivo. Veja tamb´m mapeamentos na se¸˜o 12.7 p´gina 79. e ca a

Cap´ ıtulo 8

Repeti¸˜o de Comandos ca
Para repetir a ultima edi¸˜o saia do modo de Inser¸˜o e pressione ponto (.): ´ ca ca . Para inserir um texto que deve ser repetido v´rias vezes: a 1. Posicione o cursor no local desejado; 2. Digite o n´mero de repeti¸˜es; u co 3. Entre em modo de inser¸˜o; ca 4. Digite o texto; 5. Saia do modo de inser¸˜o (tecle Esc). ca Por exemplo, se vocˆ quiser inserir oitenta tra¸os numa linha, em vez de digitar e c um por um, vocˆ pode digitar o comando: e 80i-<Esc> Veja, passo a passo, o que aconteceu: Antes de entrar em modo de inser¸˜o usamos um quantificador ca ‘80’ depois iniciamos o modo de inser¸˜o ca i depois digitamos o caractere a ser repetido -

8.1 Repetindo a digita¸˜o de uma linha ca e por fim sa´ ımos do modo de inser¸ao c˜ <Esc> Se desej´ssemos digitar 10 linhas com o texto a isto ´ um teste e dever´ ıamos ent˜o fazer assim: a <Esc> .. para ter certeza que ainda estamos no modo normal 10 ..... quantificador antes i ...... entrar no modo de inser¸~o ca isto ´ um teste <Enter> e <Esc> .. voltar ao modo normal

57

8.1

Repetindo a digita¸˜o de uma linha ca
modo de inser¸~o ca 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´ funcionar´ para uma linha semelhante, experimente o a digitar: uma linha qualquer com algum conte´do u uma linha <Ctrl-x Ctrl-l> e veja o resultado

8.2

Guardando trechos em “registros”

Os registradores ‘a-z’ s˜o uma esp´cie de ´rea de transferˆncia m´ltipla. a e a e u Deve-se estar em modo normal e ent˜o digitar aspas duplas e uma das 26 letras a do alfabeto, em seguida uma a¸˜o por exemplo, ‘y’ (copiar) ‘d’ (apagar). Depois, ca 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´do do registrador ‘a’ abaixo u "bdd ... apaga a linha atual para o registrador ‘b’

58

Repeti¸˜o de Comandos ca

8.3

Gravando comandos

Imagine que vocˆ tem o seguinte trecho de c´digo: e o stdio.h fcntl.h unistd.h stdlib.h e quer que ele fique assim: #include #include #include #include "stdio.h" "fcntl.h" "unistd.h" "stdlib.h"

N˜o ´ poss´ simplesmente executar repetidas vezes um comando do Vim, pois a e ıvel ´ ´ preciso incluir texto tanto no come¸o quanto no fim da linha? E necess´rio e c a ´ ı mais de um comando para isso. E a´ que entram as macros. Pode-se gravar at´ e 26 macros, j´ que elas s˜o guardadas nos registros do Vim, que s˜o identificados a a a pelas letras do alfabeto. Para come¸ar a gravar uma macro no registro ‘a’, c digitamos qa No modo Normal. Tudo o que for digitado a partir de ent˜o, ser´ gravado no a a registro ‘a’ at´ que seja conclu´ com o comando <Esc>q novamente (no modo e ıdo Normal). Assim, soluciona-se o problema: <Esc> ....... qa .......... I ........... #include " .. <Esc> ....... A" .......... <Esc> ....... j ........... <Esc> ....... q ........... para garantir que estamos no modo normal inicia a grava¸~o da macro ‘a’ ca entra no modo de inser¸~o no come¸o da linha ca c insere #include " sai do modo de inser¸~o ca insere o ´ltimo caractere u sai do modo de inser¸~o ca desce uma linha sai do modo de inser¸~o ca para a grava¸~o da macro ca

Agora s´ ´ preciso posicionar o cursor na primeira letra de uma linha como esta oe stdio.h E executar a macro do registro ‘a’ quantas vezes for necess´rio, usando o coa mando @a. Para executar quatro vezes, digite: 4@a

8.4 Repetindo substitui¸˜es co Este comando executa quatro vezes o conte´do do registro ‘a’. u Caso tenha sido executada, a macro pode ser repetida com o comando @@

59

8.4

Repetindo substitui¸oes c˜

Caso seja feito uma substitui¸˜o em um intervalo como abaixo ca :5,32s/isto/aquilo/g Pode-se repetir esta substitui¸˜o em qualquer linha que estiver apenas usando ca este s´ ımbolo & O Vim substituir´ na linha corrente ‘isto’ por ‘aquilo’. Podendo repetir a ultima a ´ substitui¸˜o globalmente assim: ca g&

8.5
@:

Repetindo comandos

O atalho acima repete o ultimo comando no pr´prio modo de comandos ´ o

8.6

Scripts Vim

Usando um script para modificar um nome em v´rios arquivos: Crie um arquivo a chamado subst.vim contendo os comandos de substitui¸˜o e o comando de ca 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´m pode ser abreviado com :so bem como ser usado e para testar um esquema de cor: :so tema.vim

60

Repeti¸˜o de Comandos ca

8.7

Usando o comando bufdo

Com o comando :bufdo, pode-se executar um comando em um conjunto de arquivos de forma r´pida. No exemplo a seguir, ser˜o abertos todos os arquivos a a HTML do diret´rio atual, ser´ efetuado uma substitui¸˜o e em seguida ser˜o o a ca a 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ˆ pode combinar “:wall” e “:qall” com o comando e :wqall, que salva todos os arquivos abertos e em seguida sai do Vim. A op¸˜o ca ‘e’ faz com que o vim n˜o exiba mensagens de erro caso o buffer em quest˜o n˜o a a a contenha o padr˜o a ser substitu´ a ıdo.

8.8

Colocando a ultima busca em um comando ´

Observa¸˜o: lembre-se Ctrl = ^ ca :^r/

8.9

Inserindo o nome do arquivo no comando
:^r%

8.10
^r:

Inserindo o ultimo comando ´

Se preceder com “:” vocˆ repete o comando, equivale a acessar o hist´rico de e o 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¸˜o ´ ca

61

8.12

Para repetir exatamente a ultima inser¸˜o ´ ca

i<c-a>

Cap´ ıtulo 9

Comandos Externos
O Vim permite executar comandos externos para processar ou filtrar o conte´do u de um arquivo. De forma geral, fazemos isso digitando (no modo normal): :!ls .... visualiza o conte´do do diret´rio u o Lembrando que anexando um simples ponto, a sa´ do comando torna-se o ıda documento que est´ sendo editado: a :.!ls .... imprime na tela o conte´do do diret´rio u o A seguir, veja alguns exemplos de utiliza¸˜o: ca

9.1

Ordenando

Podemos usar o comando sort que ordena o conte´do de um arquivo dessa forma: u :5,15!sort ..... ordena da linha 5 at´ a linha 15 e O comando acima ordena da linha 5 at´ a linha 15. e O comando sort existe tanto no Windows quanto nos sistemas Unix. Digitando simplesmente sort, sem argumentos, o comportamento padr˜o ´ de classificar a e na ordem alfab´tica (baseando-se na linha inteira). Para maiores informa¸˜es e co sobre argumentos do comando sort, digite: sort --help ou man sort (no Unix) ou sort /? (no Windows).

9.2 Removendo linhas duplicadas

63

9.2

Removendo linhas duplicadas
:%!uniq

O caractere “%” representa a regi˜o equivalente ao arquivo atual inteiro. A a vers˜o do Vim 7 em diante tem um comando sort que permite remover linhas a 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¸˜o envolver n´meros faz-se: ca u :sort n

9.4

Beautifiers

A maior parte das linguagens de programa¸˜o possui ferramentas externas chaca madas beautifiers, que servem para embelezar o c´digo, atrav´s da indenta¸˜o e o e ca espa¸amento. Por exemplo, para embelezar um arquivo HTML ´ poss´ usar c e ıvel 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˜o do sistema editando o arquivo ‘.bashrc’: a #configura o vim como editor padr~o a export EDITOR=vim export VISUAL=vim 2. No terminal usar a combina¸˜o de teclas ‘Ctrl-x-e’. Esta combina¸˜o ca ca de teclas abre o editor padr˜o do sistema onde se deve digitar o comando a longo, ao sair do editor o terminal executa o comando editado.
1 http://tidy.sourceforge.net/

64

Comandos Externos

9.6

Compilando e verificando erros

Se o seu projeto j´ possui um Makefile, ent˜o vocˆ pode fazer uso do comando a a e :make para poder compilar seus programas no conforto de seu Vim: :make A vantagem de fazer isso ´ poder usar outra ferramenta bastante interessante, e a janela de quickfix: :cwindow O comando cwindow abrir´ uma janela em um split horizontal com a listagem a de erros e warnings. Vocˆ poder´ navegar pela lista usando os cursores e ir e a diretamente para o arquivo e linha da ocorrˆncia. e Modificando o compilador, o comando make pode mudar sua a¸˜o. ca :compiler javac :compiler gcc :compiler php Note que php n˜o tem um compilador. Logo, quando executado, o make ir´ a a verificar por erros de sintaxes. :compiler O comando acima lista todos os compiladores suportados.

9.7

Grep

Do mesmo jeito que vocˆ usa grep na sua linha de comando vocˆ pode usar o e e grep interno do Vim. Exatamente do mesmo jeito: :grep <caminho> <padr~o> <op¸~es> a co Use a janela de quickfix aqui tamb´m para exibir os resultados do grep e poder e ir diretamente a eles.

9.8

Indent

Indent2 ´ um programa que indenta seu c´digo fonte de acordo com os padr˜es e o o configurados no seu arquivo HOME/.indent.pro. Vou pressupor que vocˆ j´ e a
2 http://www.gnu.org/software/indent

9.9 Calculadora Cient´ ıfica com o Vim

65

saiba usar o indent e como fazer as configura¸˜es necess´rias para ele funcionar, co a ent˜o vamos ao funcionamento dele no Vim: a Para indentar um bloco de c´digo, primeiro selecione-o com o modo visual line o (com V), depois ´ s´ entrar com o comando como se fosse qualquer outro coe o mando externo: :!indent No caso, como foi selecionado um bloco de c´digo, ir˜o aparecer alguns caraco a teres extras, mas o procedimento continua o mesmo: :’<,’>!indent

9.9

Calculadora Cient´ ıfica com o Vim

Para usar a fun¸˜o de Calculadora Cient´ ca ıfica no Vim usamos uma ferramenta externa, que pode ser o comando ‘bc’ do GNU/Linux, ou uma linguagem de programa¸˜o como Python ou Ruby, veremos como habilitar a calculadora usando ca o Python. Obviamente esta linguagem de programa¸˜o deve estar instalada no ca sistema em que se deseja usar seus recursos. Deve-se testar se a vers˜o do Vim a 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 :Calc :Calc :Calc :Calc :Calc pi cos(30) pow(5,3) 10.0/3 sum(xrange(1,101)) [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´-las por e-mail, a reportar ao chefe ou at´ mesmo salv´-las. Utilizando e a vim ou gvim a sa´ do Shell ´ redirecionada para o (G)Vim automaticamente, n˜o sendo ıda e a necess´rio redirecion´-la para um arquivo tempor´rio e, logo ap´s, abr´ para a a a o ı-lo edit´-lo e modific´-lo. a a

66

Comandos Externos

9.11

Log do Subversion

A vari´vel de ambiente $SVN EDITOR pode ser usada para se especificar o a caminho para o editor de texto de sua preferˆncia, a fim de us´-lo na hora de e a dar um commit usando o subversion. export SVN_EDITOR=/usr/bin/vim svn commit Ser´ aberto uma sess˜o no Vim, que depois de salva, ser´ usada para LOG do a a a commit.

9.12

Referˆncias e

• 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¸˜o Ortogr´fica ca a
:h spell

O Vim possui um recurso nativo de verifica¸˜o ortogr´fica (spell) em tempo de ca a edi¸˜o, apontando palavras e express˜es desconhecidas—usualmente erros de ca o grafia—enquanto o usu´rio as digita. a Basicamente, para cada palavra digitada o Vim procura por sua grafia em um dicion´rio. N˜o encontrando-a, a palavra ´ marcada como desconhecida a a e (sublinhando-a ou alterando sua cor), e fornece ao usu´rio mecanismos para a corrigi-la (atrav´s de sugest˜es) ou cadastr´-la no dicion´rio caso esteja de fato e o a a grafada corretamente.

10.1

Habilitando a verifica¸˜o ortogr´fica ca a
:h spell, spelllang

A verifica¸˜o ortogr´fica atua em uma linguagem (dicion´rio) por vez, portanto, ca a a sua efetiva habilita¸˜o depende da especifica¸˜o desta linguagem. Por exemplo, ca ca para habilitar no arquivo em edi¸˜o a verifica¸˜o ortogr´fica na l´ ca ca a ıngua portuguesa (pt), assumindo-se a existˆncia do dicion´rio em quest˜o: e a a :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 ´, todos os arquivos da sess˜o corrente do Vim estariam sob e a efeito da verifica¸˜o ortogr´fica e do mesmo dicion´rio (no caso o pt). ca a a A desabilita¸˜o da verifica¸˜o d´-se digitando: ca ca a

68 :setlocal nospell :set nospell

Verifica¸˜o Ortogr´fica ca a

(efeito global)

Caso queira-se apenas alterar o dicion´rio de verifica¸˜o ortogr´fica, suponha a ca a para a l´ ıngua inglesa (en), basta: :setlocal spelllang=en :set spelllang=en

(efeito global)

10.1.1

Habilita¸˜o autom´tica na inicializa¸˜o ca a ca
:h autocmd, Filetype, BufNewFile, BufRead

` As vezes torna-se cansativo a digita¸˜o expl´ ca ıcita do comando de habilita¸˜o da ca verifica¸˜o ortogr´fica sempre quando desejada. Seria conveniente se o Vim ca a habilitasse automaticamente a verifica¸˜o para aqueles tipos de arquivos que ca comumente fazem uso da verifica¸˜o ortogr´fica, como por exemplo arquivos ca a “texto”. Isto ´ poss´ e ıvel editando-se o arquivo de configura¸˜o do Vim .vimrc ca (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¸˜o ortogr´fica usando o dicion´ca a a rio da l´ ıngua portuguesa (pt) para arquivos do tipo texto e os terminados com a extens˜o .txt. Mais tecnicamente, diz-se ao Vim para executar o coa mando setl spell spl=pt sempre quando o tipo do arquivo (Filetype) for text (texto) ou quando um arquivo com extens˜o .txt for carregado (BufRead) a ou criado (BufNewFile).

10.2

O dicion´rio de termos a

A qualidade da verifica¸˜o ortogr´fica do Vim est´ diretamente ligada ` comca a a a pletude e corretude do dicion´rio da linguagem em quest˜o. Dicion´rios pouco a a a completos s˜o inconvenientes ` medida que acusam falso positivos em demasia; a a pior, dicion´rios contendo palavras grafadas incorretamente, al´m de acusarem a e falso positivos, induzem o usu´rio ao erro ao sugerirem grafias erradas. a ´ E razoavelmente comum o Vim j´ vir instalado com dicion´rios de relativa quaa a lidade para algumas linguagens (ao menos inglˆs, habitualmente). Entretanto, e ainda ´ raro para a maioria das instala¸˜es do Vim trazer por default um die co cion´rio realmente completo e atualizado da l´ a ıngua portuguesa. A pr´xima o se¸˜o sintetiza, pois, os passos para a instala¸˜o de um excelente—e dispon´ ca ca ıvel livremente—dicion´rio de palavras para a l´ a ıngua portuguesa.

10.2 O dicion´rio de termos a

69

10.2.1

Dicion´rio portuguˆs segundo o acordo ortogr´fico a e a

A equipe do projeto BrOffice.org1 e seus colaboradores mantˆm e disponie bilizam livremente um grandioso dicion´rio de palavras da l´ a ıngua portuguesa. Al´m do expressivo n´mero de termos, o dicion´rio contempla as mudan¸as ore u a c togr´ficas definidas pelo Acordo Ortogr´fico2 que entraram em vigor no in´ a a ıcio de 2009. A instala¸˜o envolve trˆs passos, s˜o eles: ca e a 1. obten¸˜o do dicion´rio atrav´s do site BrOffice.org; ca a e 2. convers˜o para o formato interno de dicion´rio do Vim; e a a 3. instala¸˜o dos arquivos resultantes. ca Obten¸˜o do dicion´rio ca a O dicion´rio pode ser obtido atrav´s do endere¸o: a e c http://www.broffice.org/verortografico/baixar O arquivo baixado encontra-se compactado no formato Zip, bastando portanto descompact´-lo com qualquer utilit´rio compat´ com este formato, por exema a ıvel plo, o comando unzip. Convers˜o do dicion´rio a a
:h mkspell

Ap´s a descompacta¸˜o, os arquivos pt_BR.aff e pt_BR.dic, encontrados no o ca subdiret´rio dictionaries/, ser˜o usados para a cria¸˜o dos dicion´rios no o a ca a formato interno do Vim3 . A convers˜o propriamente dita ´ feita pelo pr´prio a e o Vim atrav´s do comando mkspell: e 1. Carrega-se o Vim a partir do diret´rio dictionaries/ o 2. O comando mkspell ´ ent˜o executado como: e a :mkspell pt pt_BR O Vim ent˜o gera um arquivo de dicion´rio da forma pt.<codifica¸~o>.spl, a a ca dentro de dictionaries/, onde <codifica¸~o> ´ a codifica¸˜o de caracteres do ca e ca sistema, normalmente utf-8 ou latin1; caso queira-se um dicion´rio em uma a codifica¸˜o diferente da padr˜o ser´ preciso ajustar a vari´vel encoding antes ca a a a da invoca¸˜o do comando mkspell: ca :set encoding=<codifica¸ao> c~ :mkspell pt pt_BR
1 http://www.broffice.org 2 http://pt.wikipedia.org/wiki/Acordo_Ortogr´fico_de_1990 a 3 O formato interno de dicion´rio do Vim assegura melhor desempenho, em termos de a agilidade e consumo de mem´ria, quando a verifica¸˜o ortogr´fica do editor encontra-se em o ca a opera¸˜o. ca

70 Instala¸˜o do(s) dicion´rio(s) gerado(s) ca a

Verifica¸˜o Ortogr´fica ca a

:h runtimepath

Finalmente, o dicion´rio gerado—ou os dicion´rios, dependendo do uso ou n˜o a a a de codifica¸˜es diferentes—deve ser copiado para o subdiret´rio spell/ dentro co o de qualquer caminho (diret´rio) que o Vim “enxergue”. A lista de caminhos o lidos pelo Vim encontra-se na vari´vel runtimepath, que pode ser inspecionada a atrav´s de: e :set runtimepath ´ E suficiente ent˜o copiar o dicion´rio pt.<codifica¸~o>.spl para o subdiret´a a ca o rio spell/ em qualquer um dos caminhos listados atrav´s do comando mostrado. e

10.3

Comandos relativos ` verifica¸˜o ortogr´a ca a fica
Encontrando palavras desconhecidas

10.3.1

Muito embora o verificador ortogr´fico cheque imediatamente cada palavra digia tada, sinalizando-a ao usu´rio caso n˜o a reconhe¸a, `s vezes ´ mais apropriado a a c a e realizar a verifica¸˜o ortogr´fica do documento por inteiro. O Vim disp˜e de ca a o comandos espec´ ıficos para busca e movimenta¸˜o em palavras grafadas incorreca tamente (desconhecidas) no escopo do documento, dentre eles: ]s ..... vai para a pr´xima palavra desconhecida o [s ..... como o ]s, mas procura no sentido oposto Ambos os comandos aceitam um prefixo num´rico, que indica a quantidade e de movimenta¸˜es (buscas). Por exemplo, o comando 3]s vai para a terceira co palavra desconhecida a partir da posi¸˜o atual. ca

10.3.2

Tratamento de palavras desconhecidas

H´ basicamente duas opera¸˜es poss´ a co ıveis no tratamento de uma palavra apontada pelo verificador ortogr´fico do Vim como desconhecida: a 1. corrigi-la – identificando o erro com ou sem o aux´ das sugest˜es do ılio o Vim. 2. cadastr´-la no dicion´rio – ensinando o Vim a reconhecer sua grafia. a a Assume-se nos comandos descritos nas se¸˜es a seguir que o cursor do editor co encontra-se sobre a palavra marcada como desconhecida.

10.3 Comandos relativos ` verifica¸˜o ortogr´fica a ca a Corre¸˜o de palavras grafadas incorretamente ca

71

´ E poss´ que na maioria das vezes o usu´rio perceba qual foi o erro cometido na ıvel a grafia, de forma que o pr´prio possa corrigi-la sem aux´ externo. No entanto, o ılio algumas vezes o erro n˜o ´ evidente, e sugest˜es fornecidas pelo Vim podem a e o ser bastante convenientes. Para listar as sugest˜es para a palavra em quest˜o o a executa-se: z= ..... solicita sugest~es ao verificador ortogr´fico o a Se alguma das sugest˜es ´ v´lida—as mais prov´veis est˜o nas primeiras posi¸˜es— o e a a a co ent˜o basta digitar seu prefixo num´rico e pressionar <Enter>. Se nenhuma a e sugest˜o for adequada, basta simplesmente pressionar <Enter> e ignorar a cora re¸˜o. ca Cadastramento de novas palavras no dicion´rio a Por mais completo que um dicion´rio seja, eventualmente palavras, especiala mente as de menor abrangˆncia, ter˜o que ser cadastradas a fim de aprimorar e a a exatid˜o da verifica¸˜o ortogr´fica. A manuten¸˜o do dicion´rio d´-se pelo a ca a ca a a cadastramento e retirada de palavras: zg ..... adiciona a palavra no dicion´rio a zw ..... retira a palavra no dicion´rio, marcando-a como a ‘desconhecida’

Cap´ ıtulo 11

Salvando Sess˜es de o Trabalho
Suponha a situa¸˜o em que um usu´rio est´ trabalhando em um projeto no qual ca a a v´rios arquivos s˜o editados simultaneamente; quatro arquivos est˜o abertos, a a a algumas macros foram criadas e vari´veis que n˜o constam no vimrc foram dea a finidas. Em uma situa¸˜o normal, se o Vim for fechado a quase totalidade dessas ca informa¸˜es se perde1 ; para evitar isto uma sess˜o pode ser criada, gerando-se co a um “retrato do estado atual”, e ent˜o restaurada futuramente pelo usu´rio—na a a pr´tica ´ como se o usu´rio n˜o tivesse sa´ do editor. a e a a ıdo Uma sess˜o do Vim guarda, portanto, uma s´rie de informa¸˜es sobre a edi¸˜o a e co ca corrente, de modo a permitir que o usu´rio possa restaur´-la quando desejar. a a Sess˜es s˜o bastante uteis, por exemplo, para se alternar entre diferentes projeo a ´ tos, carregando-se rapidamente os arquivos e defini¸˜es relativas a cada projeto. co

11.1

O que uma sess˜o armazena? a

Uma sess˜o ´ composta das seguintes informa¸˜es: a e co • Mapeamentos globais • Vari´veis globais a • Arquivos abertos incluindo a lista de buffers • Diret´rio corrente (:h curdir) o • Posi¸˜o e tamanho das janelas (o layout) ca
1 Algumas informa¸˜es, no entanto, s˜o automaticamente armazenadas no arquivo viminfo; co a veja :h viminfo

11.2 Criando sess˜es o

73

11.2

Criando sess˜es o

Sess˜es s˜o criadas atrav´s do comando :mksession: o a e :mksession sessao.vim .... cria a sess~o e armazena-a em sessao.vim a :mksession! sessao.vim ... salva a sess~o e sobrescreve-a em sessao.vim a

11.3

Restaurando sess˜es o

Ap´s gravar sess˜es, elas podem ser carregadas ao iniciar o Vim: o o vim -S sessao.vim ou ent˜o de dentro do pr´prio Vim (no modo de comando): a o :so sessao.vim Ap´s restaurar a sess˜o, o nome da sess˜o corrente ´ acess´ atrav´s de uma o a a e ıvel e vari´vel interna “v:this_session”; caso queira-se exibir na linha de comando a o nome da sess˜o ativa (incluindo o caminho), faz-se: a :echo v:this_session Podemos fazer mapeamentos para atualizar a sess˜o atual e exibir detalhes da a mesma: "mapeamento para gravar sess~o a nmap <F4> :wa<Bar>exe "mksession! " . v:this_session<CR>:so ~/sessions/ "mapeamento para exibir a sess~o ativa a map <s-F4> <esc>:echo v:this_session<cr>

11.4

Viminfo

Se o Vim for fechado e iniciado novamente, normalmente perder´ uma por¸˜o a ca consider´vel de informa¸˜es. A diretiva viminfo pode ser usada para memorizar a co estas informa¸˜es. co • Hist´rico da linha de comando o • Hist´rico de buscas o • Hist´rico de entradas input-line history o • Conte´do de registros n˜o vazios u a • Marcas de v´rios arquivos a

74 ´ • Ultimo padr˜o de busca/substitui¸˜o a ca • A lista de buffers • Vari´veis globais a

Salvando Sess˜es de Trabalho o

Deve-se colocar no arquivo de configura¸˜o algo como: ca set viminfo=%,’50,\"100,/100,:100,n Algumas op˜es da diretiva viminfo: o ! Quando inclu´ salva e restaura vari´veis globais (vari´veis com letra mai´sıdo a a u cula) e que n˜o cont´m letras em min´sculo como MANTENHAISTO. a e u ” N´mero m´ximo de linhas salvas para cada registro. u a % Quando inclu´ salva e restaura a lista de buffers. Caso o Vim seja iniciado ıdo com um nome como argumento, a lista de buffers n˜o ´ restaurada. Buffers a e sem nome e buffers de ajuda n˜o s˜o armazenados no viminfo. a a ’ N´mero m´ximo de arquivos rec´m editados. u a e / M´ximo de itens do hist´rico de buscas. a o : M´ximo de itens do hist´rico da linha de comando a o < N´mero m´ximo de linhas salvas por cada registro, se zero os registros n˜o u a a ser˜o salvos. Quando n˜o inclu´ a a ıdo, todas as linhas s˜o salvas. a Para ver mais op¸˜es sobre o arquivo ‘viminfo’ leia ‘:h viminfo’. Pode-se tamco b´m usar um arquivo de “Sess˜o”. A diferen¸a ´ que ‘viminfo’ n˜o depende do e a c e a local de trabalho (escopo). Quando o arquivo ‘viminfo’ existe e n˜o est´ vazio, a a as informa¸˜es novas s˜o combinadas com as existentes. A op¸˜o ‘viminfo’ ´ co a ca e uma string contendo informa¸˜es sobre o que deve ser armazenado, e cont´m co e limites de o quanto vai ser armazenado para cada item.

Cap´ ıtulo 12

Como Editar Preferˆncias e no Vim
O arquivo de preferˆncias do Vim ´ nomeado vimrc, um arquivo oculto que e e normalmente encontra-se no diret´rio de trabalho (home) do usu´rio: o a ~/.vimrc /home/usuario/.vimrc No sistema operacional Windows o arquivo costuma ser: ~\_vimrc c:\documents and settings\usuario\_vimrc

12.1

Onde colocar plugins e temas de cor

No Windows deve haver uma pasta chamada ‘vimfiles’ (caso n˜o exista deve-se a cri´-la), que fica em: a c:\documents and settings\usuario\vimfiles No GNU/Linux a pasta de arquivos do Vim ´ chamada .vim, comumente are mazenada em /home/user/.vim Tanto em .vim como vimfiles encontram-se usualmente as seguintes pastas: vimfiles ou .vim | +--color

76 | +--doc | +--syntax | +--plugin

Como Editar Preferˆncias no Vim e

Os plugins, como se pode deduzir, devem ser colocados no diret´rio denominado o plugin.  Na se¸˜o Plugins 15 (p. 101) est˜o descritos alguns plugins para o ca a Vim.

12.2

Coment´rios a

Coment´rios s˜o linhas que s˜o ignoradas pelo interpretador Vim e servem nora a a malmente para descri¸˜o de comandos e a¸˜es, deixando portanto mais leg´ e ca co ıvel did´tico o arquivo de configura¸˜o. Uma linha ´ um coment´rio se seu primeiro a ca e a caractere ´ uma aspa ‘"’: e " linhas come¸adas com aspas s~o coment´rios c a a " e portanto ser~o ignoradas pelo Vim a Recomenda-se usar coment´rios ao adicionar ou modificar comandos no arquivo a vimrc, pois assim torna-se mais f´cil futuras leituras e modifica¸˜es neste ara co quivo.

12.3

Efetiva¸˜o das altera¸oes no vimrc ca c˜

As altera¸˜es no vimrc s´ ser˜o efetivadas na pr´xima vez que o Vim for aberto, co o a o a n˜o ser que o recarregamento do arquivo de configura¸˜o seja instru´ explia ca ıdo citamente: :source ~/vimrc ....... se estiver no GNU/Linux :source ~/_vimrc ...... caso use o Windows :so arquivo ........... ‘so’ ´ uma abrevia¸~o de ‘source’ e ca

12.4

Set

Os comandos set, respons´veis por atribuir valores ` vari´veis, podem ser coa a a locados no .vimrc: set nu ou digitados como comandos: :set nu

12.4 Set

77

set number ............... "mostra numera¸~o de linhas ca set nu ................... "simplifica¸~o de ‘number’ ca set showmode ............. "mostra o modo em que estamos set showcmd .............. "mostra no status os comandos inseridos set tabstop=4 ............ "tamanho das tabula¸~es co set ts=4 ................. "simplifica¸~o de ‘tabstop’ ca set shiftwidth=4 ......... "quantidade de espa¸os de uma tabula¸~o c ca set sw=4 ................. "simplifica¸~o de ‘shiftwidth’ ca syntax on ................ "habilita cores syn on ................... "simplifica¸~o de ‘syntax’ ca colorscheme tema ......... "esquema de cores ‘syntax highlight’ autochdir ................ "configura o diret´rio de trabalho o set hls .................. "destaca com cores os termos procurados set incsearch ............ "habilita a busca incremental set ai ................... "auto identa¸~o ca set aw ................... "salva automaticamente ao trocar de ‘buffer’ set ignorecase ........... "ignora mai´sculas e min´sculas nas buscas u u set ic ................... "simplifica¸~o de ignorecase ca set smartcase ............ "numa busca em mai´sculo habilita ‘case’ u set scs .................. "sin^nimo de ‘smartcase’ o set backup ............... "habilita a cria¸~o de arquivos de backup ca set bk ................... "simplifica¸~o de ‘backup’ ca set backupext=.backup .... "especifica a extens~o do arquivo de backup a set bex=.backup .......... "simplifica¸~o de backupext ca set backupdir=~/.backup,./ "diret´rio(s) para arquivos de backup o set bdir ................. "simplifica¸~o de ‘backupdir’ ca set nobackup ............. "evita a cria¸~o de arquivos de backup ca ste nobk ................. "simplifica¸~o de ‘nobackup’ ca set cursorline ........... "abrevia¸~o de cursor line (destaca linha atual) ca set cul .................. "simplifica¸~o de ‘cursorline’ ca set ttyfast .............. "melhora o redraw de janelas. set columns=88 ........... "deixa a janela com 88 colunas. set mousemodel=popup ..... "exibe o conte´do de folders e sugest~es spell u o set viminfo=%,’50,\"100,/100,:100,n "armazena op¸~es (buffers) co O comando gqap ajusta o par´grafo atual em modo normal a " * coloca 2 espa¸os ap´s o . quando usando o gq c o "set nojoinspaces " **************************************************************** " * * " * geralmente usamos ^I para representar uma tabula¸~o ca * " * <Tab>, e $ para indicar o fim de linha. Mas ´ poss´vel e ı * " * customizar essas op¸~es. sintaxe: co * " * * " * set listchars=key:string,key:string * " * * " * * " * - eol:{char} * " * *

78

Como Editar Preferˆncias no Vim e " * Define o caracter a ser posto depois do fim da linha * " * * " * - tab:{char1}{char2} * " * * " * O tab ´ mostrado pelo primeiro caracter {char1} e e * " * seguido por {char2} * " * * " * - trail:{char} * " * * " * Esse caracter representa os espa¸os em branco. c * " * * " * - extends:{char} * " * * " * Esse caracter representa o in´cio do fim da linha ı * " * sem quebr´-la a * " * Est´ op¸~o funciona com a op¸~o nowrap habilitada a ca ca * " * * " **************************************************************** "exemplo 1: "set listchars=tab:>-,trail:.,eol:#,extends:@ "exemplo 2: "set listchars=tab:>"exemplo 3: "set listchars=tab:>"exemplo 4: set nowrap "Essa op¸~o desabilita a quebra de linha ca "set listchars=extends:+ Caso esteja usando o gvim pode setar um esquema de cores set colo desert

12.5

Exibindo caracteres invis´ ıveis

:set list

12.6

Definindo macros previamente

Definindo uma macro de nome s para ordenar e retirar linhas duplicadas let @s=":sort u" Para executar a macro s definida acima fa¸a: c @s

12.7 Mapeamentos O Vim colocar´ no comando a :sort -u

79

Bastando pressionar <Enter>. Observa¸˜o: esta macro pr´via pode ficar no ca e vimrc ou ser digitada em comando “:” :5,20sort u "da linha 5 at´ a linha 20 ordene e retire duplicados e :sort n " ordene meu documento considerando n´meros u " isto ´ ´til pois se a primeira coluna contiver e u " n´meros a ordena¸~o pode ficar errada caso n~o usemos u ca a " o par^metro ‘‘n’’ a

12.7

Mapeamentos
:h key-mapping, mapping

Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende da criatividade do usu´rio e do quanto conhece o Vim, com eles podemos cona trolar a¸˜es com quaisquer teclas, mas antes temos que saber que para criar co mapeamentos, precisamos conhecer a maneira de representar as teclas e combina¸˜es. Alguns exemplos: co tecla ....... <c-x> ....... <left> ...... <right> ..... <c-m-a> ..... <cr> ........ <Esc> ....... <leader> .... <bar> ....... <cword> ..... <cfile> ..... <cfile> ..... <sfile> ..... <left> ...... <up> ........ <m-f4> ...... <c-f> ....... <bs> ........ <space> ..... <tab> ....... tecla mapeada Ctrl-x seta para a esquerda seta para a direita Ctrl-Alt-a Enter Escape normalmente \ | pipe palavra sob o cursor arquivo sob o cursor arquivo sob o cursor sem extens~o a conte´do do arquivo sob o cursor u salta um caractere para esquerda equivale clicar em ‘seta acima’ a tecla alt -> m mais a tecla f4 Ctrl-f backspace espa¸o c tab

Para ler mais sobre atalhos de tecla no Vim acesse

80 :h index

Como Editar Preferˆncias no Vim e

No Vim podemos mapear uma tecla para o modo normal, realizando determinada opera¸˜o e a mesma tecla pode desempenhar outra fun¸˜o qualquer em ca ca modo de inser¸˜o ou comando, veja: ca " 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¸a nos mapeamentos acima ´ que o mapeamento para modo de ´ c e inser¸˜o come¸a com ‘i’, assim como para o modo “comando” ‘:’ come¸a com ca c c ‘c’ no caso ‘cmap’.

12.7.1

Recarregando o arquivo de configura¸˜o ca

Cada altera¸˜o no arquivo de configura¸˜o do Vim s´ ter´ efeito na pr´xima vez ca ca o a o que vocˆ abrir o Vim a menos que vocˆ coloque isto dentro do mesmo e e " recarregar o vimrc " Source the .vimrc or _vimrc file, depending on system if &term == "win32" || "pcterm" || has("gui_win32") map ,v :e $HOME/_vimrc<CR> nmap <F12> :<C-u>source ~/_vimrc <BAR> echo "Vimrc recarregado!"<CR> else map ,v :e $HOME/.vimrc<CR> nmap <F12> :<C-u>source ~/.vimrc <BAR> echo "Vimrc recarregado!"<CR> endif Agora basta pressionar “<F12>” em modo normal e as altera¸˜es passam a valer co instantaneamente, e para chamar o vimrc basta usar. ,v Os mapeamentos abaixo s˜o uteis para quem escreve c´digos HTML, permia ´ o tem inserir caracteres reservados do HTML usando uma barra invertida para proteger os mesmos, o Vim substituir´ os “barra alguma coisa” pelo caractere a correspondente. inoremap inoremap inoremap inoremap \&amp; &amp;amp; \&lt; &amp;lt; \&gt; &amp;gt; \. &amp;middot;

O termo inoremap significa: em modo de inser¸˜o n˜o remapear, ou seja ele ca a mapeia o atalho e n˜o permite que o mesmo seja remapeado, e o mapeamento a

12.7 Mapeamentos

81

s´ funciona em modo de inser¸˜o, isso significa que um atalho pode ser mapeado o ca para diferentes modos de opera¸˜o. ca Veja este outro mapeamento: map <F11> <Esc>:set nu!<cr> Permite habilitar ou desabilitar n´meros de linha do arquivo corrente. A exclau ma¸˜o ao final torna o comando booleano, ou seja, se a numera¸˜o estiver ativa ca ca ser´ desabilitada, caso contr´rio ser´ ativada. O “<cr>” ao final representa um a a a Enter.

12.7.2

Limpando o “registro” de buscas

A cada busca, se a op¸˜o ‘hls’1 estiver habilitada o Vim faz um destaque coloca rido, mas se vocˆ quiser limpar pode fazer este mapeamento e nno <S-F11> <Esc>:let @/=""<CR> ´ E um mapeamento para o modo normal que faz com que a combina¸˜o de teclas ca Shift-F11 limpe o “registro” de buscas

12.7.3

Destacar palavra sob o cursor

nmap <s-f> :let @/=">"<CR> O atalho acima s-f corresponde a Shift-f.

12.7.4

Remover linhas em branco duplicadas

map ,d <Esc>:%s/\(^\n\{2,}\)/\r/g<cr> No mapeamento acima estamos associando o atalho: ,d . . . ` a¸˜o desejada, fazer com que linhas em branco sucessivas sejam substitu´ a ca ıdas por uma s´ linha em branco, vejamos como funciona: o map ......... ,d .......... <Esc> ....... : ........... % ...........
1 hls

mapear atalho que quermos se estive em modo de inser¸~o sai ca em modo de comando em todo o arquivo

´ uma abrevia¸˜o de hightlight search e ca

82 s ........... \n .......... {2,} ........ \r .......... g ........... <cr> ........

Como Editar Preferˆncias no Vim e substitua quebra de linha duas ou mais vezes trocado por \r Enter globalmente confirma¸~o do comando ca

As barras invertidas podem n˜o ser usadas se o seu Vim estiver com a op¸˜o a ca magic habilitada :set magic Por acaso este ´ um padr˜o portanto tente usar assim pra ver se funciona e a map ,d :%s/\n{2,}/\r/g<cr>

12.7.5

Mapeamento para Calcular Express˜es o

Os mapeamentos abaixo exibem o resultado das quatro opera¸˜es b´sicas (soma, co a subtra¸˜o, multiplica¸˜o e divis˜o). O primeiro para o modo normal no qual ca ca a posiciona-se o cursor no primeiro caractere da express˜o tipo “5*9” e em seguida a pressiona-se “Shift-F1”, o segundo para o modo insert em que, ap´s digitada a o express˜o pressiona-se o mesmo atalho. a " calculadora map <s-f1> <esc>0"myEA=<c-r>=<c-r>m<enter><esc> imap <s-f1> <space><esc>"myBEa=<c-r>=<c-r>m<enter><del> Para efetuar c´lculos com maior precis˜o e tamb´m resolver problemas como a a e potˆncias ra´ e ızes, logaritmos pode-se mapear comandos externos, como a biblioteca matem´tica da linguagem de programa¸˜o Python. Neste link: http: a ca //vim.wikia.com/wiki/Scientific_calculator h´ um manual que ensina a a realizar este procedimento, ou acesse o cap´ ıtulo 3.16 na p´gina 20. a

12.7.6

Mapeamentos globais

Podemos fazer mapeamentos globais ou que funcionam em apenas um modo: map - funciona em qualquer modo nmap - apenas no modo Normal imap - apenas no modo de Inser¸~o ca Mover linhas com Ctrl-↓ ou Ctrl-↑: " tem que estar em modo normal! nmap <C-Down> ddp nmap <C-Up> ddkP

12.8 Autocomandos Salvando com uma tecla de fun¸˜o: ca " salva com F9 nmap <F9> :w<cr> " F10 - sai do Vim nmap <F10> <Esc>:q<cr>

83

12.7.7

Convertendo as iniciais de um documento para mai´ su culas

" MinusculasMaiusculas: converte a primeira letra de cada " frase para MAI´SCULAS U nmap ,mm :%s/\C\([.!?][])"’]*\($\|[ ]\)\_s*\)\(\l\)/\1\U\3/g<CR> " Caso queira confirma¸~o coloque uma letra ‘‘c’’ no final da ca " linha acima: " (...) \3/gc<CR>

12.8

Autocomandos
:h autocmd.txt

Autocomandos habilitam comandos autom´ticos para situa¸˜es espec´ a co ıficas. Para executar determinada a¸˜o ao iniciar um novo arquivo o autocomando dever´ ca a obedecer este padr˜o: a au BufNewFile tipo a¸~o ca Veja um exemplo: au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim No exemplo acima o Vim aplica autocomandos para arquivos novos“BufNewfile” ou existentes “BufRead” terminados em txt, e para estes tipos carrega um arquivo 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¸alho para scripts bash caso a linha 1 c esteja vazia, observe que os arquivos em quest˜o tem que ter a extens˜o ‘.s’. a a au BufNewFile,BufRead *.sh if getline(1) == "" | normal ,sh

84

Como Editar Preferˆncias no Vim e

12.8.1

Exemplo pr´tico de autocomandos a

H´ situa¸˜es em que ´ necess´ria a uniformiza¸˜o de a¸˜es, por exemplo, em a co e a ca co c´digos Python deve-se manter um padr˜o para a indenta¸˜o, ou ser´ com eso a ca a pa¸os ou ser´ com tabula¸˜es, n˜o se pode misturar os dois pois o interpretador c a co a retornaria um erro. Outra situa¸˜o em que misturar espa¸os com tabula¸˜es ca c co A ocasiona erros ´ em c´digos L TEX, ao compilar o documento a formata¸˜o n˜o e o ca a sai como desejado. At´ que se perceba o erro leva um tempo. Para configurar e o vim de forma que ele detecte este tipo de erro ao entrar no arquivo: au! VimEnter * match ErrorMsg /^\t\+/ " explica¸~o para o ca au! ............... VimEnter .......... * ................. match ErrorMsg .... / ................. ^ ................. \t ................ \+ ................ / ................. autocomando acima automaticamente ao entrar no vim para qualquer tipo de arquivo destaque como erro inicio de um padr~o a come¸o de linha c tabula¸~o ca uma vez ou mais fim do padr~o de buscas a

Para evitar que este erro se repita, ou seja, que sejam adicionados no come¸o c de linha tabula¸˜es no lugar de espa¸os adiciona-se ao ˜/.vimrc co c set expandtab ´ E perfeitamente poss´ ıvel um autocomando que fa¸a direto a substitui¸˜o de c ca tabula¸˜es por espa¸os, mas neste caso n˜o ´ recomendado que o autocomando co c a e se aplique a todos os tipos de aquivos.

12.9
12.9.1

Fun¸oes c˜
Fechamento autom´tico de parˆnteses a e

" -------------------------------------" Ativa fechamento autom´tico para par^ntese a e " Set automatic expansion of parenthesis/brackets inoremap ( ()<Esc>:call BC_AddChar(‘‘)’’)<cr>i inoremap { {}<Esc>:call BC_AddChar(‘‘}’’)<cr>i inoremap [ []<Esc>:call BC_AddChar(‘‘]’’)<cr>i ‘‘ ’’ ‘‘’’<Esc>:call BC_AddChar(‘‘’’")<cr>i " " mapeia Ctrl-j para pular fora de par^nteses colchetes etc... e inoremap <C-j> <Esc>:call search(BC_GetChar(), ‘‘W’’)<cr>a " Function for the above function! BC_AddChar(schar)

12.9 Fun¸˜es co

85

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¸~o para fechamento de par^nteses’’’ ca e " Fechamento autom´tico de par^nteses a e imap { {}<left> imap ( ()<left> imap [ []<left> " pular fora dos par^nteses, colchetes e chaves, mover o cursor e " no modo de inser¸~o ca imap <c-l> <Esc><right>a imap <c-h> <Esc><left>a

12.9.2

Fun¸˜o para barra de status ca

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´digo n˜o funcione acesse este link: http://www.linux.com/feature/ o a 120126.

12.9.3

Rolar outra janela

Se vocˆ dividir janelas tipo e Ctrl-w n pode colocar esta fun¸˜o no seu .vimrc ca " rola janela alternativa fun! ScrollOtherWindow(dir) if a:dir == ‘‘n’’ let move = ‘‘>’’

86

Como Editar Preferˆncias no Vim e 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¸˜o ´ acionada com o atalho Alt-↑ e Alt-↓. ca e

12.9.4

Fun¸˜o para numerar linhas ca

link para a dica: http://vim.wikia.com/wiki/Number_a_group_of_lines

12.9.5

Fun¸˜o para trocar o esquema de cores ca

function! <SID>SwitchColorSchemes() 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 <SID>SwitchColorSchemes()<CR> baixe os esquemas aqui: http://nanasi.jp/old/colorscheme_0.html

12.9.6

Uma fun¸˜o para inserir cabe¸alho de script ca c

para chamar a fun¸˜o basta pressionar, sh em modo normal ca " Cria um cabe¸alho para scripts bash c fun! InsertHeadBash()

12.9 Fun¸˜es co

87

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¸~o:‘‘(’’%a %d/%b/%Y hs %H:%M")) ca call append(3, "# NOME DA SUA EMPRESA") call append(3, "# Prop´sito do script") o normal($) endfun map ,sh :call InsertHeadBash()<cr>

12.9.7

Fun¸˜o para inserir cabe¸alhos Python ca c

" fun¸~o para inserir cabe¸alhos Python ca c 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()<cr>A " Ao editar um arquivo ser´ aberto no ´ltimo ponto em a u " que foi editado autocmd BufReadPost * \ if line(’‘‘\’’‘‘(’’’\‘‘’’) <= line(‘‘$’’) | \ exe ’’normal g‘\‘‘" | \ endif " Permite recarregar o Vim para que modifica¸~es no co " Pr´prio vimrc seja ativadas com o mesmo sendo editado o nmap <F12> :<C-u>source $HOME/.vimrc <BAR> echo "Vimrc recarregado!"<CR> Redimensionar janelas " Redimensionar a janela com " Alt-seta ` direita e esquerda a map <M-right> <Esc>:resize +2 <CR> map <M-left> <Esc>:resize -2 <CR>

88

Como Editar Preferˆncias no Vim e

12.9.8

Fun¸˜o para pular para uma linha ca

"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 ´ com Ctrl-l e "use o que melhor lhe convier imap <S-l> <C-o>:call GoToLine()<CR> nmap <S-l> :call GoToLine()<CR>

12.9.9

Fun¸˜o para gerar backup ca

A fun¸˜o abaixo ´ util para ser usada quando vocˆ vai editar um arquivo gerando ca e´ e modifica¸˜es significativas, assim vocˆ poder´ restaurar o backup se necess´rio co e a a " A mapping to make a backup of the current file. fun! WriteBackup() let fname = expand("%:p") . "__" . strftime("%d-%m-%Y--%H.%M.%S") silent exe ":w " . fname echo "Wrote " . fname endfun nnoremap <Leader>ba :call WriteBackup()<CR> 

O atalho “<leader>” em geral ´ a barra invertida “\”, na d´vida “:help e u <leader>”. 12.10 Como adicionar o Python ao path do Vim?

fonte: http://vim.wikia.com/wiki/Automatically_add_Python_paths_to_ Vim_path Coloque o seguinte script em: * ~/.vim/after/ftplugin/python.vim (on Unix systems) %* $HOME/vimfiles/after/ftplugin/python.vim (on Windows systems) python << EOF import os import sys import vim for p in sys.path: # Add each directory in sys.path, if it exists. if os.path.isdir(p): # Command ‘set’ needs backslash before each space. vim.command(r‘‘s’’ % (p.replace(‘‘ ’’, r‘‘ ’’))) EOF Isto lhe permite usar ‘gf’ ou Ctrl-w Ctrl-F para abrir um arquivo sob o cursor

12.11 Criando um menu

89

12.11

Criando um menu

Como no Vim podemos ter infinitos comandos fica complicado memorizar tudo ´ a´ que entram os menus, podemos colocar nossos plugins e atalhos favoritos e ı em um menu veja este exemplo amenu Ferramentas.ExibirNomeDoTema :echo g:colors_name<cr> O comando acima diz: amenu ........................ cria um menu Ferramentas.ExibirNomeDoTema . Menu plugin submenu ExibirNomeDoTema :echo g:colors_name<cr> ...... exibe o nome do tema atual Caso haja espa¸os no nome a definir vocˆ pode fazer assim c e amenu Ferramentas.Exibir\ nome\ do\ tema :echo g:colors_name<cr>

12.12

Criando menus para um modo espec´ ıfico
Normal, Visual e Operator-pending Modo Normal Modo Visual Operator-pending modo Insert e Comando Modo de inser¸~o ca Modo de comando Todos os modos

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

12.13

Exemplo de menu

" cores menu T&emas.cores.quagmire :colo quagmire<CR> menu T&emas.cores.inkpot :colo inkpot<CR> menu T&emas.cores.google :colo google<CR> menu T&emas.cores.ir_black :colo ir_black<CR> menu T&emas.cores.molokai :colo molokai<CR> " Fontes menu T&emas.fonte.Inconsolata :set gfn=Inconsolata:h10<CR> menu T&emas.fonte.Anonymous :set anti gfn=Anonymous:h8<CR> menu T&emas.fonte.Envy\ Code :set anti gfn=Envy_Code_R:h10<CR> menu T&emas.fonte.Monaco :set gfn=monaco:h9<CR> menu T&emas.fonte.Crisp :set anti gfn=Crisp:h12<CR> menu T&emas.fonte.Liberation\ Mono :set gfn=Liberation\ Mono:h10<CR>

90

Como Editar Preferˆncias no Vim e 

O comando “:update” Atualiza o menu rec´m modificado. e

Quando o co´ mando “:amenu” E usado sem nenhum argumento o Vim mostra os menus definidos atualmente. Para listar todas as op¸˜es de menu para ‘Plugin’ por exemplo co digita-se no modo de comandos “:amenu Plugin”.

12.14

Outros mapeamentos

Destaca espa¸os e tabula¸˜es redundantes: c co highlight RedundantWhitespace ctermbg=red guibg=red match RedundantWhitespace /\s\+$\| \+\ze\t/ Explicando com detalhes \s ..... \+ ..... $ ...... \| ..... ‘‘ ’’ .. \+ ..... \ze .... \t ..... espa¸o c uma ou mais vezes no final da linha ou espa¸o (veja imagem acima) c uma ou mais vezes at´ o fim e tabula¸~o ca

Portanto a express˜o regular acima localizar´ espa¸os ou tabula¸˜es no final de a a c co linha e destacar´ em vermelho. a "Remove espa¸os redundantes no fim das linhas c map <F7> <Esc>mz:%s/\s\+$//g<cr>‘z Um detalhe importante mz ... marca a posi¸~o atual do cursor para retornar no final do comando ca ‘z ... retorna ` marca criada a Se n˜o fosse feito isto o cursor iria ficar na linha da ultima substitui¸˜o! a ´ ca "Abre o vim explorer map <F6> <Esc>:vne .<cr><bar>:vertical resize -30<cr><bar>:set nonu<cr> Podemos usar “Express˜es Regulares2 ” em buscas do Vim veja um exemplo para o retirar todas as tags HTML "mapeamento para retirar tags HTML com Ctrl-Alt-t nmap <C-M-t> :%s/<[^>]*>//g <cr> " Quebra a linha atual no local do cursor com F2 nmap <F2> a<CR><Esc> " join lines -- Junta as linhas com Shift-F2 nmap <S-F2> A<Del><Space> Para mais detalhes sobre buscas acesse o cap´ ıtulo“6 na p´gina 39”. a
2 http://guia-er.sourceforge.net

12.15 Complementa¸˜o com “tab” ca

91

12.15

Complementa¸˜o com “tab” ca

"Word completion "Complementa¸~o de palavras ca set dictionary+=/usr/dict/words set complete=.,w,k "------ complementa¸~o de palavras ---ca "usa o tab em modo de inser¸~o para completar palavras ca 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.16

Abrevia¸˜es co

Abrevia¸˜es habilitam auto-texto para o Vim. O seu funcionamento consiste de co trˆs campos, o primeiro ´ o modo no qual a abrevia¸˜o funcionar´, o segundo e e ca a ´ a palavra que ir´ disparar a abrevia¸˜o e o terceiro campo ´ a abrevia¸˜o e a ca e ca propriamente dita. Para que em modo de comando ‘:’ a palavra ‘salvar’ funcione para salvar os arquivos, adiciona-se a seguinte abrevia¸˜o ao ‘~/.vimrc’. ca cab salvar w Abaixo abrevia¸˜es para o modo de inser¸˜o: co ca iab slas S´rgio Luiz Ara´jo Silva e u iab Linux GNU/Linux iab linux GNU/Linux

12.17

Evitando arquivos de backup no disco

Nota-se em algumas situa¸˜es que existem alguns arquivos com o mesmo nome co dos arquivos que foram editados, por´m com um til (˜) no final. Esses arquivos e s˜o backups que o Vim gera antes de sobrescrever os arquivos, e podem desde a

92

Como Editar Preferˆncias no Vim e

ocupar espa¸o significativo no disco r´ c ıgido at´ representar falha de seguran¸a, e c como por exemplo arquivos .php~ que n˜o s˜o interpretados pelo servidor web a a e exp˜em o c´digo-fonte. o o Para que os backups sejam feitos enquanto os arquivos estejam sendo escritos, por´m n˜o mantidos ap´s terminar a escrita, utiliza-se no .vimrc: e a o set nobackup set writebackup Fonte: http://eustaquiorangel.com/posts/520

12.18

Mantendo apenas um Gvim aberto

Essa dica destina-se apenas ` vers˜o do Vim que roda no ambiente gr´fico, a a a ou seja, o Gvim, pois ela faz uso de alguns recursos que s´ funcionam nesse o ambiente. A meta ´ criar um comando que vai abrir os arquivos indicados em e abas novas sempre na janela j´ existente. a 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´fico) que vai ser utilizado sempre que quisermos abrir nossos arquivos dessa a maneira. Para efeito do exemplo, o nome do arquivo ser´ tvim (de tabbed vim), a por´m pode ser nomeado com o nome que for conveniente. e A unica necessidade para essa dica funcionar ´ a vers˜o do Vim ter suporte para ´ e a o argumento -serverlist, o que deve ser garantido nas vers˜es presentes na o ´poca em que esse documento foi escrito. Para fazer uma simples verifica¸˜o se e ca o comando est´ dispon´ a ıvel, deve ser digitado em um terminal: vim --serverlist gvim --serverlist Se ambos os comandos acima resultaram em erro, o procedimento n˜o poder´ a a ser implementado. Do contr´rio, deve-se utilizar o comando que teve um retorno a v´lido (vim ou gvim) para a criar o script. Supondo que foi o comando gvim a que n˜o retornou um erro, criamos o script da seguinte forma: a #!/bin/bash if [ $# -ne 1 ] then echo "Sem arquivos para editar." exit fi gvim --servername $(gvim --serverlist | head -1) --remote-tab $1 Desse modo, se for digitado tvim sem qualquer argumento, ´ exibida a mensagem e de erro, do contr´rio, o arquivo ´ aberto na c´pia corrente do Gvim, em uma a e o nova aba, por exemplo:
3 Diret´rios o

nos quais o sistema busca pelos comandos

12.19 Referˆncias e tvim .vimrc Fonte: http://eustaquiorangel.com/posts/477

93

12.19

Referˆncias e

* http://www.dicas-l.com.br/dicas-l/20050118.php

Cap´ ıtulo 13

Um Wiki para o Vim
´ E ineg´vel a facilidade que um Wiki nos traz, os documentos s˜o indexados a a e linkados de forma simples. J´ pesquisei uma por¸˜o de Wikis e, para uso a ca pessoal recomendo o Potwiki. O “link” do Potwiki ´: http://www.vim.org/ e scripts/script.php?script_id=1018. O Potwiki ´ um Wiki completo para o e Vim, funciona localmente embora possa ser aberto remotamente via ssh1 . Para criar um “link” no Potwiki basta usar WikiNames, s˜o nomes iniciados com letra a mai´scula e que contenham outra letra em mai´sculo no meio. u u Ao baixar o arquivo salve em ~/.vim/plugin. Mais ou menos na linha 53 do Potwiki ~/.vim/plugin/potwiki.vim vocˆ define e onde ele guardar´ os arquivos, no meu caso /home/docs/textos/wiki. a linha a ficou assim: call s:default(’home’,"~/.wiki/HomePage") Outra forma de indicar a p´gina inicial seria colocar no seu .virmc a let potwiki_home = "$HOME/.wiki/HomePage"

13.1

Como usar

O Potwiki trabalha com WikiWords, ou seja, palavras iniciadas com letras em mai´sculo e que tenham outra letra em mai´sculo no meio (sem espa¸os). Para u u c iniciar o Potwiki abra o Vim e pressione \ww. <Leader> ´ igual a \ e - veja :help leader \ww .... abra a sua HomePage \wi .... abre o Wiki index
1 Sistema

de acesso remoto

13.2 Salvamento autom´tico para o Wiki a \wf .... \we .... \\ .... <CR> .... <Tab>.... <BS> .... \wr ....

95

segue uma WikiWords (can be used in any buffer!) edite um arquivo Wiki Fecha o arquivo segue WikiWords embaixo do cursor <CR> ´ igual a Enter e move para a pr´xima WikiWords o move para os WikiWords anteriores (mesma p´gina) a recarrega WikiWords

13.2

Salvamento autom´tico para o Wiki a

Procure por uma se¸˜o autowrite no manual do Potwiki ca :help potwiki O valor que est´ em zero dever´ ficar em 1 a a call s:default(‘autowrite’,0)

13.3

Dicas

Como eu mantenho o meu Wiki oculto “.wiki” criei um “link” para a pasta de textos ln -s ~/.wiki /home/sergio/docs/textos/wiki Vez por outra entro na pasta ~/docs/textos/wiki e crio um pacote tar.gz e mando para “web” como forma de manter um “backup”.

13.4

Problemas com codifica¸˜o de caracteres ca

Atualmente uso o Ubuntu em casa e ele j´ usa utf-8. Ao restaurar meu “backup” a 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 isso fa¸a: c recode -d u8..l1 arquivo

Cap´ ıtulo 14

H´bitos para Edi¸˜o Efetiva a ca
Um dos grandes problemas relacionados com os softwares ´ sua subutiliza¸˜o. e ca Por in´rcia o usu´rio tende a aprender o m´ e a ınimo para a utiliza¸˜o de um proca grama e deixa de lado recursos que poderiam lhe ser de grande valia. O mantenedor do Vim, Bram Moolenaar1 , recentemente publicou v´ ıdeos e manuais sobre os “7 h´bitos para edi¸ao efetiva de textos”2 , este cap´ a c˜ ıtulo pretende resumir alguns conceitos mostrados por Bram Moolenaar em seu artigo.

14.1

Mova-se rapidamente no texto

O cap´ ıtulo “Movendo-se no Documento 2 na p´gina 7 mostra uma s´rie de a e comandos para agilizar a navega¸˜o no texto. Memorizando estes comandos ca ganha-se tempo consider´vel, um exemplo simples em que o usu´rio est´ na a a a linha 345 de um arquivo decide ver o conte´do da linha 1 e em seguida voltar ` u a linha 345: gg ....... vai para a linha 1 ’’ ....... retorna ao ´ltimo ponto em que estava u Fica claro portanto que a navega¸˜o r´pida ´ um dos requisitos para edi¸˜o ca a e ca efetiva de documentos.

14.2

Use marcas

veja a se¸˜o 3.19 na p´gina 22. ca a ma ..... ’a ..... d’a .... y’a .... em modo normal cria uma marca ‘a’ move o cursor at´ a marca ‘a’ e deleta at´ a marca ‘a’ e copia at´ a marca ‘a’ e

1 http://www.moolenaar.net 2 http://br-linux.org/linux/7-habitos-da-edicao-de-texto-efetiva

14.3 Use quantificadores gg ... G .... 0 .... $ .... fx ... dfx .. g, ... g; ... p .... P .... H .... M .... L .... vai para a linha 1 do arquivo vai para a ´ltima linha do arquivo u vai para o in´cio da linha ı vai para o fim da linha pula at´ a pr´xima ocorr^ncia de ‘‘x’’ e o e deleta at´ a pr´xima ocorr^ncia de ‘‘x’’ e o e avan¸a na lista de altera¸~es c co retrocede na lista de altera¸~es co cola o que foi deletado/copiado abaixo cola o que foi deletado/copiado acima posiciona o cursor no primeiro caractere da tela posiciona o cursor no meio da tela posiciona o cursor na ´ltima linha da tela u

97

* ........ localiza a palavra sob o cursor % ........ localiza fechamentos de chaves, par^nteses etc. e g* ....... localiza palavra parcialmente ’. apostrofo + ponto retorna ao ´ltimo local editado u ’’ retorna ao local do ultimo salto Suponha que vocˆ est´ procurando a palavra ‘argc’: e a /argc Digita ‘n’ para buscar a pr´xima ocorrˆncia o e n Um jeito mais f´cil seria: a "coloque a linha abaixo no seu vimrc :set hlsearch Agora use asterisco para destacar todas as ocorrˆncias do padr˜o desejado e use e a a letra ‘n’ para pular entre ocorrˆncias, caso deseje seguir o caminho inverso use e ‘N’.

14.3

Use quantificadores

Em modo normal vocˆ pode fazer e 10j ..... 5dd ..... :50 ..... 50gg .... desce 10 apaga as vai para vai para linhas pr´ximas 5 linhas o a linha 50 a linha 50

98

H´bitos para Edi¸˜o Efetiva a ca

14.4

Edite v´rios arquivos de uma s´ vez a o

O Vim pode abrir v´rios arquivos que contenham um determinado padr˜o. Um a a exemplo seria abrir dezenas de arquivos HTML e trocar a ocorrˆncia bgcolor="ffffff" e Para bgcolor="eeeeee" Usar´ ıamos a seguinte sequˆncia de comandos: e vim *.html .............................. abre os arquivos :bufdo :%s/bgcolor=‘ffffff’/bgcolor=‘eeeeee’/g substitui¸~o ca :wall .................................... salva todos :qall .................................... fecha todos Ainda com rela¸˜o ` edi¸˜o de v´rios arquivos poder´ ca a ca a ı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 modificado no arquivo atual e mudar´ ıamos para o pr´ximo. o Veja tamb´m: 2 e

14.5

N˜o digite duas vezes a

• O Vim complementa com ‘tab’. Veja mais na se¸˜o 12.15 na p´gina 91. ca a • Use macros. Detalhes na se¸˜o ?? p´gina ??. ca a • Use abrevia¸˜es coloque abrevia¸˜es como abaixo em seu ~/.vimrc. Veja co co mais na se¸˜o 12.16. ca • As abrevia¸˜es fazem o mesmo que auto-corre¸˜o e auto-texto em outros co ca editores iab tambem tamb´m e iab linux GNU/Linux No modo de inser¸˜o vocˆ pode usar: ca e 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´do em um registrador: u "ayy ... copia a linha atual para o registrador ‘a’ "ap ... cola o registrador ‘a’ Crie abrevia¸˜es para erros comuns no seu arquivo de configura¸˜o ( /.vimrc): co ca

14.6 Use dobras iabbrev teh the syntax keyword WordError teh

99

As linhas acima criam uma abrevia¸˜o para erro de digita¸˜o da palavra ‘the’ e ca ca destaca textos que vocˆ abrir que contenham este erro. e

14.6

Use dobras

O Vim pode ocultar partes do texto que n˜o est˜o sendo utilizadas permitindo a a uma melhor visualiza¸˜o do conte´do. Mais detalhes no cap´ ca u ıtulo 4 p´gina 27. a

14.7

Use autocomandos

No arquivo de configura¸˜o do Vim ~/.vimrc pode-se pode criar comandos ca autom´ticos que ser˜o executados diante de uma determinada circunstˆncia. a a a O comando abaixo ser´ executado em qualquer arquivo existente, ao abrir o a 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¸˜o do Vim exclusivo para o tipo html/htm e ca no caso de arquivos novos ‘BufNewFile’ ele j´ cria um esqueleto puxando do a endere¸o indicado: c 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´s o corpo <body> o au BufNewFile,BufRead *.html,*.shtml,*.htm set noautoindent augroup end Documenta¸˜o sobre autocomandos do Vim http://www.vim.org/htmldoc/ ca autocmd.html.

14.8

Use o File Explorer

O Vim pode navegar em pastas assim:

100 vim .

H´bitos para Edi¸˜o Efetiva a ca

Vocˆ pode usar ‘j’ e ‘k’ para navegar e Enter para editar o arquivo selecionado: e

14.9

Torne as boas pr´ticas um h´bito a a

Para cada pr´tica produtiva procure adquirir um h´bito e mantenha-se atento a a ao que pode ser melhorado. Imagine tarefas complexas, procure um meio melhor de fazer e torne um h´bito. a

14.10

Referˆncias e

• 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˜o um meio de estender as funcionalidades do Vim, h´ “plugins” para a a diversas tarefas, desde wikis para o Vim at´ ferramentas de aux´ a navega¸˜o e ılio ca em arquivos com ´ o caso do “plugin” http://www.vim.org/scripts/script. e php?script_id=1658 NerdTree, que divide uma janela que permite navegar pelos diret´rios do sistema a fim de abrir arquivos a serem editados. o

15.1

Como testar um plugin sem instal´-lo? a

:source <path>/<plugin> Caso o plugin atenda as necessidades, pode-se instal´-lo. Este procedimento a tamb´m funciona para temas de cor! e No GNU/Linux ~/.vim/plugin/ No Windows ~/vimfiles/plugin/ Obs: Caso ainda n˜o exista o diret´rio, ele pode ser criado pelo pr´prio usu´rio a o o a Exemplo no GNU/Linux + /home/usuario/ | | + .vim | | + plugin
1 Plugins

s˜o recursos que se adicionam aos programas a

102

Plugins

Obs: Alguns plugins dependem da vers˜o do Vim, para saber qual a que est´ a a atualmente instalada: :ver

15.2

A Plugin para LTEX

A Um plugin completo para L TEXest´ acess´ aqui: http://vim-latex.sourceforge. a ıvel net/ Uma vez adicionado o plugin vocˆ pode inserir seus templates em: e

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

15.3

A Criando folders para arquivos LTEX

set foldmarker=\\begin,\\end set foldmethod=marker
A Adicionar marcadores (labels) `s se¸˜es de um documento L TEX a co

:.s/^\(\\section\)\({.*}\)/\1\2\r\\label\2 : ........... / ........... ^ ........... \(palavra\) . \(\\section\) \\ .......... { ........... .* .......... } ........... / ........... \1 .......... \2 .......... \r .......... \\ .......... \2 .......... comando inicia padr~o de busca a come¸o de linha c agrupa um trecho agrupa ‘\section’ torna \ literal chave literal qualquer caractere em qualquer quantidade chave literal finaliza par~o de busca a repeter o grupo 1 \(\\section\) repete o grupo 2 \({.*\}\) insere quebra de linha insere uma barra invertida repete o nome da se¸~o ca

15.4

A Criando se¸oes LTEX c˜

o comando abaixo substitui ==se¸~o== ca por

15.5 Plugin para manipular arquivos \section{se¸~o} ca :.s/^==\s\?\([^=]*\)\s\?==/\\section{\1}/g : ......... . ......... s ......... ^ ......... == ........ \s\? ...... [^=] ...... * ......... \s\? ...... \\ ........ \1 ........

103

comando linha atual substitua come¸o de linha c dois sinais de igual seguido ou n~o de espa¸o a c n~o pode haver = (^ dentro de [] ´ nega¸~o) a e ca diz que o que vem antes pode vir zero ou mais vezes seguido ou n~o de espa¸o a c insere uma barra invertida repete o primeiro trecho entre ()

15.5

Plugin para manipular arquivos

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

15.6

Complementa¸˜o de c´digos ca o

O “plugin” snippetsEmu ´ um misto entre complementa¸˜o de c´digos e os chae ca o mados modelos ou templates. Insere um trecho de c´digo pronto, mas vai o al´m disso, permitindo saltar para trechos do modelo inserido atrav´s de um e e atalho configur´vel de modo a agilizar o trabalho do programador. “http: a //www.vim.org/scripts/script.php?script_id=1318”:

15.7

Instala¸˜o ca

Um artigo ensinando como instalar o “plugin” snippetsEmu pode ser lido aqui: “http://vivaotux.blogspot.com/2008/03/instalando-o-plugin-snippetsemu-no-vim. html”:

15.8

Um wiki para o Vim

O “plugin” wikipot implementa um wiki para o Vim no qual vocˆ define um e “link” com a nota¸˜o WikiWord, onde um “link” ´ uma palavra que come¸a com ca e c uma letra mai´scula e tem outra letra mai´scula no meio Obtendo o plugin u u neste link: http://www.vim.org/scripts/script.php?script_id=1018.

104

Plugins

15.9

Acessando documenta¸˜o do Python no Vim ca

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

15.10

Formatando textos planos com syntax

http://www.vim.org/scripts/script.php?script_id=2208&rating=helpful# 1.3 Veja como instalar o este plugin no cap´ ıtulo 15.8.

15.11

Movimentando em camel case

O plugin CamelCaseMotion auxilia a navega¸˜o em palavras em camel case ou ca separadas por sublinhados, atrav´s de mapeamentos similares aos que fazem a e movimenta¸˜o normal entre strings, e ´ um recurso de grande ajuda quando o ca e editor ´ utilizado para programa¸˜o. e ca Ap´s instalado o plugin, os seguintes atalhos ficam dispon´ o ıveis: ,w Movimenta para a pr´xima posi¸˜o camel dentro da string o ca ,b Movimenta para a posi¸˜o camel anterior dentro da string ca ,e Movimenta para o caractere anterior ` pr´xima posi¸˜o camel dentro da a o ca string Fonte: http://eustaquiorangel.com/posts/522

15.12

Plugin FuzzyFinder

Este plugin ´ a implementa¸˜o de um recurso do editor Texmate2 . Sua proposta e ca ´ acessar de forma r´pida: e a 1. Arquivos :FuzzyFinderFile 2. Arquivos rec´m editados :FuzzyFinderMruFile e 3. Comandos rec´m utilizados :FuzzyFinderMruCmd e 4. Favoritos :FuzzyFinderAddBookmark, :FuzzyFinderBookmarks 5. Navega¸˜o por diret´rios :FuzzyFinderDir ca o 6. Tags :FuzzyFinderTag Para ver o plugin em a¸˜o acesse este link: http://vimeo.com/2938498. ca O plugin pode ser obtido no seguinte endere¸o: http://www.vim.org/scripts/ c script.php?script_id=1984, para instal´-lo basta copiar para o diret´rio /.vim/plugin. a o
2 Editor

de textos da Apple com muitos recursos

15.13 O plugin EasyGrep

105

15.13

O plugin EasyGrep

Usu´rios de sistemas Unix Like3 , j´ conhecem o poder do comando grep, usando a a este comando procuramos palavras dentro de arquivos, este plugin simplifica esta tarefa, al´m de permitir a utiliza¸˜o da vers˜o do grep nativa do Vim vimgrep, e ca a assim usu´rios do Windows tamb´m podem usar este recurso. Um comando a e grep funciona mais ou menos assim: grep [op¸~es] "padr~o" /caminho co a Mas no caso do plugin EasyGrep fica assim: :Grep foo ........ procura pela palavra ’foo’ :GrepOptions ...... exibe as op¸~es de uso do plugin co O plugin pode ser obtido no seguinte endere¸o: “http://www.vim.org/scripts/ c script.php?script_id=2438#0.9”, j´ sua instala¸˜o ´ simples, basta copiar o a ca e 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¸˜o gif) http://downloads. ca veryspeedy.net/vim/EasyGrep.gif

15.14

O plugin SearchComplete

Para que o vim complete op¸˜es de busca “com a tecla <tab>”, digita-se uma co palavra parcialmente e o plugin atua, exibindo palavras que tem o mesmo in´ ıcio, por exemplo: /merca<tab> /mercado /mercantil /mercadol´gico o Cada vez que se pressiona a tecla <tab> o cursor saltar´ para a pr´xima ocora o rˆncia daquele fragmento de palavra. e Pode-se obter o plugin SearchComplete no seguinte endere¸o: “http://www. c vim.org/scripts/script.php?script_id=474”, e para instal´-lo basta copi´a a lo para a pasta apropriada: ~/vimfiles/plugin .......... no windows ~/.vim/plugin .............. no Gnu/Linux H´ outro plugin similar chamado CmdlineComplete dispon´ neste link: http: a ıvel //www.vim.org/scripts/script.php?script_id=2222.
3 Sistemas

da fam´ Unix tipo o GNU/Linux ılia

106

Plugins

15.15

O plugin AutoComplete

Este plugin trabalha exibindo sugest˜es no modo de inser¸˜o, ` medida que o o ca a usu´rio digita aparece um popup com sugest˜es para poss´ a o ıveis complementos, bastando pressionar <Enter> para aceitar as sugest˜es. Neste link:“http://www. o vim.org/scripts/script.php?script_id=1879”, vocˆ pode fazer o download e do plugin.

15.16

O plugin Ctags

Ctags em si ´ um programa externo que indexa arquivos de c´digo fonte. Ele e o lˆ o c´digo fonte em busca de identificadores, declara¸˜es de fun¸˜o, vari´veis, e o co ca a e constr´i seu ´ o ındex de referˆncias cruzadas. Mas vamos ao plugin, mesmo por e que n˜o estamos no CtagsBook. a Primeiro precisamos ter o arquivos de tags. Para tal, usamos o comando: ctags -R <arquivos> Normalmente o parˆmetro <arquvos> pode ser uma express˜o regular do tipo a a *.[ch] e afins. Depois de obter o arquivo de tags, vocˆ j´ pode sair usando os e a atalhos do plugin para navegar pelo c´digo fonte. o Com o cursor em cima de um identificador, usando o atalho ctrl+] o cursor pula diretamente para a sua declara¸˜o. O atalho ctrl+o volta o cursor para a ca posi¸˜o inicial. ca Uma dica interessante, quando navegando por um c´digo fonte muito extenso o com v´rios diret´rios, ´ mapear o caminho dos arquivos usando o caminho aba o e soluto deles no seu diret´rio de trabalho deste jeito: o find $(pwd) -regex ".*py$" | xargs ctags Assim vocˆ pode copiar o arquivo de tags para todos os diret´rios e mesmo e o assim conseguir usar os atalhos do plugin para navegar no c´digo fonte. o Pode-se obter o programa Ctags no seguinte endere¸o: “http://ctags.sourceforge. c net/”. O plugin de Ctags para o Vim est´ no endere¸o: “http://vim.sourceforge. a c net/scripts/script.php?script_id=12”, e para instal´-lo basta copi´-lo para a a a pasta apropriada: ~/vimfiles/plugin .......... no windows ~/.vim/plugin .............. no Gnu/Linux

15.17

O Plugin Project

O plugin project acess´ atrav´s da url http://www.vim.org/scripts/script. ıvel e php?script_id=69 cria toda uma estrutura de gerenciamento de projetos, para

15.17 O Plugin Project

107

programadores ´ uma funcionalidade extremamente necess´ria, costuma-se trae a balhar com v´rios arquivos da mesma fam´ “extens˜o”, e ao clicar em um dos a ılia a arquivos do projeto o mesmo ´ aberto instantaneamente. e :Project ......... abre uma janela lateral para o projeto \C ............... inicia a cria¸~o de um projeto (recursivamente) ca \c ............... inicia a cria¸~o de um projeto na pasta local ca Ap´s digitar o atalho de cria¸˜o do projeto aparecer´ uma janela para designar o ca a um nome para o mesmo, em seguida digita-se o caminho para o diret´rio do o projeto, ap´s isto digita-se ‘.’ (ponto) como parˆmetro, cria-se um filtro como o a *.py. para criar uma entrada (acesso ao plugin) no menu do Gvim colocamos a seguinte linha no vimrc. amenu &Projetos.togle <Plug>ToggleProject<cr> 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.

Cap´ ıtulo 16

Referˆncias e
• http://www.vivaolinux.com.br/artigos/impressora.php?codigo=2914 VIM avan¸ado (parte 1)] c • 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

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->