Você está na página 1de 130

o editor de texto Vim

Um livro escrito em portugus sobre o editor de e texto Vim. A ideia que este material cresa e e c torne-se uma referncia convel e prtica. Use este e a a livro nos termos da Licena de Documentao Livre c ca GNU (GFDL). Este trabalho est em constante aprimoramento, a e fruto da colaborao de voluntrios. Participe e ca a do desenvolvimento enviando sugestes e melhorias; o acesse o site do projeto no endereo: c http://code.google.com/p/vimbook

Verso gerada em a 31 de Agosto de 2009

Autores
Srgio Luiz Ara jo Silva e u Douglas Adriano Augusto Eustquio Rangel a Eduardo Otubo Gustavo Dutra Joo Felipe Mitre a Willian Molinari . . . <voyeg3r@gmail.com> <daaugusto@gmail.com> <eustaquiorangel@gmail.com> <eduardo.otubo@gmail.com> <gustavotkg@gmail.com> <jfmitre@gmail.com> <willian.molinari@gmail.com> . . .

Conte do u
1 Introduo ca 1.1 Instalao do Vim . . . . . . . . . . . . . . . . . . . . . . . . . . ca 1.1.1 1.1.2 1.2 1.3 1.4 1.5 1.6 1.7 1.8 Instalaao no Windows . . . . . . . . . . . . . . . . . . . c Instalaao no GNU/Linux . . . . . . . . . . . . . . . . . . c 1 2 2 3 3 4 4 4 5 5 6 7 7 7 8 9 10 11 11 11 12 13 13 13 14 14

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

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

Modos de operao . . . . . . . . . . . . . . . . . . . . . . . . . . ca Entrando em modo de edio . . . . . . . . . . . . . . . . . . . . ca Erros comuns . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Editando 2.1 2.2 2.3 Abrindo o arquivo para a edio . . . . . . . . . . . . . . . . . . ca Escrevendo o texto . . . . . . . . . . . . . . . . . . . . . . . . . . Copiar, Colar e Deletar . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 2.3.2 2.3.3 2.3.4 2.4 2.5 2.6 2.7 2.8 2.9 Deletando uma parte do texto . . . . . . . . . . . . . . .

Copiando sem deletar . . . . . . . . . . . . . . . . . . . . Usando a rea de transferncia Clipboard a e . . . . . . . . .

Removendo linhas duplicadas . . . . . . . . . . . . . . . .

Forando a edio de um novo arquivo . . . . . . . . . . . . . . . c ca Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando o grep interno do Vim . . . . . . . . . . . . . . . . . . . Lista de alteraes . . . . . . . . . . . . . . . . . . . . . . . . . . co Substituindo tabulaes por espaos . . . . . . . . . . . . . . . . co c Convertendo para maisculas . . . . . . . . . . . . . . . . . . . . u

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

CONTEUDO 2.11 O arquivo alternativo . . . . . . . . . . . . . . . . . . . . . . . .

v 15 16 16 16 16 17 17 17 18 19 20 20 21 22 22 24 28 29 29 30 30 31 32 33 33 34 34 34 34 35 36 36 36 37

2.12 Lendo um arquivo para a linha atual . . . . . . . . . . . . . . . . 2.13 Incrementando nmeros em modo normal . . . . . . . . . . . . . u 2.14 Repetindo a digitao de linhas . . . . . . . . . . . . . . . . . . . ca 2.15 Movendo um trecho de forma inusitada . . . . . . . . . . . . . . 2.16 Uma calculadora diferente . . . . . . . . . . . . . . . . . . . . . . 2.17 Desfazendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.17.1 Undo tree . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.17.2 Mquina do tempo . . . . . . . . . . . . . . . . . . . . . . a 2.18 Salvando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.19 Abrindo o ultimo arquivo rapidamente . . . . . . . . . . . . . . . 2.20 Modelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.21 Edio avanada de linhas . . . . . . . . . . . . . . . . . . . . . . ca c 2.22 Comentando rapidamente um trecho . . . . . . . . . . . . . . . . 2.23 Comparando arquivos com o vimdi . . . . . . . . . . . . . . . . 3 Movendo-se no Documento 3.1 3.2 Paginando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 4 Folders 4.1 4.2 4.3 Mtodos de dobras . . . . . . . . . . . . . . . . . . . . . . . . . . e Manipulando dobras . . . . . . . . . . . . . . . . . . . . . . . . . Criando dobras usando o modo visual . . . . . . . . . . . . . . . Marcas globais . . . . . . . . . . . . . . . . . . . . . . . .

5 Registros 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 O registro sem nome . . . . . . . . . . . . . . . . . . . . . . . . Registros nomeados de 0 a 9 . . . . . . . . . . . . . . . . . . . . . Registro de pequenas deleoes - . . . . . . . . . . . . . . . . . . . c Registros nomeados de a at z ou A at Z . . . . . . . . . . . e e Registros somente leitura : . % # . . . . . . . . . . . . . . . . . Registro de expresses = . . . . . . . . . . . . . . . . . . . . . . o Registros de arrastar e mover . . . . . . . . . . . . . . . . . . . . Registro buraco negro . . . . . . . . . . . . . . . . . . . . . . . Registros de buscas / . . . . . . . . . . . . . . . . . . . . . . . .

5.10 Manipulando registros . . . . . . . . . . . . . . . . . . . . . . . .

vi

CONTEUDO 5.11 Listando os registros atuais . . . . . . . . . . . . . . . . . . . . . 5.12 Listando arquivos abertos . . . . . . . . . . . . . . . . . . . . . . 5.13 Dividindo a janela com o prximo arquivo da lista de buers . . o 5.14 Como colocar um pedao de texto em um registro? . . . . . . . . c 5.15 Como criar um registro em modo visual? . . . . . . . . . . . . . . 5.16 Como denir um registro no vimrc? . . . . . . . . . . . . . . . . 5.17 Como selecionar blocos verticais de texto? . . . . . . . . . . . . . 5.18 Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 37 38 38 38 39 39 41 41 42 42 43 45 45 46 47 47 48 48 48 49 49 49 52 54 54 54 55 56 56 57 57 57 58 58

6 Buscas e Substituies co 6.1 Usando Expresses 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 Expresses regulares . . . . . . o

Destacando padres . . . . . . . . . . . . . . . . . . . . . . . . . o Inserindo linha antes e depois . . . . . . . . . . . . . . . . . . . . Obtendo informaes do arquivo . . . . . . . . . . . . . . . . . . co Trabalhando com registradores . . . . . . . . . . . . . . . . . . . Edies complexas . . . . . . . . . . . . . . . . . . . . . . . . . . co Indentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Corrigindo a indentao de cdigos . . . . . . . . . . . . . . . . . ca o Usando o File Explorer . . . . . . . . . . . . . . . . . . . . . . . .

6.10 Selecionando ou deletando contedo de tags HTML . . . . . . . . u 6.11 Substituies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Juno de linhas com Vim . . . . . . . . . . . . . . . . . . . . . . ca 6.19 Buscando em um intervalo de linhas . . . . . . . . . . . . . . . . 7 Trabalhando com Janelas 7.1 7.2 Alternando entre Buers de arquivo . . . . . . . . . . . . . . . . Modos de diviso da janela . . . . . . . . . . . . . . . . . . . . . a 7.2.1 7.2.2 Utilizando abas tab . . . . . . . . . . . . . . . . . . . . . . Utilizando split horizontal . . . . . . . . . . . . . . . . . .

CONTEUDO 7.2.3 7.3 7.4 7.5 7.6 Utilizando split vertical . . . . . . . . . . . . . . . . . . .

vii 58 58 58 59 59 60 . . . . . . . . . . . . . . . . 61 61 62 63 63 63 64 64 64 64 64 65 66 66 67 67 67 67 68 68 69 69 69 70 70 71 71 72

Abrindo e fechando janelas . . . . . . . . . . . . . . . . . . . . . Salvando e saindo . . . . . . . . . . . . . . . . . . . . . . . . . . . Manipulando janelas . . . . . . . . . . . . . . . . . . . . . . . . . File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8 Repetio de Comandos ca 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 Repetindo a digitao de uma linha ca Guardando trechos em registros . . . . . . . . . . . . . . . . . . Gravando comandos . . . . . . . . . . . . . . . . . . . . . . . . . Repetindo substituies . . . . . . . . . . . . . . . . . . . . . . . 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 insero 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 . . . . . . . Beautiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Editando comandos longos no Linux . . . . . . . . . . . . . . . . Compilando e vericando erros . . . . . . . . . . . . . . . . . . . Grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Indent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Calculadora Cient ca com o Vim . . . . . . . . . . . . . . . . . .

9.10 Editando sa das do Shell . . . . . . . . . . . . . . . . . . . . . . . 9.11 Log do Subversion . . . . . . . . . . . . . . . . . . . . . . . . . . 9.12 Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 10 Vericao Ortogrca ca a 10.1 Habilitando a vericao ortogrca . . . . . . . . . . . . . . . . ca a 10.1.1 Habilitao automtica na inicializao . . . . . . . . . . ca a ca

viii

CONTEUDO 72 73 74 74 74 76 76 77 77 77 79 79 80 80 80 82 82 83 83 84 85 85 85 86 86 87

10.2 O dicionrio de termos . . . . . . . . . . . . . . . . . . . . . . . . a 10.2.1 Dicionrio portugus segundo o acordo ortogrco . . . . a e a 10.3 Comandos relativos ` vericao ortogrca . . . . . . . . . . . . a ca a 10.3.1 Encontrando palavras desconhecidas . . . . . . . . . . . . 10.3.2 Tratamento de palavras desconhecidas . . . . . . . . . . . 11 Salvando Sesses de Trabalho o 11.1 O que uma sesso armazena? . . . . . . . . . . . . . . . . . . . . a 11.2 Criando sesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 11.3 Restaurando sesses . . . . . . . . . . . . . . . . . . . . . . . . . o 11.4 Viminfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Como Editar Preferncias no Vim e 12.1 Onde colocar plugins e temas de cor . . . . . . . . . . . . . . . . 12.2 Comentrios a . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12.3 Efetivao das alteraes no vimrc . . . . . . . . . . . . . . . . . ca co 12.4 Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5 Ajustando pargrafos em modo normal . . . . . . . . . . . . . . . a 12.6 Exibindo caracteres invis veis . . . . . . . . . . . . . . . . . . . . 12.7 Denindo registros previamente . . . . . . . . . . . . . . . . . . . 12.8 Mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.1 Recarregando o arquivo de congurao . . . . . . . . . . ca 12.8.2 Limpando o registro de buscas . . . . . . . . . . . . . . 12.8.3 Destacar palavra sob o cursor . . . . . . . . . . . . . . .

12.8.4 Contar ocorrncias de uma palavra . . . . . . . . . . . . . e 12.8.5 Remover linhas em branco duplicadas . . . . . . . . . . . 12.8.6 Mapeamento para Calcular Expresses . . . . . . . . . . . o 12.8.7 Mapeamentos globais . . . . . . . . . . . . . . . . . . . .

12.8.8 Convertendo as iniciais de um documento para maisculas 87 u 12.9 Autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.9.1 Exemplos prticos de autocomandos . . . . . . . . . . . . a 12.10Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 12.10.1 Fechamento automtico de parnteses . . . . . . . . . . . a e 12.10.2 Funo para barra de status . . . . . . . . . . . . . . . . . ca 12.10.3 Rolar outra janela . . . . . . . . . . . . . . . . . . . . . . 12.10.4 Funo para numerar linhas . . . . . . . . . . . . . . . . . ca 87 88 89 89 90 90 90

CONTEUDO 12.10.5 Funo para trocar o esquema de cores . . . . . . . . . . . ca 12.10.6 Uma funo para inserir cabealho de script . . . . . . . . ca c 12.10.7 Funo para inserir cabealhos Python . . . . . . . . . . . ca c 12.10.8 Funo para pular para uma linha . . . . . . . . . . . . . ca 12.10.9 Funo para gerar backup . . . . . . . . . . . . . . . . . . ca 12.11Como adicionar o Python ao path do Vim? . . . . . . . . . . . . 12.12Criando um menu . . . . . . . . . . . . . . . . . . . . . . . . . . 12.13Criando menus para um modo espec co . . . . . . . . . . . . . . 12.14Exemplo de menu . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.15Outros mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . 12.16Complementao com tab . . . . . . . . . . . . . . . . . . . . . ca 12.17Abreviaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 12.18Evitando arquivos de backup no disco . . . . . . . . . . . . . . . 12.19Mantendo apenas um Gvim aberto . . . . . . . . . . . . . . . . . 12.20Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 13 Um Wiki para o Vim 13.1 Como usar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

ix 91 91 91 92 93 93 93 94 94 95 96 96 96 97 98 99 99

13.2 Salvamento automtico para o Wiki . . . . . . . . . . . . . . . . 100 a 13.3 Problemas com codicao de caracteres . . . . . . . . . . . . . . 100 ca 14 Hbitos para Edio Efetiva a ca 101

14.1 Mova-se rapidamente no texto . . . . . . . . . . . . . . . . . . . . 101 14.2 Use marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 14.3 Use quanticadores . . . . . . . . . . . . . . . . . . . . . . . . . . 102 14.4 Edite vrios arquivos de uma s vez . . . . . . . . . . . . . . . . 103 a o 14.5 No digite duas vezes a . . . . . . . . . . . . . . . . . . . . . . . . 103 14.6 Use dobras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.7 Use autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.8 Use o File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.9 Torne as boas prticas um hbito a a . . . . . . . . . . . . . . . . . 105 14.10Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 e 15 Plugins 106

15.1 Como testar um plugin sem instal-lo? . . . . . . . . . . . . . . . 106 a 15.2 Atualizando a documentaao dos plugins . . . . . . . . . . . . . . 107 c
A 15.3 Plugin para L TEX . . . . . . . . . . . . . . . . . . . . . . . . . . 107

CONTEUDO
A 15.4 Criando folders para arquivos L TEX . . . . . . . . . . . . . . . . 107

15.5 Criando sees L TEX . . . . . . . . . . . . . . . . . . . . . . . . . 108 co A 15.6 Plugin para manipular arquivos . . . . . . . . . . . . . . . . . . . 108 15.7 Complementaao de cdigos . . . . . . . . . . . . . . . . . . . . . 108 c o 15.7.1 Instalaao . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 c 15.8 Um wiki para o Vim . . . . . . . . . . . . . . . . . . . . . . . . . 109 15.9 Acessando documentao do Python no Vim . . . . . . . . . . . 109 ca 15.10Formatando textos planos com syntax . . . . . . . . . . . . . . . 109 15.11Movimentando em camel case . . . . . . . . . . . . . . . . . . . . 109 15.12Plugin FuzzyFinder . . . . . . . . . . . . . . . . . . . . . . . . . . 109 15.13O plugin EasyGrep . . . . . . . . . . . . . . . . . . . . . . . . . . 110 15.14O plugin SearchComplete . . . . . . . . . . . . . . . . . . . . . . 110 15.15O plugin AutoComplete . . . . . . . . . . . . . . . . . . . . . . . 111 15.16O plugin Ctags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 15.17O Plugin Project . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 15.18O plugin pydiction . . . . . . . . . . . . . . . . . . . . . . . . . . 112 15.19O plugin FindMate . . . . . . . . . . . . . . . . . . . . . . . . . . 113 15.20Atualizando a documentao dos plugins . . . . . . . . . . . . . . 113 ca 16 Referncias e Colaboradores 114 118

Cap tulo 1

Introduo ca
A edio de texto uma das tarefas mais frequentemente executadas por seres ca e humanos em ambientes computacionais, em qualquer n vel. Usurios nais, a administradores de sistemas, programadores de software, desenvolvedores web, e tantas outras categorias, todos eles, constantemente, necessitam editar textos. Usurios nais editam texto para criar documentos, enviar e-mails, atualizar a o blog, escrever recados ou simplesmente trocar mensagens instantneas pela a internet. Administradores de sistemas editam arquivos de congurao, criam ca regras de segurana, editam scripts e manipulam sa c das de comandos armazenados em arquivos de texto. Programadores desenvolvem cdigos-fonte e a o documentao de programas essencialmente em editores de texto. Desenvolveca dores web interagem com editores de texto para criarem layout e dinmica de a sites. Tamanha a frequncia e onipresena da tarefa de edio de texto que a ecie e c ca ncia, exibilidade e o repertrio de ferramentas de editores de texto tornam-se e o quesitos cr ticos para se atingir produtividade e conforto na edio de textos. ca Qualquer tarefa de aprendizado requer um certo esforo. Todo programa introc duz novos conceitos, opes e conguraes que transformam o modus operanti co co do usurio. Em princ a pio, quanto maior o esforo, maior o benef c cio. Quem quer apenas escrever textos, pode-se contentar com um editor bsico, cuja as unicas a opes so digitar o texto, abrir e salvar o documento ou pode utilizar um editor co a que permita pr-congurar aes, formatar o contedo, revisar a ortograa, etc, e co u alm da ao bsica que escrever textos. e ca a e Qualquer usurio de computador pode abrir o primeiro tipo de editor e imediataa mente comear a escrever, a curto prazo, sua ao ter consequncias imediatas c ca a e e no requer conhecimentos adicionais. Por outro lado, esse usurio ter que a a a fazer esforo para digitar o mesmos cabealho todos os dias. c c O outro tipo de editor permite que o usurio pr-congure o cabealho do doa e c cumento e todos os dias esse trecho j estar digitado. Em contrapartida, o a a usurio deve aprender como pr-congurar o editor. O que requer esforo para a e c aprender a utilizar o programa escolhido. O benef somente ser observado cio a a mdio/longo prazo, quando o tempo ganho ao utilizar a congurao ser e ca a superior ao tempo consumido aprendendo sobre o programa.

Introduo ca

O Vim1 um editor de texto extremamente congurvel, criado para permitir e a a edio de forma eciente, tornando-a produtiva e confortvel. Tambm uma ca a e e aprimorao do editor Vi, um tradicional programa dos sistemas Unix. Possui ca uma srie de mudanas em relao a este ultimo. O prprio slogan do Vim e c ca o e Vi IMproved, ou seja, Vi Melhorado. O Vim to conhecido e respeitado entre e a programadores, e to util para programao, que muitos o consideram uma vera ca dadeira IDE (Integrated Development Environment, em portugus, Ambiente e Integrado de Desenvolvimento). Ele capaz de reconhecer mais de 500 sintaxes de linguagens de programao e ca e marcao, possui mapeamento para teclas, macros, abreviaes, busca por ca co Expresses Regulares2 , entre outras facilidades. o A gura 1.1 mostra o vim sendo usando para editar o arquivo o desse livro sobre vim.

A Figura 1.1: Usando o vim para editar o cdigo em L TEX o

O Vim conta com uma comunidade bastante atuante e , ao lado do Emacs3 , e um dos editores mais usados nos sistemas GNU/Linux4 , embora esteja tambm e dispon em outros sistemas, como o Windows e o Macintosh. vel

1.1

Instalao do Vim ca
:h install

1.1.1

Instalao no Windows ca

H uma verso grca do Vim dispon a a a vel para vrios sistemas operacionais, a incluindo o Windows; esta verso pode ser encontrada no site ocial [1]. Para a
1 Vim

- http://www.vim.org Regulares - http://guia-er.sourceforge.net/guia-er.html 3 Emacs - http://www.gnu.org/software/emacs/ 4 O kernel Linux sem os programas GNU no serviria para muita coisa. a
2 Expresses o

1.2 Dicas iniciais

instal-lo basta baixar o instalador no link indicado e dispar-lo com um duplo a a clique (este procedimento requer privilgios de administrador). e

1.1.2

Instalao no GNU/Linux ca

A maioria das distribuies GNU/Linux traz o Vim em seus repositrios, sendo co o que bastante comum o Vim j vir inclu na instalao t e a do ca pica da distribuio. ca A forma de instalao prefer depende do Vim: ca vel J vir instalado por default neste caso nada precisa ser feito. a Estar dispon no repositrio, mas no instalado em distribuies devel o a co rivadas da Debian GNU/Linux5 , a instalao do Vim atravs dos reposica e trios usualmente executada digitando-se apt-get install vim6 em o e um terminal (este procedimento requer privilgios de administrador e, tie picamente, conexo com a internet). a Algumas distribuies GNU/Linux dividem o programa vim em vrios paco a cotes. Pacotes adicionais como gvim, vim-enhanced, vim-phython7 , entre outros, representam diferentes verses do mesmo aplicativo. O gvim a o e verso grca do Vim e o vim-enhanced uma verso do vim compilada a a e a com um suporte interno ao Python8 . A alternativa para resolver esse problema buscar na documentao da distribuio o que signica cada e ca ca pacote. No estar dispon a vel no repositrio da distribuio cenrio muito imo ca a provvel, mas nas sua ocorrncia o Vim pode ser instalado atravs da a e e compilao do cdigo-fonte; basta seguir as instrues do site ocial [1]. ca o co

1.2

Dicas iniciais

Ao longo do livro alguns comandos ou dicas podem estar duplicados, o que util e devido ao contexto e tambm porque o aprendizado por saturao 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 sugestes sero bem vindas! a o a Para abrir um arquivo com Vim digite num terminal: vim texto.txt onde texto.txt o nome do arquivo que deseja-se criar ou editar. e Em algumas distribuies, pode-se usar o comando vi ao invs de vim. co e
5 Debian 6 Recomenda-se

GNU/Linux - http://www.debian.org/index.pt.html tambm instalar a documentao em HTML do Vim: apt-get install e ca

vim-doc 7 Para ubuntu e Debian 8 O Python (http://www.python.org) uma linguagem de programao orientada a objetos e ca muito comum no meio prossional e acadmico e

Introduo ca

1.3

Ajuda integrada

O Vim possui uma ajuda integrada muito completa, so mais de 100 arquivos a somando milhares de linhas. O unico inconveniente no haver ainda traduo e a ca para o portugus, sendo o ingls seu idioma ocial; entretanto, as explicaes e e co costumam ser sintticas e diretas, de forma que noes em ingls seriam sucie co e entes para a compreenso de grande parte do contedo da ajuda integrada. a u Obs: No Vim quase todos os comandos podem ser abreviados, no caso help pode ser chamado porhe assim por diante. Um comando s pode ser abreviado o at o ponto em que este nome mais curto no 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 grco o clique com o mouse a tambm funciona, e para voltar use ctrl+o ou ctrl+t Para as situaes de e co desespero pode-se digitar: :help!

Quando um comando puder ser abreviado poder aparecer desta forma: a :so[urce]. Deste modo se est indicando que o comando :source pode ser a usado de forma abreviada, no caso :so.

1.4

Em caso de erros

Recarregue o arquivo que est sendo editado pressionando Esc e em seguida a usando o comando :e. ou simplesmente inicie outro arquivo ignorando o atual, com o comando :enew!, ou saia do arquivo sem modica-lo, com :q!. Pode-se ainda tentar gravar forado com o comando :wq! c

1.5

Como interpretar atalhos e comandos

A tecla <Ctrl> representada na maioria dos manuais e na ajuda pelo carace tere ^ circunexo, ou seja, o atalho Ctrl-L aparecer assim: a ^L No arquivo de congurao do Vim, um <Enter> pode aparecer como: ca <cr> Para saber mais sobre como usar atalhos no Vim veja a seo 12.8 na pgina 83 ca a e para ler sobre o arquivo de congurao veja o cap ca tulo 12 na pgina 79. a

1.6 Modos de operao ca

1.6

Modos de operao ca

A tabela abaixo mostra uma referncia rpida para os modos de operao do e a ca Vim, a seguir mais detalhes sobre cada um dos modos. Modo Normal Insero ca Visual Comando Descrio ca Para deletar, copiar, formatar, etc Prioritariamente, digitao de texto ca Seleo de blocos verticais e linhas inteiras ca Uma verdadeira linguagem de programao ca Atalho <Esc> i,a,I,A,o,O V, v, Ctrl-v <Esc>:

Em oposio ` esmagadora maioria dos editores o Vim um editor que traca a e balha com modos de operao (modo de insero, modo normal, modo visual ca ca e etc), o que a princ pio diculta a vida do iniciante, mas abre um universo de possibilidades, pois ao trabalhar com modos distintos uma tecla de atalho pode ter vrios signicados, exemplicando: Em modo normal pressionar dd a apaga a linha atual, j em modo de insero ele ir se comportar como se voc a ca a e estivesse usando qualquer outro editor, ou seja, ir inserir duas vezes a letra d. a Em modo normal pressionar a tecla v inicia uma seleo visual (use as setas ca de direo). Para sair do novo visual <Esc>. Como um dos princ ca pios do vim agilidade pode-se usar ao invs de setas (em modo normal) as letras h,l,k,j e e como se fossem setas: k h j Imagine as letras acima como teclas de direo, 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 edio ca

Estando no modo normal, digita-se: a i A I o O .... .... .... .... .... .... 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 aps o caractere atual o antes do caractere atual no final da linha no comeo da linha c na linha abaixo na linha acima

Outra possibilidade utilizar a tecla <Insert> para entrar no modo de insero e ca de texto antes do caractere atual, ou seja, o mesmo que a tecla i. Uma vez no modo de insero, a tecla <Insert> permite alternar o modo de digitao de ca ca insero de simples de caracteres para substituio de caracteres. ca ca Agora comeamos a sentir o gostinho de usar o Vim, uma tecla seja maiscula c u ou minscula, faz muita diferena se voc no estiver em modo de insero, e u c e a ca para sair do modo de insero e voltar ao modo normal sempre use <Esc>. ca

Introduo ca

1.8

Erros comuns

Estando em modo de inserao pressionar j na inteno de rolar o docuc 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 juno das linhas, e ca alis um timo recurso quando a inteno de fato esta. a o ca e Em modo normal tentar digitar um nmero seguido de uma palavra e ao u perceber que nada est sendo digitado, iniciar o modo de insero, digia ca tando por m o que se queria, o resultado que o nmero que foi digitado e u inicialmente vira um quanticador para o que se digitou ao entrar no modo de insero. A palavra aparecer repetida na quantidade do nmero dica a u gitado. Assim, se voc quiser digitar 10 vezes isto um teste faa 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

 Alguns atalhos uteis. . .


Ctrl-O ..... i Ctrl-a ... @: ......... Shift-insert gi ......... gv ......... comando do modo normal no modo insert repetir a ltima inser~o u ca repetir 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

Para saber mais sobre repetio de comandos veja o cap ca tulo 8, na pgina 60. a No Vim, cada arquivo aberto chamado de buffer, ou seja, dados carregados e na memria. Voc pode acessar o mesmo buer em mais de uma janela, bem o e como dividir a janela em vrios buers distintos o que veremos mais adiante. a

Cap tulo 2

Editando
A principal funo de um editor de textos editar textos. Parece bvio, mas ca e o em meio a inmeros recursos extras essa simples e crucial funo perde-se entre u ca todos os demais.

2.1

Abrindo o arquivo para a edio ca

Portanto, a primeira coisa a fazer abrir um arquivo. Como visto, para abrir e um arquivo com Vim, digite em um terminal: vim texto.txt onde texto.txt o nome do arquivo que deseja-se criar ou editar. e Caso deseje abrir o arquivo na linha 10, usa-se: vim +10 /caminho/para/o/arquivo se quiser abrir o arquivo na linha que contm um determinado padro , digite: e a vim +/padr~o arquivo a

 Caso o padro tenha espaos no nome coloque entre aspas ou use escape \ a c
a m de no obter erro. a

 Se o vim for aberto sem indicao de arquivo pode-se indicar o arquivo a ser ca
editado em modo de comando desta forma: :e /home/usuario/arquivo

2.2

Escrevendo o texto

O Vim um editor que possu diferentes modos de edio. Entre eles est o e ca a modo de insero, que o modo onde escreve-se o texto naturalmente. ca e

Editando

Para se entrar em modo de insero, estando em modo normal, pode-se pressica onar qualquer uma 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 comeo da linha c aps o caractere atual o no final da linha uma linha abaixo uma linha cima

Uma vez no modo de insero todas as teclas so exatamente como nos outros ca a editores simples, caracteres que constituem o contedo do texto sendo digitado. u O que inclui as teclas de edio de caracteres. ca Para salvar o contedo escrito, digite a tecla <Esc> para sair do modo de insero u ca e digite o comando :w para gravar o contedo. Caso queira sair do editor, digite u o comando: :q caso tenha ocorrido modicaes no arquivo desde que ele foi co salvo pela ultima vez haver uma mensagem informando que o documento foi a modicado e no foi salvo, nesse caso, digite o comando :q! para fechar o Vim a sem salvar as ultimas modicaes feitas. Caso queira salvar e sair do arquivo, co digite o comando :wq Nesse ponto, conhece-se o vim de forma suciente para editar qualquer coisa nele. Daqui por diante o que existe so as formas de realizar a edio do arquivo a ca com maior naturalidade e produtividade. O usurio iniciante do Vim pode cometer o erro de tentar decorar todos os a comandos que sero apresentados. No faa isso. Tentar decorar comando a a c e exatamente o caminho contrrio da naturalidade exigida por um editor texto a para aumentar a produtividade. Ao contrrio, sugere-se que leia-se todo o contedo. Identique quais so as a u a atividades de maior recorrncia no estilo individual de escrita e busque como e realizar tais funes com mais uncia nesse editor. A prtica levar ao uso de co e a a uente desse comandos principais, abrindo espao para os demais comandos. c Isso no impede que o usurio experimente cada comando conforme for lendo. a a De fato, essa prtica pode ajudar a selecionar as formas de edio que lhe so a ca a mais simpticas ao uso. a

2.3

Copiar, Colar e Deletar


:h delete, d

No modo normal, o ato de deletar ou eliminar o texto est associado ` letra a a d. No modo de inserao as teclas usuais tambm funcionam. c e dd .... D ..... d$ .... d^ .... deleta deleta deleta deleta linha atual restante da linha do ponto atual at o final da linha e do cursor ao primeiro caractere n~o-nulo da a

2.3 Copiar, Colar e Deletar linha d0 .... deleta do cursor ao incio da linha

 Pode-se combinar o comando de deleo d com o comando de movimento ca


(considere o modo normal) para apagar at a prxima 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 comeo da palavra ao cursor c

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 deletado deletado deletado deletado abaixo acima antes do cursor aps o cursor o

2.3.1

Deletando uma parte do texto


:h deleting

O comando d remove o contedo para a memria. u o x .... xp ... ddp .. d5x .. dd .. 5dd .. d5G .. dw .. 5dw .. dl .. 5dl .. d0 .. d^ .. d$ .. dgg .. dG .. D .... d% ... da" .. apaga o caractere sob o cursor troca letras de lugar troca linhas de lugar apaga os prximos 5 caracteres o apaga a linha atual apaga 5 linhas (tambm pode ser: d5d) e apaga at a linha 5 e apaga uma palavra apaga 5 palavras (tambm pode ser: d5w) e apaga uma letra (sin^nimo: x) o apaga 5 letras (tambm pode ser: d5l ou 5x) e apaga at o incio da linha e apaga at o primeiro caractere da linha e apaga at o final da linha (sin^nimo: D) e o apaga at o incio do arquivo e apaga at o final do arquivo e apaga o resto da linha deleta at o prximo (,[,{ e o deleta aspas com contedo u

Depois do texto ter sido colocado na memria, digite p para inserir o texto o em uma outra posio. Outros comandos: ca

10

Editando diw .. apaga palavra mesmo que n~o esteja posicionado no a incio dip .. apaga o pargrafo atual a d4b .. apaga as quatro palavras anteriores dfx .. apaga at o prximo x e o d/casa/+1 - deleta at a linha aps a palavra casa e o

Trocando a letra d nos comandos acima por c de change mudana ao invs c e de deletar ser feita uma mudana de contedo. Por exemplo: a c u
:h change

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

modifica modifica modifica modifica

uma palavra um pargrafo a uma sentena c at o final da linha e

2.3.2

Copiando sem deletar


:h yank

O comando y (yank) permite copiar uma parte do texto para a memria sem o deletar. Existe uma semelhana muito grande entre os comandos y e os comanc dos d, um ativa a cpia e outro a excluso de contedo, suportando ambos o a u quanticadores: yy .... 5yy .... y/pat .. yw .... 5yw .... yl .... 5yl .... y^ .... copia a linha atual (sin^nimo: Y) o copia 5 linhas (tambm pode ser: y5y ou 5Y) e copia at pat e copia uma palavra copia 5 palavras (tambm pode ser: y5w) e copia uma letra copia 5 letras (tambm pode ser: y5l) e copia da posi~o atual at o incio da linha ca e (sin^nimo: y0) o y$ .... copia da posi~o atual at o final da linha ca e ygg .... copia da posi~o atual at o incio do arquivo ca e yG .... copia da posi~o atual at o final do arquivo ca e

Digite P (p maisculo) para colar o texto recm copiado na posio onde u e ca encontra-se o cursor, ou p para colar o texto na posio imediatamente aps o ca o cursor. yi" .... copia trecho entre aspas (atual - inner) vip .... sele~o visual para pargrafo atual ca a inner paragraph yip .... copia o pargrafo atual a yit .... copia a tag agual inner tag til para arquivos u HTML, XML, etc.

2.4 Forando a edio de um novo arquivo c ca

11

2.3.3

Usando a rea de transferncia 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 transferncia usando os coa e mandos acima citados podemos usar outra alternativa. Os comandos abaixo preservam a indentao1 . 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.

2.3.4

Removendo linhas duplicadas

:sort u

2.4

Forando a edio de um novo arquivo c ca


:h edit!

O Vim, como qualquer outro editor, muito exigente no que se refere a alteraes e co de arquivo. Ao tentar abandonar um arquivo editado e no salvo, o Vim ir se a a certicar da ao. Para abrir um novo arquivo sem salvar o antigo: ca :enew! O comando acima uma abreviao de edit new. De modo similar pode-se e ca ignorar todas as alteraes feitas desde a abertura do arquivo: co :e!
1 Espaamento c

entre o comeo da linha e o in c cio do texto

12

Editando

2.5

Ordenando
:h sort

O Vim, verso 7 ou superior, passa a ter um comando de ordenao que tambm a ca e permite a retirada de linhas duplicadas, tal como foi apresentado. :sort u ... ordena e retira linhas duplicadas :sort n ... ordena numericamente Obs: a ordenao numrica diferente da ordenao alfabtica 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 trs primeiras linhas a e 10 11 12 Portanto lembre-se que se a ordenao envolver nmeros use: ca u :sort n Voc pode fazer a ordenao em um intervalo assim: e ca :1,15 sort n 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

2.6 Usando o grep interno do Vim

13

2.6

Usando o grep interno do Vim


:h vimgrep, lvimgrep

Para editar todos os arquivos que contenham a palavra inusitada: :vimgrep /\cinusitada/ * a opo \c torna a busca indiferente a letras maisculas e minsculas. ca u u Obs: o Vim busca ` partir do diretrio atual, para se descobrir o diretrio atual a o o ou mud-lo: a :pwd ........... exibe o diretrio atual o :cd /diretrio o muda de diretrio o

2.7

Lista de alteraoes c
:h changelist, changes

O Vim mantm uma lista de alteraes, veremos agora como usar este recurso. e co g, ................. avana na lista de altera~es c co g; ................. recua na lista de altera~es co :changes ........... visualiza a lista de altera~es co

2.8

Substituindo tabulaes por espaos co c


:h expandtab, retab

Se houver necessidade2 de trocar tabulaes por espaos fazemos assim: co c :set expandtab :retab Para fazer o contrrio usamos algo como: a :%s/\s\{4,}/<pressiona-se ctrl-i>/g onde <Ctrl-i>...... insere uma tabula~o ca Explicando:
2 Em

cdigos Python por exemplo no se pode misturar espaos e tabulaes o a c co

14 : ............ % ............ s ............ / ............ \s ........... \{4,} ........ / ............ <Ctrl-i> ..... / ............ g ............ comando em todo arquivo substitua padr~o de busca a localiza espao c quatro vezes inicio da substitui~o ca pressione Ctrl-i para inserir <Tab> fim da substitui~o ca global

Editando

2.9

Convertendo para mai sculas u


:h case

gUU ....... guu ....... gUiw ...... ~ .........

converte converte converte altera o

a linha para maisculo u a linha para minsculo u a palavra atual para maisculo u case do caractere atual

2.10

Editando em modo de comando


:h put, move, global, holy-grail

Para mover um trecho usando o modo de comandos faa: c :10,20m $ O comando acima move m da linha 10 at a linha 20 para o nal $. e :g /palavra/ m 0 Move as linhas contendo palavra para o comeo (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 padro. a Podemos inverter a lgica do comando global g: o

2.11 O arquivo alternativo :g!/padr~o/d a

15

No delete as linhas contendo padro, ou seja, delete tudo menos as linhas a a contendo a palavra padro. a :v/padr~o/d ........ apaga linhas que n~o contenham "padr~o" a a a :v/\S/d ............ apaga linhas vazias \S ................. significa "string" A opo acima equivale a :g!/padr~o/d. Para ler mais sobre o comando ca a global utilizado nesta seo veja o cap ca tulo 6.13. :7,10copy $ Da linha 7 at a linha 10 copie para o nal.  Veja mais sobre edio no modo e ca de comando na seo 6 Buscas e substituies na pgina 42. ca co a Gerando sequncias e Para inserir uma sequncia de 1 a 10 ` partir da linha inicial zero fazemos: e a :0put =range(1,10) Caso queira inserir sequncias 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

2.11

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

E muito comum um usurio concluir a edio em um arquivo no Vim e inoa ca centemente imaginar que no vai mais modicar qualquer coisa nele, ento este a a usurio abre um novo arquivo: a :e novo-arquivo.txt Mas de repente o usurio lembra que seria necessrio adicionar uma linha no a a arquivo recm editado, neste caso usa-se o atalho e

16 Ctrl-6

Editando

cuja funo 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

 Mais informaes sobre janelas leia a seo 7 na pgina 57. co ca a 2.12 Lendo um arquivo para a linha atual
:h :r[ead]

Se desejamos inserir na linha atual um arquivo qualquer fazemos: :r /caminho/para/arquivo.txt .. insere o arquivo na linha atual :0r arquivo ................... insere o arquivo na primeira linha

2.13

Incrementando n meros em modo normal u


:h Ctrl-a, Ctrl-x

Posicione o cursor sobre um nmero e pressione u Ctrl-a ..... incrementa o nmero u Ctrl-x ..... decrementa o nmero u

2.14

Repetindo a digitao 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 .........

 Para saber mais sobre repetio de comandos veja o cap 8, na pgina ca tulo a
60.

2.15

Movendo um trecho de forma inusitada


move move move move move da linha 20 at 30 para o comeo e c da linha 20 at pat para a linha 5 e a linha atual 5 posi~es acima co a linha atual para o comeo c para o final do documento

:20,30m 0 ..... :20,/pat/m 5 .. :m-5 .......... :m0 ........... :m$ ...........

2.16 Uma calculadora diferente

17

2.16

Uma calculadora diferente

Sempre que for necessrio digitar o resultado de uma expresso matemtica a a a (portanto no modo de insero) pode-se usar o atalho Ctrl-r =, ele ativa o ca registro de expresses, na linha de comando do Vim aparece um sinal de igual, o digita-se ento uma expresso matemtica qualquer tipo 35*6 e em seguida a a a pressiona-se Enter, o Vim coloca ento o resultado da expresso no lugar a a desejado. Portanto no precisa-se recorrer a nenhuma calculadora para fazer a clculos. Pode-se fazer uso do Registro de Expresses dentro de macros, ou a o seja, ao gravar aes pode-se fazer uso deste recurso, aumentando assim sua co complexidade e poder! Para ler sobre macros acesse a seo 8.3 na 62. Para ca saber mais sobre o registro de expresses leia a seo 5.6 na pgina 35. o ca a

 Na seo 9.9 Calculadora Cient com o vim pgina 69 h uma descrio ca ca a a ca


sobre como fazer clculos com maior preciso e complexidade. a a

 Se a inteno for apenas exibir um calculo na barra de comandos poss ca e vel


fazer algo assim: :echo 5.2 * 3

2.17

Desfazendo
:h undo

Se voc cometer um erro, no se preocupe! Use o comando u: e a u ............ desfazer U ............ desfaz mudanas na ltima linha editada c u Ctrl-r ...... refazer

2.17.1

Undo tree

Um novo recurso muito interessante foi adicionado ao Vim a partir da verso 7 a a chamada rvore do desfazer. Se voc desfaz alguma coisa, fez uma alterao e a e ca um novo branch ou galho, derivao de alterao criado. Basicamente, os ca ca e branches nos permitem acessar quaisquer alteraes ocorridas no arquivo. co Um exemplo didtico a Siga estes passos (para cada passo <Esc>, ou seja, saia do modo de insero) ca Passo 1 - digite na linha 1 o seguinte texto # controle de fluxo <Esc> Passo 2 - digite na linha 2 o seguinte texto

18 # um lao 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 ternrio <Esc> a Passo 6 - na linha 3 digite var = (1 if teste == 0 else 2) <Esc>

Editando

Obs: A necessidade do Esc para demarcar as aes, pois o Vim considera e co cada insero uma ao. Agora usando o atalho de desfazer tradicional u e de ca ca refazer Ctrl-r observe que no mais poss acessar todas as alteraes efetua e vel co adas. Em resumo, se voc zer uma nova alterao aps um desfazer (alterao e ca o ca derivada) o comando refazer no mais vai ser poss para aquele momento. a vel Agora volte at a alterao 1 e use seguidas vezes: e ca g+ e/ou gDessa forma voc acessar todas as alteraes ocorridas no texto. e a co

2.17.2

Mquina do tempo a

O Vim possui muitas formas para desfazer e refazer, e uma das mais interessantes a mquina do tempo! A mquina do tempo extremamente util quando no e a a e meio de um texto se percebe que boa parte do que foi adicionado intil e e u que nos ultimos 10 minutos no h nada que se possa aproveitar. Utilizando a a a mquina do tempo poss eliminar os ultimos 10 minutos de texto intil do a e vel u seu documento facilmente, utilizando: :earlier 10m Com esse comando o documento car exatamente como ele estava 10 minutos a atrs! Caso aps a excluso perceba-se que foi exclu um minuto a mais, a o a do e poss utilizar o mesmo padro novamente para avanar no tempo: vel a c

2.18 Salvando :later 60s

19

Note que dessa vez foi utilizado later ao invs de earlier, e passando segundos e como argumento para viajar no tempo. Portanto o comando acima avana 60 c segundos no tempo. Para uma melhor viso de quanto se deve voltar, pode ser usado o comando: a :undolist O comando acima mostra a lista com as informaes sobre Desfazer e Refazer. co E com essas informaes pode-se voltar no tempo seguindo cada modicao: co ca :undo 3 Esse comando far o documento regredir 3 modicaes. a co

2.18

Salvando
:h writing

A maneira mais simples de salvar um arquivo, usar o comando: e :w Para especicar um novo nome para o arquivo, simplesmente digite: :w! >> file O contedo ser gravado no arquivo file e voc continuar no arquivo original. u a e a Tambm existe o comando e :sav[eas] nome salva o arquivo com um novo nome e muda para esse novo arquivo (o arquivo original no apagado). Para sair do editor, salvando o arquivo atual, digite :x a e (ou :wq). :w ............................ :wq .......................... :w nome ....................... :saveas nome .................. :sav nome ..................... :x ............................ salva salva e sai salvar como salvar como mesmo que "saveas nome" salva se existirem modifica~es co :10,20 w! ~/Desktop/teste.txt . salva um trecho para outro arquivo :w! ........................... salvamento forado c :e! ........................... reinicia a edi~o ignorando ca altera~es co

20

Editando

2.19

Abrindo o ultimo arquivo rapidamente

O Vim guarda um registro para cada arquivo editado veja mais no cap tulo 5 na pgina 33. a 0 ........ abre o ltimo arquivo editado u 1 ........ abre o penltimo 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 estvamos a editando da ultima vez: gi

 Pode-se criar um alias3 para que ao abrir o vim o mesmo abra o ultimo ar
quivo editado: alias lvim="vim -c \"normal 0\"". No cap tulo 6 pgina a 42 voc encontra mais dicas de edio. e ca

2.20

Modelines
:h modeline

So um modo de guardar preferncias no prprio arquivo, suas preferncias 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 espao entre a palavra vim e a primeira coluna, e c ou seja, a palavra vim deve vir precedida de um espao, da em diante cada c opo ca assim: ca :op~o: ca Por exemplo: posso salvar um arquivo com extenso .sh e dentro do mesmo a indicar no modeline algo como: # vim:ft=txt:nu: Apesar de usar a extenso sh o Vim reconhecer este arquivo como txt, e a a caso eu no tenha habilitado a numerao, ainda assim o Vim usar por causa a ca a da opo 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 comentrios! e a
3 Abreviao ca

para um comando do GNU/Linux

2.21 Edio avanada de linhas ca c

21

2.21

Edio avanada 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 m (linha 10). e e Isto pode ser feito assim: :5,$ normal 0wd3w Explicando o comando acima: :5,$ .... normal .. 0 ....... w ....... d3w ..... indica o intervalo que da linha 5 at o fim $ e e executa em modo normal move o cursor para o comeo da linha c pula uma palavra apaga 3 palavras w

Obs: E claro que um comando de substituio simples ca :5,$s/ um texto//g e Resolveria neste caso, mas a vantagem do mtodo anterior que vlido para e e e a trs palavras, sejam quais forem. Tambm poss e e e vel empregar comandos de insero como i ou a e retornar ao modo normal, bastando para isso usar o ca recurso Ctrl-v Esc, de forma a simular o acionamento da tecla Esc (sa do da modo de insero). Por exemplo, suponha agora que deseja-se mudar a frase ca este um texto novo para este no um texto velho; pode ser feito assim: e a e :5,$ normal 02win~o ^[$ciwvelho a Decompondo o comando acima temos: :5,$ .... normal .. 0 ....... 2w ...... indica o intervalo que da linha 5 at o fim $ e e executa em modo normal move o cursor para o comeo da linha c pula duas palavras (vai para a palavra "") e

22

Editando i ....... entra no modo de inser~o ca n~o .... insere a palavra "n~o" seguida de espao " " a a c ^[ ...... sai do modo de inser~o (atravs de Ctrl-v seguido ca e de Esc) $ ....... vai para o fim da linha ciw ..... apaga a ltima palavra ("novo") e entra em modo de u inser~o ca velho ... insere a palavra "velho" no lugar de "novo"

A combinao Ctrl-v utilizada para inserir caracteres de controle na sua forma ca e literal, prevenindo-se assim a interpretao destes neste exato momento. ca

2.22

Comentando rapidamente um trecho

Tomando como exemplo um trecho de cdigo como abaixo: o 1 2 3 4 5 6 7 8 9 input{capitulo1} input{capitulo2} input{capitulo3} input{capitulo4} input{capitulo5} input{capitulo6} input{capitulo7} input{capitulo8} input{capitulo9}

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

2.23

Comparando arquivos com o vimdi


:h di

O vim possui um modo para checagem de diferenas entre arquivos, bastante c e util especialmente para programadores, para saber quais so as diferenas entre a c dois arquivos faz-se: vimdiff arquivo1.txt arquivo2.txt .. exibe as diferenas c ]c ................................. mostra prxima diferena o c vim -d ............................. outro modo de abrir o vimdiff mode

2.23 Comparando arquivos com o vimdi

23

Para usurios do GNU/Linux poss a e vel ainda checar diferenas 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 3

Movendo-se no Documento
:h motion.txt

A m de facilitar o entendimento acerca das teclas e atalhos de movimentao, ca faz-se util uma breve recapitulao de conceitos relacionados. Para se entrar em ca modo de insero, 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 comeo da linha c aps o caractere atual o no final da linha uma linha abaixo uma linha cima

Uma vez no modo de insero todas as teclas so exatamente como nos outros ca a editores simples, caracteres que constituem o contedo do texto sendo digitado. u Para sair do modo de insero e retornar ao modo normal digita-se <Esc> ou ca 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 mos do teclado, e a sendo portanto alternativas para as setas de movimentao usuais do teclado. ca Ao invs de manter os quatro dedos sobre H, J, K e L, aconselhvel manter e e a o padro de digitao com o indicador da mo esquerda sobre a tecla F e o da a ca a mo direita sobre a letra J, sendo que seu indicador da mo direita vai alternar a a entre a tecla J e H para a movimentao. ca Para ir para linhas espec cas em modo normal digite: l

25 :n<Enter> ..... vai para linha n ngg ............ vai para linha n nG ............. vai para linha n onde n corresponde ao nmero da linha. Para retornar ao modo normal presu sione <Esc> ou use Ctrl-[ (^[). No vim poss e vel realizar diversos tipos de movimentos, tambm conhecidos e como saltos no documento. A lista abaixo aponta o comandos de salto t picos. gg .... G ..... 0 ..... ^ ..... $ ..... 25gg .. .... fx .... tx .... Fx .... Tx .... * ..... .... gd .... gD .... w ..... W ..... E ..... e ..... zt .... zm .... zz .... n ..... N ..... vai para o incio do arquivo vai para o final do arquivo vai para o incio da linha vai para o primeiro caractere da linha (ignora espaos) c vai para o final da linha salta para a linha 25 salta para a linha da ltima posi~o em que o cursor u ca estava para primeira 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 aps o ltimo x o u Prxima ocorr^ncia de palavra sob o cursor o e salta exatamente para a posi~o em que o cursor ca estava salta para declara~o de varivel sob o cursor ca a salta para declara~o (global) de varivel sob o ca a cursor move para o incio da prxima palavra o pula para prxima palavra (desconsidera hfens) o pula para o final da prxima palavra (desconsidera o hifens) move o cursor para o final da prxima palavra o movo o cursor para o topo da pgina a move o cursor para o meio da pgina a move a pgina de modo com que o cursor fique no a centro move o cursor para a prxima ocorr^ncia da busca o e move o cursor para a ocorr^ncia anterior da busca e

Tambm poss e e vel efetuar saltos e fazer algo mais ao mesmo tempo, a lista abaixo aponta algumas dessas possibilidades. gv .... repete a ltima sele~o visual e posiciona o cursor u ca neste local % ..... localiza par^nteses correspondente e o ..... letra o, alterna extremos de sele~o visual ca yG .... copia da linha atual at o final do arquivo e d$ .... deleta do ponto atual at o final da linha e

26

Movendo-se no Documento gi .... entra em modo de inser~o no ponto da ltima edi~o ca u ca gf .... abre o arquivo sob o cursor

Para o Vim palavras-separadas-por-h fen so consideradas em separado, pora tanto se voc usar, em modo normal w para avanar entre as palavras ele e c pular uma de cada vez, no entanto se usar W em maisculo (como visto) ele a u pular a a-palavra-inteira :) a E .... pula para o final de palavras com hifen B .... pula palavras com hifen (retrocede) W .... pula palavras hifenizadas (comeo) c Podemos pular sentenas: c ) .... ( .... } .... { .... y) ... d} ... pula uma sentena para frente c pula uma sentena para trs c a pula um pargrafo para frente a pula um pargrafo para trs a a copia uma sentena para frente c deleta um pargrafo para frente a

Caso tenha uma estrutura como abaixo: def pot(x): return x**2 E tiver uma referncia qualquer para a funo pot e desejar mover o cursor at e ca e sua denio basta posicionar o cursor sobre a palavra pot e pressionar (em ca modo normal): gd Se a varivel for global, ou seja, estiver fora do documento (provavelmente em a outro) use: gD Quando denimos uma varivel tipo a var = teste e em algum ponto do documento houver referncia a esta varivel e se desejar e a ver seu contedo fazemos u [i

27 Na verdade o atalho acima lhe mostrar o ultimo ponto onde foi feita a atribuio a ca a `quela varivel que est sob o cursor, uma mo na roda para os programadores a a a de planto!  Observe a barra de status do Vim se o tipo de arquivo est a a certo, tipo. Para detalhes sobre como personalizar a barra de status na seo ca 12.10.2. ft=python a busca por denies de funo s funciona se o tipo de arquivo estiver correto co ca o :set ft=python

 Um mapeamento interessante que facilita a movimentao at linahas que ca e contenham determinada palavra de um modo bem simples, bastando pressionar ,f pode ser feito assim:
map ,f [I:let nr = input("Which one: ")<Bar>exe "normal " . nr ."[\t"<CR> Uma vez denido o mapeamento acima e pressionando-se o atalho associado, que neste caso ,f o vim exibir as uma oppo para pular para as ocorrncias e a ca e da palavra assim: 1: trecho contendo a palavra 2: outro trecho contendo a palavra Which one: outro detalhe para voltar ao ultimo ponto em que voc estava e A maioria dos comandos do Vim pode ser precedida por um quanticador: 5j ..... d5j .... k ...... 5k ..... y5k .... w ...... 5w ..... d5w .... b ...... 5b ..... fx ..... dfx .... dgg .... dG ..... yG ..... yfx .... y5j .... desce 5 linhas deleta as prximas 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 prximo x e o deleta da linha atual at o comeo do arquivo e c deleta at o final do arquivo e copia at o final do arquivo e copia at o prximo x e o copia 5 linhas

28

Movendo-se no Documento

3.1

Paginando

Para rolar uma pgina 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 penltimo arquivo editado u pula para a defini~o de uma varivel ca a pula para o fim do pargrafo a pula para a coluna 10 pula para defini~o de varivel sob o cursor ca a

Observao: lembre-se ca ^ .... equivale a Ctrl ^I ... equivale a Ctrl-I E poss abrir vrios arquivos tipo vim *.txt. Editar algum arquivo, salvar vel a e ir para o prximo 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[st] Ou para o ultimo :la[st]

3.2 Usando marcas

29

3.2

Usando marcas
:h mark-motions

As marcas so um meio eciente de se pular para um local no arquivo. Para a criar uma, estando em modo normal faz-se: ma Onde m indica a criao 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 da

3.2.1

Marcas globais

Durante a edio de vrios arquivos pode-se denir uma marca global com o ca a comando: mA Onde m cria a marca e A (maisculo) dene 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 vrios arquivos e a do Vim fazemos: vim :bn :bp :ls :wn :wp *.txt ......... ............... ............... ............... ............... ............... abre todos os arquivos txt vai para o prximo da lista o volta para o arquivo anterior lista todos os arquivos abertos salva e vai para o prximo o salva e vai para o prvio e

Cap tulo 4

Folders
Folders so 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 visualizao completa do texto. Um modo de entender ca rapidamente como funcionam as dobras no Vim seria criando uma dobra para as prximas 10 (dez) linhas com o comando abaixo: o zf10j Voc pode ainda criar uma seleo visual e ca Shift-v ............ j .................. zf ................. zo ................. sele~o por linha ca desce linha cria o folder abre o folder

4.1

Mtodos de dobras e

O Vim tem seis modos fold, so eles: a Sintaxe (syntax) Identao (indent) ca Marcas (marker) Manual (manual) Diferenas (di) c Expresses Regulares (expr) o

4.2 Manipulando dobras Para determinar o tipo de dobra faa c :set foldmethod=tipo onde o tipo pode ser um dos tipos listados acima, exemplo: :set foldmethod=marker

31

Outro modo para determinar o mtodo de dobra seria colocando na ultima linha e do seu arquivo algo assim: vim:fdm=marker:fdl=0: Obs: fdm signica foldmethod, e fdl signica foldlevel. Deve haver um espao c entre a palavra inicial vim e o comeo da linha este recurso chama-se modeline, c leia mais na seo 2.20 modelines na pgina 20. ca a

4.2

Manipulando dobras

Os principais comandos relativos ao uso de dobras so: a zo zO za zA zR zM zc zC ................ ................ ................ ................ ................ ................ ................ ................ 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 todas as dobras do arquivo atual fecha uma dobra fecha a dobra abaixo do cursor, recursivamente cria uma dobra para o pargrafo ap a atual cria uma dobra at a palavra casa e cria uma dobra at a marca a e apaga a dobra (n~o o seu contedo) a u move para o incio da prxima dobra o move para o final da dobra anterior move o cursor para incio da dobra aberta move o cursor para o fim da dobra aberta desabilita ou habilita as dobras diminui/aumenta nvel da dobra fdl nvel da dobra 0 (foldlevel) mostra uma coluna ao lado da numera~o ca

zfap .............. zf/casa ........... zfa .............. zd ................ zj ................ zk ................ [z ................ ]z ................ zi ................ zm, zr ............ :set fdl=0 ........ :set foldcolumn=4 .

Para abrir e fechar as dobras usando a barra de espaos coloque o trecho abaixo c no seu arquivo de congurao do Vim (.vimrc) - veja o cap ca tulo 12, pgina 79. a

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

Folders

A barra, \, nesse comando representa o particionamento do comando em mais de uma linha. Para abrir e fechar as dobras utilizando o clique do mouse no gvim, basta acrescentar na congurao do seu .vimrc: ca set foldcolumn=2 o que adiciona uma coluna ao lado da coluna de enumerao das linhas. ca

4.3

Criando dobras usando o modo visual

Para iniciar a seleo 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 ca, por exemplo voc pode usar um registro que guarda o ultimo comando digitado, pode e ainda imprimir dentro do texto o nome do prprio arquivo, armazenar pores o co distintas de texto (rea de transferncia mltipla) etc. Vamos aos detalhes. a e u O registro sem nome 10 registros nomeados de 9 O registro de pequenas delees co 26 registros nomeados de z ou de Z 4 registros somente leitura O registro de expresses = o Os registro de seleo e *, + and ca O registro o Registro do ultimo padro de busca / a

5.1

O registro sem nome

Armazena o contedo de aes 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 contedo deste registro basta usar as letras p ou P que na u verdade so comandos para colar abaixo da linha atual e acima da linha atual a (em modo normal).

34

Registros

5.2

Registros nomeados de 0 a 9
:h registers

O registro zero armazena o contedo da ultima cpia yy, ` partir do registro u o a 1 vo sendo armazenadas as delees sucessivas de modo que a mais recente a co deleo ser armazenada no registro 1 e os registros vo sendo incrementados ca a a em direo ao nono. Deleo menores que uma linha no so armazenadas ca ca a a nestes registros, caso em que o Vim usa o registro de pequenas delees ou que co se tenha especicado algum outro registro.

5.3

Registro de pequenas delees 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 contedo 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 nal do registro a. e "ayip .. "a ..... y ...... ip ..... copia o pargrafo atual para o registro a a registro a yank (copia) inner paragraph (este pargrafo) a

5.5
": ". "% "#

Registros somente leitura : . % #


..... ..... ..... ..... armazena armazena contm o e contm o e o ltimo comando u uma cpia do ltimo texto inserido o u nome do arquivo corrente nome do arquivo alternativo

Uma forma prtica de usar registros em modo de insero usando: Ctrl-r a ca e

5.6 Registro de expresses = o 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

35

Em modo de insero pode-se repetir a ultima insero de texto simplesmente ca ca pressionando: Ctrl-a

5.6
"=

Registro de expresses = o

O registro de expresses permite efetuar clculos diretamente no editor, usando o o a atalho Ctrl-r = no modo de insero, o editor mostrar um sinal de igualdade ca a na barra de status e o usurio digita ento uma expresso matemtica como uma a a a a multiplicao 6*9 e em seguida pressiona Enter para que o editor nalize a ca operao. Veja um v ca deo demonstrando sua utilizao neste link [2]. ca Para entender melhor como funciona o registro de expresses tomemos um exemo plo. Para fazer uma sequncia 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 criao de uma macro permite fazer uma sequncia ca e de quantas linhas forem necessrias 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 nmero 1 u incrementa o nmero (agora 2) u avana 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 comeo da linha c para a grava~o da macro ca

36 Agora posicione o cursor no comeo da linha e pressione 10@a. c

Registros

 Na seo 12.8.6 pgina 86 h mais dicas sobre o uso do registro de expresses ca a a o


clculos matemticos. a a

5.7

Registros de arrastar e mover

O registro "* responsvel por armazenar o ultimo texto selecionado (p.e., atravs do mouse). e a e J o registro a "+ o denominado rea de transferncia, normalmente utilizado para se transferir e a e contedos entre aplicaeseste registro preenchido, por exemplo, usando-se u co e a t pica combinao Ctrl-v encontrada em muitas aplicaes. Finalmente, o ca co registro "~ armazena o texto colado pela operao mais recente de arrastar-e-soltar (dragca and-drop).

5.8

Registro buraco negro

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

5.9

Registros de buscas /

Se desejar inserir em uma substituio uma busca prvia, voc poderia fazer ca e e assim em modo de comandos: :%s,<Ctrl-r>/,novo-texto,g

5.10 Manipulando registros

37

Observao: veja que estou trocando o delimitador da busca para deixar claro ca o uso do registro de buscas /.  Pode-se usar um registro nomeado de a-z assim: let @a="new" :%s/old/\=@a/g ...... substitui old por new \=@a ................ faz refer^ncia ao registro a e

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 u colagem ... copia o nome do arquivo para o buffer de colagem ... mostra o contedo de todos os registros u ... ... ... ... ...

:let :let :let :let :let

:let @*=@/ :let @*=@% :reg Em modo de insero ca

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

Insere Insere Insere Insere Insere

o registro de pequenas dele~es co registros 0-9 e a-z o nome do arquivo o contedo de uma varivel u a Big-Words veja se~o 2.1 ca

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 contedo de @%, ou seja, o nome do arquivo, do u voc pode fazer algo assim em modo de insero: e ca Ctrl-r n E o nome do arquivo ser inserido a

5.11

Listando os registros atuais

Digitando o comando

38 :reg ou ainda :ls

Registros

O Vim mostrar os registros numerados e nomeados atualmente em uso a

5.12

Listando arquivos abertos

Suponha que voc abriu vrios arquivos txt assim: e a vim *.txt Para listar os arquivos aberto faa: c :buffers Usando o comando acima o Vim exibir a lista de todos os arquivos abertos, a aps exibir a lista voc pode escolher um dos arquivos da lista, algo como: o e :buf 3 Para editar arquivos em sequncia faa as alteraes no arquivo atual e acesso e c co o prximo assim: o :wn O comando acima diz w gravar n prximo o

5.13
:sn

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

O comando acima uma abreviao de split next, ou seja, dividir e prximo. e ca o

5.14

Como colocar um pedao de texto em um c registro?

<Esc> ...... vai para o modo normal "a10j ...... coloca no registro a as prximas 10 linhas o 10j

5.15 Como criar um registro em modo visual? Pode-se fazer: <Esc> ...... para ter certeza que est em modo normal a "ap ........ registro a paste, ou seja, cole Em modo de insero faz-se: ca Ctrl-r a

39

 H situaes em que se tem caracteres no ascii a co a

que so complicados de a se colocar em uma busca ou substituio, 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 contedo do registro a por u char Pode-se ainda usar esta tcnica para copiar rapidamente comentrios do bash1 , e a representados pelo caracteres #, em modo normal usando o atalho 0yljP. 0 ............... yl .............. j ............... P ............... posiciona o cursor no incio 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 seleo visual com o atalho ca Shift-v ..... seleciona linhas inteiras pressione a letra j at chegar ao ponto desejado, agora faa e c "ay pressione v para sair do modo visual.

5.16

Como denir um registro no vimrc?

Se voc no sabe ainda como editar preferncias no Vim leia antes o cap e a e tulo 12. Voc pode criar uma varivel no vimrc assim: e a
1 Interpretador

de comandos do GNU/Linux

40 let var="foo" ...... define foo para var echo var ........... mostra o valor de var Pode tambm dizer ao Vim algo como... e :let @d=strftime("c")<Enter>

Registros

Neste caso estou dizendo a ele que guarde na varivel d at d, o valor da data a do sistema strftime("c") ou ento cole isto no vimrc: a let @d=strftime("c")<cr> A diferena entre digitar diretamente um comando e adicion-lo ao vimrc c a e que uma vez no vimrc o registro em questo estar sempre dispon a a vel, observe tambm as sutis diferenas, um Enter inserido manualmente apenas uma e c e indicao de uma ao que voc far pressionando a tecla especicada, 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 atribuies acima correspondem a: co 1. Guarda a data na varivel d a 2. Mapeamento para o modo de insero imap digite ,d ca 3. Mapeamento para o modo normal nmap digite ,d E digitar ,d normalmente Desmisticando o strftime " d=dia m=mes Y=ano H=hora M=minuto c=data-completa :h strftime ........ ajuda completa sobre o comando e inserir em modo normal assim: "dp ou usar em modo de insero assim: ca Ctrl-r d

5.17 Como selecionar blocos verticais de texto?

41

5.17

Como selecionar blocos verticais de texto?

Ctrl-v agora use as letras h,l,k,j como setas de direo at nalizar podendo guardar ca e a seleo em um registro que vai de a a z exemplo: ca "ay Em modo normal voc pode fazer assim para guardar um pargrafo inteiro em e a um registro "ayip O comando acima quer dizer para o registro a ...... "a copie ...................... y o pargrafo atual .......... inner paragraph a

5.18

Referncias e

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

Cap tulo 6

Buscas e Substituies co
Para fazer uma busca, certique-se de que est em modo normal, pressione / a e digite a expresso a ser procurada. a Para encontrar a primeira ocorrncia 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 trs linhas aps a ocorrncia da palavra teste e o e

/\<casa\> A busca acima localiza casa mas no casamento. Em expresses regulares, a o \< e \> so representadas por \b, que representa, por sua vez, borda de palavras. a Ou seja, casa,, casa! seriam localizado, visto que sinais de pontuao no ca a fazem parte da palavra.

6.1

Usando Expresses Regulares em buscas o


:h regex, pattern

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

inicia uma busca (modo normal) cdigo da letra i o localiza a letra i - hexadecimal 069 localiza nmeros u localiza nmeros de 3 at 8 u e

6.1 Usando Expresses Regulares em buscas o ^ ........... $ ........... \+ .......... /^\d\+$ ..... /\r$ ........ /^\s*$ ...... /^\t\+ ...... \s .......... /\s\+$ ......

43

comeo de linha c final de linha um ou mais localiza somente dgitos localiza linhas terminadas com ^M localiza linhas vazias ou contendo apenas espaos c localiza linhas que iniciam com tabs localiza espaos c localiza espaos no final da linha c

6.1.1

Evitando escapes ao usar Expresses regulares o

O Vim possui um modo chamado very magic para uso em expresses regulares o que evita o uso excessivo de escapes, alternativas etc. Usando apenas uma opo: 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 opo very magic far ca amos: :%s/\d\{5\}\(\D\+\)\d\{3\}/\1/ J com a opo 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 ........ dgitos {5} ....... 5 vezes ( ........ inicia um grupo \D ........ seguido de n~o dgitos a ) ........ fecha um grupo + ......... uma ou mais vezes \d ........ novamente dgitos {3} ....... tr^s vezes e / ......... inicio da substitui~o ca \1 ........ referencia o grupo 1

44

Buscas e Substituies co

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 dgito / ......... 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 ocorrncia do padro de busca na mesma linha. Caso no seja gulosa, a expresso e a a a ir apenas casar com a primeira ocorrncia em cada linha. a e Classes POSIX para uso em Expresses Regulares o Ao fazermos substituies em textos poderemos nos deparar com erros, pois [a-z] co no inclui caracteres acentuados, as classes POSIX so a soluo para este proa a ca blema, pois adequam o sistema ao idioma local, esta a mgica implementada e a por estas classes. [:lower:] ...... letras minsculas incluindo acentos u [:upper:] ...... letras maisculas 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 minsculas u :] ...... termina a classe POSIX ] ....... termina o grupo / ....... inicia substitui~o ca \U ...... para maisculo u & ....... correponde ao que foi buscado

6.2 Destacando padres o

45

Nem todas as classes POSIX conseguem pegar caracteres acentuados, portanto deve-se habilitar o destaque colorido para buscas usando: :set hlsearch .... destaque colorido para buscas :set incsearch ... busca incremental Dessa forma podemos testar nossas buscas antes de fazer uma substituio. ca Para aprender mais sobre Expresses Regulares leia: o Guia sobre Espresses Regulares [3] o :help regex :help pattern

 Uma forma rpida para encontrar a prxima ocorrncia de uma palavra sob a o e
o cursor teclar *. Para encontrar uma ocorrncia anterior da palavra sob e e o cursor, existe o # (em ambos os casos o cursor deve estar posicionado sobre a palavra que deseja procurar). As duas opes citadas localizam apenas se co a palavra corresponder totalmente ao padro sob o cursor, pode-se bucar por a trechos de palavras que faam parte de palavras maiores usando-se g*. Podec se ainda exibir dentro do contexto todas as ocorrncias de uma palavra sob o e cursor usando-se o seguinte atalho em modo normal: [ Shift-i

6.2

Destacando padres 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 faa 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:

46 : ................ map ,t ........... <Esc> ............ s/isto/aquilo/g .. : ................ . ................ s ................ ^ ................ \s\+ ............. .* ............... \(grupo\) ........ \1 ............... \r ............... g ................ <cr> .............

Buscas e Substituies co 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 comeo de linha c um espao 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

6.4

Obtendo informaoes do arquivo c


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

Obs: O cdigo do caractere pode ser usado para substituies, especialmente o co em se tratando de caracteres de controle como tabulaes ^I ou nal de lico nha DOS/Windows \%x0d. Voc pode apagar os caracteres de nal de linha e Dos/Windows usando uma simples substituio, veja mais adiante: ca

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

:set ff=unix :w Na seo 12 pgina 79 h um cdigo para a barra de status que faz com que a ca a a o mesma exiba o cdigo do caractere sob o cursor na seo 12.10.2.  O caractere o ca de nal de linha do Windows/DOS pode ser inserido com a seguinte combinao ca de teclas:

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)

6.5 Trabalhando com registradores

47

6.5

Trabalhando com registradores

Pode-se guardar trechos do que foi copiado ou apagado para registros distintos (rea de transferncia mltipla). Os registros so 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 especicar o nome do registrador antes: "add ... "bdd ... "ap .... "bp .... "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 contedo do registrador a u o contedo 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 insero, como visto anteriormente, pode-se usar um atalho para ca colar rapidamente o contedo de um registrador. u Ctrl-r (registro) Para colar o contedo do registrador a u Ctrl-r a Para copiar a linha atual para a rea de transferncia a e "+yy Para colar da rea de transferncia a e "+p Para copiar o arquivo atual para a area de transferncia clipboard: e :%y+

6.6

Edioes complexas c

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

48 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 maisculo u gggUG ggVGU

Buscas e Substituies co

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 pargrafo atual a

6.8

Corrigindo a indentao de cdigos ca o

Selecione o bloco de cdigo, por exemplo o vip ..... visual inner paragraph (selecione este pargrafo) 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 diretrios 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 operao do Vim. ca

6.10 Selecionando ou deletando conte do de tags HTML u

49

6.10

Selecionando ou deletando conte do de tags u HTML

<tag> contedo da tag </tag> u basta usar (em modo normal) as teclas vit ............... visual inner tag | esta tag Este recurso tambm funciona com parnteses e e vi( ..... visual select vi" ..... visual select di( ..... delete inner (, ou seja, seu contedo u

6.11

Substituies co

Para fazer uma busca, certique-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 ` dcima 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 opes que modicam seu comportamento. co

6.12

Exemplos

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

50

Buscas e Substituies co

Buscar if, while e for. Observe que necessrio escapar os caracteres a e a \(, \| e \), caso contrrio eles sero interpretados como caracteres comuns. a a Quebra de linha /quebra\nde linha Ignorando maisculas e minsculas u u /\cpalavra Usando \c o Vim encontrar palavra, Palavraa ou at mesmo PALAVRA. a e Uma dica colocar no seu arquivo de congurao vimrc veja o cap e ca tulo 12 na pgina 79. a set ignorecase .. ignora maisculas e minsculas na bucsca u u set smartcase ... se busca contiver maisculas ele passa a u consider-las a set hlsearch .... mostra o que est sendo buscado em cores a set incsearch ... ativa a busca incremental se voc no sabe ainda como colocar estas preferncias no arquivo de cone a e gurao pode ativa-las em modo de comando precedendo-as com dois pontos, ca assim: :set ignorecase<Enter> Substituies com conrmao: 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 nmero de espaos, incluindo quebras a u c de linha. Buscar as trs sequncias: a e e Hello World Hello Hello World World

6.12 Exemplos Buscar linhas de at 30 caracteres de comprimento e /^.\{,30\}$ ^ . ..... representa comeo de linha c ..... representa qualquer caractere

51

:%s/<[^>]*>//g ... apaga tags HTML/XML :%g/^$/d ......... apaga linhas vazias :%s/^[\ \t]*\n//g apaga linhas vazias Remover duas ou mais linhas vazias entre pargrafos 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 no d a gitos (no pega nmeros) a u :%s/^\D.*//g Remove nal de linha DOS/Windows ^M que tem cdigo hexadecimal igual a o 0d :%s/\%x0d//g Troca palavras de lugar usando expresses regulares: o :%s/\(.\+\)\s\(.\+\)/\2 \1/ Modicando todas as tags HTML para minsculo: u :%s/<\([^>]*\)>/<\L\1>/g Move linhas 10 a 12 para alm da linha 30: e :10,12m30

52

Buscas e Substituies co

6.13

O comando global g

Buscando um padro e gravando em outro arquivo: a :a,b g/^Error/ . w >> errors.txt Apenas imprimir linhas que contm determinada palavra, isto util quando e e voc quer ter uma viso 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 padro, mesmo que a numea


rao de linha no esteja habilitada use :g/padr~o/#. ca a a numerar linhas: :let i=1 | g/^/s//\=i."\t"/ | let i=i+1 Outro modo de inserir nmeros de linha u :%s/^/\=line(.). : ............ % ............ s ............ / ............ ^ ............ / ............ \=line(.) .. . ........

comando em todo o arquivo substitui~o ca inicio da busca comeo de linha c inicio da substitui~o ca corresponde ao no da linha atual concatena um espao aps o no c o

Para copiar linhas comeadas com Error para o nal do arquivo faa: c c :g/^Error/ copy $ Obs: O comando copy pode ser abreviado co ou ainda pode-se usar t para mais detalhes: :h co Como adicionar um padro copiado com yy aps um determinado padro? a o a :g/padrao/+put! :g/padrao/.put=teste Entre as linhas que contiverem fred e joe substitua:

6.13 O comando global g :g/fred/,/joe/s/isto/aquilo/gic

53

As opes gic correspondem a global, ignore case e conrm, podendo ser omico tidas deixando s o global. o Pegar caracteres numricos e jogar no nal do arquivo: e :g/^\d\+.*/m $ Inverter a ordem das linhas do arquivo: :g/^/m0 Apagar as linhas que contm Line commented: e :g/Line commented/d Apagar todas as linhas comentadas :g/^\s*#/d Copiar determinado padro para um registro: a :g/pattern/ normal "Ayy Copiar linhas que contm um padro e a linha subsequente para o nal: e a :g/padr~o/;+1 copy $ a Deletar linhas que no contenham um padro: a a :v/dicas/d ..... deleta linhas que n~o contenham dicas a

Incrementar nmeros no comeo da linha: u c :.,20g/^\d/exe "normal! \<c-a>" Sublinhar linhas comeadas com Chapter: c :g/^Chapter/t.|s/./-/g : ........ g ........ / ........ ^ ........ Chapter .. comando global inicio de um padr~o a comeo de linha c palavra literal

54 / t . s / . / / g ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ fim do par~o a copia linha atual substitua inicio de um padr~o a qualquer caractere incio da substitui~o ca por trao c fim da substitui~o ca em todas as ocorr^ncias e

Buscas e Substituies co

6.14

Dicas

Para colocar a ultima busca em uma substituio faa: ca c :%s/Ctrl-r//novo/g A dupla barra corresponde ao ultimo padro procurado, e portanto o comando a abaixo far a substituiao da ultima busca por casinha: a c :%s//casinha/g

6.15

Filtrando arquivos com o vimgrep

Por vezes sabemos que aquela anotao 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 extenso 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 nal) 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 anloga pode-se usar como referncia um padro qualquer: a e a :/palavra/;+10 m 0 O comando acima diz: a partir da linha que contm palavra incluindo as 10 ` e prximas linhas mova m para a primeira linha 0, ou seja, antes da linha 1. o

6.17 Dicas das lista vi-br

55

6.17

Dicas das lista vi-br

Fonte: Grupo vi-br do yahoo [4] Problema: Essa deve ser uma pergunta comum. Suponha o seguinte contedo u de arquivo: ... // vrias linhas a texto1000texto // texto1000texto // texto1000texto // texto1000texto // texto1000texto // ... // vrias linhas a

linha linha linha linha linha

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

Gostaria de um comando que mudasse para ... // vrias linhas a texto1001texto // texto1002texto // texto1003texto // texto1004texto // texto1005texto // ... // vrias linhas a

linha linha linha linha linha

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

Ou seja, somasse 1 a cada um dos nmeros entre os textos especicando como 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 no tem awk, e logo a melhor soluo 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 Observao: 10,20 o intervalo, ou seja, da linha 10 at a linha 20 ca e e :help / :help :s :help pattern

 O plugin Visincr [5] Possibilita incrementos em modo visual de diversas formas, um v deo demonstrativos pode ser visto neste link: http://vimeo.com/4457161

56

Buscas e Substituies co

6.18

Juno de linhas com Vim ca

Fonte: dicas-l da unicamp [6] Colaborao: Rubens Queiroz de Almeida ca Recentemente precisei combinar, em um arquivo, duas linhas consecutivas. O arquivo original continha linhas como: Matrcula: 123456 Senha: yatVind7kned Matrcula: 123456 Senha: invanBabnit3 E assim por diante. Eu precisava converter este arquivo para algo como: Matrcula: 123456 - Senha: yatVind7kned Matrcula: 123456 - Senha: invanBabnit3 Para isto, basta executar o comando: :g/^Matrcula/s/\n/ - / Explicando: s/isto/aquilo/g .. g ................ /................. ^ ................ Matrcula ........ s ................ /\n/ - / ......... substitui isto por aquilo comando global inicia padr~o de busca a indica comeo de linha c palavra a ser buscada inicia substitui~o ca troca quebra de linha \n, por -

6.19

Buscando em um intervalo de linhas

Para buscar entre as linhas 10 e 50 por um padro qualquer fazemos: a /padrao\%>10l\$<50l Esta e outras boas dicas podem ser lidas no site vim-faq [7].

Cap tulo 7

Trabalhando com Janelas


O Vim trabalha com o conceito de mltiplos buers de arquivo. Cada buer u um arquivo carregado para edio. Um buer pode estar vis e ca vel ou no, e a poss e vel dividir a tela em janelas, de forma a visualizar mais de um buer simultaneamente.

7.1

Alternando entre Buers de arquivo

Ao abrir um documento qualquer no Vim o mesmo ca em um buer. Caso seja decidido que outro arquivo seja aberto na mesma janela, o documento inicial ir desaparecer da janela atual cedendo lugar ao mais novo, mas permanecer a a ativo no buer para futuras modicaes. co Para saber quantos documentos esto abertos no momento utiliza-se o comando a :ls ou :buers. Esses comandos listam todos os arquivos que esto referenciados a no buer com suas respectivas chavesde referencia. Para trocar a visualizao do Buer atual pode-se usar: ca

:buffer# ...... Altera para o buffer anterior :b2 ........... Altera para o buffer cujo a chave 2 e

 Para os que preferem atalhos para alternar entre os buers, poss utilizar e vel
Ctrl-6 que tem o mesmo funcionamento do comando :b#

7.2

Modos de diviso da janela a

Como foi dito acima, poss visualizar mais de um buer ao mesmo tempo, e vel e isso pode ser feito utilizando tab ou split.

58

Trabalhando com Janelas

7.2.1

Utilizando abas tab

A partir do Vim 7 foi disponibilizada a funo de abrir arquivos em abas, porca tanto poss ter vrios buers abertos em abas distintas e alternar entre elas e vel a facilmente. Os comandos para utilizao das abas so: ca a :tabnew ........... Abre uma nova tab :tabprevious ...... Vai para a tab anterior :tabnext .......... Vai para a prxima tab o

7.2.2

Utilizando split horizontal

Enquanto os comandos referentes a tab deixam a janela inteira dispon para vel o texto e apenas cria uma pequena aba na parte superior, o comando split literamente divide a tela atual em duas para visualizao simultnea dos buers ca a (seja ele o mesmo ou outro diferente). Esse o split padro do Vim mas pode e a ser alterado facilmente colocando a linha abaixo no seu ~/.vimrc: :set splitright .... split padr~o para vertical a

7.2.3

Utilizando split vertical

O split vertical funciona da mesma maneira que o split horizontal, sendo a unica diferena o modo como a tela dividida, pois nesse caso a tela dividida c e e verticalmente.

7.3

Abrindo e fechando janelas


Ctrl-w-s Ctrl-w-v Ctrl-w-o Ctrl-w-n Ctrl-w-q Ctrl-w-c ...... ...... ...... ...... ...... ...... Divide a janela horizontalmente (:split) Divide a janela verticalmente (:vsplit) Faz a janela atual ser a nica (:only) u Abre nova janela (:new) Fecha a janela atual (:quit) Fecha a janela atual (:close)

 Lembrando que o Vim considera todos os arquivos como buers portanto


quando um arquivo fechado, o que est sendo fechado a visualizao do e a e ca mesmo, pois ele continua aberto no buer.

7.4

Salvando e saindo

E poss salvar todas as janelas facilmente, assim como sair tambem: vel :wall ............. salva todos write all :qall ............. fecha todos quit all

7.5 Manipulando janelas

59

7.5

Manipulando janelas
Ctrl-w-w Ctrl-w-j Ctrl-w-k Ctrl-w-l Ctrl-w-h Ctrl-w-r Ctrl-w-+ Ctrl-w-......... ......... ......... ......... ......... ......... ......... ......... Alterna entre janelas desce uma janela j sobe uma janela k move para a janela da direta l move para a janela da direta h Rotaciona janelas na tela Aumenta o espao da janela atual c Diminui o espao da janela atual c

Pode-se mapear um atalho para redimensionar janelas com as teclas + e -. :map + <c-w>+ :map - <c-w>-

7.6

File Explorer
:h buers windows

Para abrir o gerenciador de arquivos do Vim use: :Vex ............ abre o :Sex ............ abre o :Tex ............ abre o :e .............. abre o aps abrir chame a ajuda o file file file file <F1> explorer explorer explorer explorer verticalmente em nova janela em nova aba na janela atual

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>

 Ao editar um arquivo no qual h referncia a um outro arquivo, por exemplo: a e


/etc/hosts, pode-se usar o atalho Ctrl-w f para abri-lo em nova janela, ou gf para abri-lo na janela atual. Mas importante posicionar o cursor sobre o e nome do arquivo. Veja tambm mapeamentos na seo 12.8 pgina 83. e ca a

Cap tulo 8

Repetio de Comandos ca
Para repetir a ultima edio saia do modo de Insero e pressione ponto (.): ca ca . Para inserir um texto que deve ser repetido vrias vezes: a 1. Posicione o cursor no local desejado; 2. Digite o nmero de repeties; u co 3. Entre em modo de insero; ca 4. Digite o texto; 5. Saia do modo de insero (tecle Esc). ca Por exemplo, se voc quiser inserir oitenta traos 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 insero usamos um quanticador ca 80 depois iniciamos o modo de insero ca i depois digitamos o caractere a ser repetido -

8.1 Repetindo a digitao de uma linha ca e por m sa mos do modo de inserao c <Esc> Se desejssemos digitar 10 linhas com o texto a isto um teste e dever amos ento 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

61

8.1

Repetindo a digitao 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 contedo u uma linha <Ctrl-x Ctrl-l> e veja o resultado

8.2

Guardando trechos em registros

Os registradores a-z so uma espcie de rea de transferncia mltipla. a e a e u Deve-se estar em modo normal e ento digitar aspas duplas e uma das 26 letras a do alfabeto, em seguida uma ao 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 contedo do registrador a abaixo u "bdd ... apaga a linha atual para o registrador b

62

Repetio de Comandos ca

8.3

Gravando comandos

Imagine que voc tem o seguinte trecho de cdigo: e o stdio.h fcntl.h unistd.h stdlib.h e quer que ele que assim: #include #include #include #include "stdio.h" "fcntl.h" "unistd.h" "stdlib.h"

No poss simplesmente executar repetidas vezes um comando do Vim, pois a e vel preciso incluir texto tanto no comeo quanto no m da linha? E necessrio 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 so guardadas nos registros do Vim, que so identicados a a a pelas letras do alfabeto. Para comear a gravar uma macro no registro a, c digitamos qa No modo Normal. Tudo o que for digitado a partir de ento, 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 comeo 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 necessrio, usando o coa mando @a. Para executar quatro vezes, digite: 4@a

8.4 Repetindo substituies co Este comando executa quatro vezes o contedo do registro a. u Caso tenha sido executada, a macro pode ser repetida com o comando @@

63

8.4

Repetindo substituioes c

Caso seja feito uma substituio em um intervalo como abaixo ca :5,32s/isto/aquilo/g Pode-se repetir esta substituio 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 substituio globalmente assim: ca g&

8.5
@:

Repetindo comandos

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

8.6

Scripts Vim

Usando um script para modicar um nome em vrios arquivos: Crie um arquivo a chamado subst.vim contendo os comandos de substituio 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 tambm pode ser abreviado com :so bem como ser usado e para testar um esquema de cor: :so tema.vim

64

Repetio 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 rpida. No exemplo a seguir, sero abertos todos os arquivos a a HTML do diretrio atual, ser efetuado uma substituio e em seguida sero 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 opo ca e faz com que o vim no exiba mensagens de erro caso o buer em questo no a a a contenha o padro a ser substitu a do.

8.8

Colocando a ultima busca em um comando

Observao: 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 histrico 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 insero ca

65

8.12

Para repetir exatamente a ultima insero ca

i<c-a>

Cap tulo 9

Comandos Externos
O Vim permite executar comandos externos para processar ou ltrar o contedo u de um arquivo. De forma geral, fazemos isso digitando (no modo normal): :!ls .... visualiza o contedo do diretrio 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 contedo do diretrio u o A seguir, veja alguns exemplos de utilizao: ca

9.1

Ordenando

Podemos usar o comando sort que ordena o contedo 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 padro de classicar na a e ordem alfabtica (baseando-se na linha inteira). Para mais informaes sobre e co argumentos do comando sort, digite: sort --help ou man sort (no Unix) ou sort /? (no Windows).

9.2 Removendo linhas duplicadas

67

9.2

Removendo linhas duplicadas


:%!uniq

O caractere % representa a regio equivalente ao arquivo atual inteiro. A a verso 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 ordenao envolver nmeros faz-se: ca u :sort n

9.4

Beautiers

A maior parte das linguagens de programao possui ferramentas externas chaca madas beautiers, que servem para embelezar o cdigo, atravs da indentao e o e ca espaamento. 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. Denir o Vim como editor padro do sistema editando o arquivo .bashrc2 : a #configura o vim como editor padr~o a export EDITOR=vim export VISUAL=vim 2. No terminal usar a combinaao de teclas Ctrl-x-e. Esta combinao c ca de teclas abre o editor padro 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/ 2 Arquivo

de conguraao do bash c

68

Comandos Externos

9.6

Compilando e vericando erros


:h cwindow quickx-window

Se o seu projeto j possui um Makefile, ento 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 quickx: :cw[indow] 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 ocorrncia. e Modicando o compilador, o comando make pode mudar sua ao. ca :compiler javac :compiler gcc :compiler php Note que php no tem um compilador. Logo, quando executado, o make ir a a vericar por erros de sintaxes. :compiler O comando acima lista todos os compiladores suportados.

9.7

Grep
:h grep quickx-window cw

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 quickx3 aqui tambm para exibir os resultados do grep e poder e ir diretamente a eles.
3 :cope

9.8 Indent

69

9.8

Indent

Indent4 um programa que indenta seu cdigo fonte de acordo com os padres e o o congurados no seu arquivo HOME/.indent.pro. Vou pressupor que voc j e a saiba usar o indent e como fazer as conguraes necessrias para ele funcionar, co a ento vamos ao funcionamento dele no Vim: a Para indentar um bloco de cdigo, 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 cdigo, iro aparecer alguns caraco a teres extras, mas o procedimento continua o mesmo: :<,>!indent

9.9

Calculadora Cient ca com o Vim

Para usar a funo de Calculadora Cient ca ca no Vim usamos uma ferramenta externa, que pode ser o comando bc do GNU/Linux, ou uma linguagem de programao como Python ou Ruby, veremos como habilitar a calculadora usando ca o Python. Obviamente esta linguagem de programao deve estar instalada no ca sistema em que se deseja usar seus recursos. Deve-se testar se a verso 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
4 http://www.gnu.org/software/indent

70 vim ou gvim -

Comandos Externos

a sa do Shell redirecionada para o (G)Vim automaticamente, no sendo da e a necessrio redirecion-la para um arquivo temporrio e, logo aps, abr para a a a o -lo edit-lo e modic-lo. Quem trabalha com sistemas de controle de verso como a a a svn pode visualizar as diferenas entre o cdigo que est sendo editado e o que c o a est no repositrio com sintaxe colorida desta forma: a o svn diff | view Outra situao em que se pode combinar o vim com saidas do shell com o ca e comando grep. Usando-se a opo -l do grep listamos apenas os arquivos ca que correspondem a um padro. a grep -irl voyeg3r . ./src/img/.svn/entries ./src/Makefile ./src/vimbook.tex Pode-se em seguida chamar o vim usando substituio de comandos, como o ca comando !! corresponde ao ultimo comando, e neste caso a saida corresponde a uma lista de arquivos que contm o padro a ser editado faz-se: e a vim ${!!}

9.11

Log do Subversion

A varivel de ambiente $SVN EDITOR pode ser usada para se especicar o a caminho para o editor de texto de sua preferncia, a m 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 sesso no Vim, que depois de salva, ser usada para LOG do a a a commit.

9.12

Referncias 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

Vericao Ortogrca ca a
:h spell

O Vim possui um recurso nativo de vericao ortogrca (spell) em tempo de ca a edio, apontando palavras e expresses desconhecidasusualmente erros de ca o graaenquanto o usurio as digita. a Basicamente, para cada palavra digitada o Vim procura por sua graa em um dicionrio. No encontrando-a, a palavra marcada como desconhecida a a e (sublinhando-a ou alterando sua cor), e fornece ao usurio mecanismos para a corrigi-la (atravs de sugestes) ou cadastr-la no dicionrio caso esteja de fato e o a a grafada corretamente.

10.1

Habilitando a vericao ortogrca ca a


:h spell, spelllang

A vericao ortogrca atua em uma linguagem (dicionrio) por vez, portanto, ca a a sua efetiva habilitao depende da especicao desta linguagem. Por exemplo, ca ca para habilitar no arquivo em edio a vericao ortogrca na l ca ca a ngua portuguesa (pt), assumindo-se a existncia do dicionrio em questo: 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 sesso corrente do Vim estariam sob e a efeito da vericao ortogrca e do mesmo dicionrio (no caso o pt). ca a a A desabilitao da vericao d-se digitando: ca ca a

72 :setlocal nospell :set nospell

Vericao Ortogrca ca a

(efeito global)

Caso queira-se apenas alterar o dicionrio de vericao ortogrca, suponha a ca a para a l ngua inglesa (en), basta: :setlocal spelllang=en :set spelllang=en

(efeito global)

10.1.1

Habilitao automtica na inicializao ca a ca


:h autocmd, Filetype, BufNewFile, BufRead

` As vezes torna-se cansativo a digitao expl ca cita do comando de habilitao da ca vericao ortogrca sempre quando desejada. Seria conveniente se o Vim ca a habilitasse automaticamente a vericao para aqueles tipos de arquivos que ca comumente fazem uso da vericao ortogrca, como por exemplo arquivos ca a texto. Isto poss e vel editando-se o arquivo de congurao 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 vericao ortogrca usando o dicionca a a rio da l ngua portuguesa (pt) para arquivos do tipo texto e os terminados com a extenso .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 extenso .txt for carregado (BufRead) a ou criado (BufNewFile).

10.2

O dicionrio de termos a

A qualidade da vericao ortogrca do Vim est diretamente ligada ` comca a a a pletude e corretude do dicionrio da linguagem em questo. Dicionrios pouco a a a completos so inconvenientes ` medida que acusam falso positivos em demasia; a a pior, dicionrios contendo palavras grafadas incorretamente, alm de acusarem a e falso positivos, induzem o usurio ao erro ao sugerirem graas erradas. a E razoavelmente comum o Vim j vir instalado com dicionrios de relativa quaa a lidade para algumas linguagens (ao menos ingls, habitualmente). Entretanto, e ainda raro para a maioria das instalaes do Vim trazer por default um die co cionrio realmente completo e atualizado da l a ngua portuguesa. A prxima o seo sintetiza, pois, os passos para a instalao de um excelentee dispon ca ca vel livrementedicionrio de palavras para a l a ngua portuguesa.

10.2 O dicionrio de termos a

73

10.2.1

Dicionrio portugus segundo o acordo ortogrco a e a

A equipe do projeto BrOffice.org e seus colaboradores mantm e disponibilie zam livremente um grandioso dicionrio de palavras da l a ngua portuguesa. Alm e do expressivo nmero de termos, o dicionrio contempla as mudanas ortogru a c a cas denidas pelo Acordo Ortogrco [8] que entraram em vigor no in a cio de 2009. A instalao envolve trs passos, so eles: ca e a 1. obteno do dicionrio atravs do site BrOffice.org; ca a e 2. converso para o formato interno de dicionrio do Vim; e a a 3. instalao dos arquivos resultantes. ca Obteno do dicionrio ca a O dicionrio pode ser obtido no site do br.oce.org [9]. O arquivo baixado a encontra-se compactado no formato Zip, bastando portanto descompact-lo com a qualquer utilitrio compat com este formato, por exemplo, o comando unzip. a vel Converso do dicionrio a a
:h mkspell

Aps a descompactao, os arquivos pt_BR.aff e pt_BR.dic, extra o ca dos no diretrio corrente1 , sero usados para a criao dos dicionrios no formato interno o a ca a do Vim2 . A converso propriamente dita feita pelo prprio Vim atravs do a e o e comando mkspell: 1. Carrega-se o Vim a partir do diretrio onde foram extra o dos pt_BR.aff e pt_BR.dic 2. O comando mkspell ento executado como: e a :mkspell pt pt_BR O Vim ento gera um arquivo de dicionrio da forma pt.<codifica~o>.spl, a a ca onde <codifica~o> a codicao de caracteres do sistema, normalmente ca e ca utf-8 ou latin1; caso queira-se um dicionrio em uma codicao diferente da a ca padro ser preciso ajustar a varivel encoding antes da invocao do comando a a a ca mkspell: :set encoding=<codificaao> c~ :mkspell pt pt_BR
1 Eventualmente, dependendo da verso do pacote de correao ortogrca, os arquivos de a c a dicionrio podem ser extra a dos no subdiretrio dictionaries ou outro qualquer. o 2 O formato interno de dicionrio do Vim assegura melhor desempenho, em termos de a agilidade e consumo de memria, quando a vericao ortogrca do editor encontra-se em o ca a operao. ca

74 Instalao do(s) dicionrio(s) gerado(s) ca a

Vericao Ortogrca ca a

:h runtimepath

Finalmente, o dicionrio geradoou os dicionrios, dependendo do uso ou no a a a de codicaes diferentesdeve ser copiado para o subdiretrio spell/ dentro co o de qualquer caminho (diretrio) que o Vim enxergue. A lista de caminhos o lidos pelo Vim encontra-se na varivel runtimepath, que pode ser inspecionada a atravs de: e :set runtimepath E suciente ento copiar o dicionrio pt.<codifica~o>.spl para o subdireta a ca o rio spell/ em qualquer um dos caminhos listados atravs do comando mostrado. e

10.3

Comandos relativos ` vericao ortogra ca a ca


Encontrando palavras desconhecidas

10.3.1

Muito embora o vericador ortogrco cheque imediatamente cada palavra digia tada, sinalizando-a ao usurio caso no a reconhea, `s vezes mais apropriado a a c a e realizar a vericao ortogrca do documento por inteiro. O Vim dispe de ca a o comandos espec cos para busca e movimentao em palavras grafadas incorreca tamente (desconhecidas) no escopo do documento, dentre eles: ]s ..... vai para a prxima palavra desconhecida o [s ..... como o ]s, mas procura no sentido oposto Ambos os comandos aceitam um prexo numrico, que indica a quantidade e de movimentaes (buscas). Por exemplo, o comando 3]s vai para a terceira co palavra desconhecida a partir da posio atual. ca

10.3.2

Tratamento de palavras desconhecidas

H basicamente duas operaes poss a co veis no tratamento de uma palavra apontada pelo vericador ortogrco do Vim como desconhecida: a 1. corrigi-la identicando o erro com ou sem o aux das sugestes do lio o Vim. 2. cadastr-la no dicionrio ensinando o Vim a reconhecer sua graa. a a Assume-se nos comandos descritos nas sees a seguir que o cursor do editor co encontra-se sobre a palavra marcada como desconhecida.

10.3 Comandos relativos ` vericao ortogrca a ca a Correo de palavras grafadas incorretamente ca

75

E poss que na maioria das vezes o usurio perceba qual foi o erro cometido na vel a graa, de forma que o prprio possa corrigi-la sem aux externo. No entanto, o lio algumas vezes o erro no evidente, e sugestes fornecidas pelo Vim podem a e o ser bastante convenientes. Para listar as sugestes para a palavra em questo o a executa-se: z= ..... solicita sugest~es ao verificador ortogrfico o a Se alguma das sugestes vlida as mais provveis esto nas primeiras posies o e a a a co ento basta digitar seu prexo numrico e pressionar <Enter>. Se nenhuma a e sugesto for adequada, basta simplesmente pressionar <Enter> e ignorar a cora reo. ca Cadastramento de novas palavras no dicionrio a Por mais completo que um dicionrio seja, eventualmente palavras, especiala mente as de menor abrangncia, tero que ser cadastradas a m de aprimorar e a a exatido da vericao ortogrca. A manuteno do dicionrio d-se pelo a ca a ca a a cadastramento e retirada de palavras: zg ..... adiciona a palavra no dicionrio a zw ..... retira a palavra no dicionrio, marcando-a como a desconhecida

Cap tulo 11

Salvando Sesses de o Trabalho


Suponha a situao em que um usurio est trabalhando em um projeto no qual ca a a vrios arquivos so editados simultaneamente; quatro arquivos esto abertos, a a a algumas macros foram criadas e variveis que no constam no vimrc foram dea a nidas. Em uma situao normal, se o Vim for fechado a quase totalidade dessas ca informaes se perde1 ; para evitar isto uma sesso pode ser criada, gerando-se co a um retrato do estado atual, e ento restaurada futuramente pelo usuriona a a prtica como se o usurio no tivesse sa do editor. a e a a do Uma sesso do Vim guarda, portanto, uma srie de informaes sobre a edio a e co ca corrente, de modo a permitir que o usurio possa restaur-la quando desejar. a a Sesses so bastante uteis, por exemplo, para se alternar entre diferentes projeo a tos, carregando-se rapidamente os arquivos e denies relativas a cada projeto. co

11.1

O que uma sesso armazena? a

Uma sesso composta das seguintes informaes: a e co Mapeamentos globais Variveis globais a Arquivos abertos incluindo a lista de buers Diretrio corrente (:h curdir) o Posio e tamanho das janelas (o layout) ca
1 Algumas informaes, no entanto, so automaticamente armazenadas no arquivo viminfo; co a veja :h viminfo

11.2 Criando sesses o

77

11.2

Criando sesses o

Sesses so criadas atravs do comando :mksession: o a e :mks[ession] sessao.vim .... cria a sess~o e armazena-a em sessao.vim a :mks[ession]! sessao.vim ... salva a sess~o e sobrescreve-a em sessao.vim a

11.3

Restaurando sesses o

Aps gravar sesses, elas podem ser carregadas ao iniciar o Vim: o o vim -S sessao.vim ou ento de dentro do prprio Vim (no modo de comando): a o :so sessao.vim Aps restaurar a sesso, o nome da sesso corrente acess atravs de uma o a a e vel e varivel interna v:this_session; caso queira-se exibir na linha de comando a o nome da sesso ativa (incluindo o caminho), faz-se: a :echo v:this_session Podemos fazer mapeamentos para atualizar a sesso 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 poro a ca considervel de informaes. A diretiva viminfo pode ser usada para memorizar a co estas informaes. co Histrico da linha de comando o Histrico de buscas o Histrico de entradas input-line history o Contedo de registros no vazios u a Marcas de vrios arquivos a

78 Ultimo padro de busca/substituio a ca A lista de buers Variveis globais a

Salvando Sesses de Trabalho o

Deve-se colocar no arquivo de congurao algo como: ca set viminfo=%,50,\"100,/100,:100,n Algumas opes da diretiva viminfo: o ! Quando inclu salva e restaura variveis globais (variveis com letra maisdo a a u cula) e que no contm letras em minsculo como MANTENHAISTO. a e u Nmero mximo de linhas salvas para cada registro. u a % Quando inclu salva e restaura a lista de buers. Caso o Vim seja iniciado do com um nome como argumento, a lista de buers no restaurada. Buers a e sem nome e buers de ajuda no so armazenados no viminfo. a a Nmero mximo de arquivos recm editados. u a e / Mximo de itens do histrico de buscas. a o : Mximo de itens do histrico da linha de comando a o < Nmero mximo de linhas salvas por cada registro, se zero os registros no u a a sero salvos. Quando no inclu a a do, todas as linhas so salvas. a Para ver mais opes sobre o arquivo viminfo leia :h viminfo. Pode-se tamco bm usar um arquivo de Sesso. A diferena que viminfo no depende do e a c e a local de trabalho (escopo). Quando o arquivo viminfo existe e no est vazio, a a as informaes novas so combinadas com as existentes. A opo viminfo co a ca e uma string contendo informaes sobre o que deve ser armazenado, e contm co e limites de o quanto vai ser armazenado para cada item.

Cap tulo 12

Como Editar Preferncias e no Vim


O arquivo de preferncias do Vim nomeado vimrc, um arquivo oculto que e e normalmente encontra-se no diretrio de trabalho (home) do usurio: 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 no exista deve-se a cri-la), que ca 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

80 | +--doc | +--syntax | +--plugin

Como Editar Preferncias no Vim e

Os plugins, como se pode deduzir, devem ser colocados no diretrio denominado o plugin.  Na seo Plugins 15 (p. 106) esto descritos alguns plugins para o ca a Vim.

12.2

Comentrios a

Comentrios so linhas que so ignoradas pelo interpretador Vim e servem nora a a malmente para descrio de comandos e aes, deixando portanto mais leg e ca co vel didtico o arquivo de congurao. Uma linha um comentrio se seu primeiro a ca e a caractere uma aspa ": e " linhas comeadas com aspas s~o comentrios c a a " e portanto ser~o ignoradas pelo Vim a Recomenda-se usar comentrios ao adicionar ou modicar comandos no arquivo a vimrc, pois assim torna-se mais fcil futuras leituras e modicaes neste ara co quivo.

12.3

Efetivao das alteraoes no vimrc ca c

As alteraes no vimrc s sero efetivadas na prxima vez que o Vim for aberto, co o a o a no ser que o recarregamento do arquivo de congurao 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, responsveis por atribuir valores ` variveis, podem ser coa a a locados no .vimrc: set nu ou digitados como comandos: :set nu

12.4 Set set set set set set set set number ............... nu ................... showmode ............. showcmd .............. tabstop=4 ............ ts=4 ................. shiftwidth=4 .........

81

"mostra numera~o de linhas ca "simplifica~o de number ca "mostra o modo em que estamos "mostra no status os comandos inseridos "tamanho das tabula~es co "simplifica~o de tabstop ca "quantidade de espaos de uma c tabula~o 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 diretrio 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 maisculas e minsculas nas u u buscas set ic ................... "simplifica~o de ignorecase ca set smartcase ............ "numa busca em maisculo habilita u case set scs .................. "sin^nimo de smartcase o set backup ............... "habilita a cria~o de arquivos de ca backup set bk ................... "simplifica~o de backup ca set backupext=.backup .... "especifica a extens~o do arquivo de a backup set bex=.backup .......... "simplifica~o de backupext ca set backupdir=~/.backup,./ "diretrio(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 ca linha atual) 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 contedo de folders e u sugest~es spell o set viminfo=%,50,\"100,/100,:100,n "armazena op~es (buffers) co

 Se ao iniciar o vim obtivermos mensagens de erros e houver dvida se o erro u no vim ou em sua congurao, pode-se inicia-lo sem que o mesmo carregue e ca o arquivo .vimrc.
:vim -u NONE

82

Como Editar Preferncias no Vim e

12.5

Ajustando pargrafos em modo normal a

O comando gqap ajusta o pargrafo atual em modo normal.  usando a a opo :set nojoinspaces o vim colocar dois espaos aps o ponto nal ao ca a c o se ajustar os pargrafos. a geralmente usamos ^I para representar uma tabulao <Tab>, e $ para inca dicar o m de linha. Mas poss customizar essas opes. sintaxe: e vel co

set listchars=key:string,key:string - eol:{char} Define o caracter a ser posto depois do fim da linha - tab:{char1}{char2} O tab mostrado pelo primeiro caracter {char1} e e seguido por {char2} - trail:{char} Esse caracter representa os espaos em branco. c - extends:{char} Esse caracter representa o incio 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.6

Exibindo caracteres invis veis

:set list

12.7 Denindo registros previamente

83

12.7

Denindo registros previamente

Denindo uma macro de nome s para ordenar e retirar linhas duplicadas let @s=":sort u" Para executar o registro s denido acima faa: c @s O Vim colocar no comando a :sort -u Bastando pressionar <Enter>. Observao: Este registro prvio pode car no ca e vimrc ou ser digitado em comando : :5,20sort u "da linha 5 at a linha 20 ordene e retire duplicados e :sort n " ordene meu documento considerando nmeros u " isto til pois se a primeira coluna contiver e u " nmeros a ordena~o pode ficar errada caso n~o usemos u ca a " o par^metro n a

12.8

Mapeamentos
:h key-mapping, mapping, index

Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende da criatividade do usurio e do quanto conhece o Vim, com eles podemos cona trolar aes com quaisquer teclas, mas antes temos que saber que para criar co mapeamentos, precisamos conhecer a maneira de representar as teclas e combinaes. Alguns exemplos: co tecla ....... <c-x> ....... <left> ...... <right> ..... <c-m-a> ..... <cr> ........ <Esc> ....... <leader> .... <bar> ....... <cword> ..... tecla mapeada Ctrl-x seta para a esquerda seta para a direita Ctrl-Alt-a Enter Escape normalmente \ | pipe palavra sob o cursor

84 <cfile> ..... <cfile> ..... <sfile> ..... <left> ...... <up> ........ <m-f4> ...... <c-f> ....... <bs> ........ <space> ..... <tab> .......

Como Editar Preferncias no Vim e arquivo sob o cursor arquivo sob o cursor sem extens~o a contedo 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 espao c tab

No Vim podemos mapear uma tecla para o modo normal, realizando determinada operao e a mesma tecla pode desempenhar outra funo qualquer em ca ca modo de insero 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 diferena nos mapeamentos acima que o mapeamento para modo de c e insero comea com i, assim como para o modo comando : comea com ca c c c no caso cmap.  O comando :echo pode ser abreviado assim: :ec.

12.8.1

Recarregando o arquivo de congurao ca

Cada alterao no arquivo de congurao do Vim s ter efeito na prxima 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 alteraes passam a valer co instantaneamente, e para chamar o vimrc basta usar. ,v Os mapeamentos abaixo so uteis para quem escreve cdigos 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.

12.8 Mapeamentos inoremap inoremap inoremap inoremap \&amp; &amp;amp; \&lt; &amp;lt; \&gt; &amp;gt; \. &amp;middot;

85

O termo inoremap signica: em modo de insero no remapear, ou seja ele ca a mapeia o atalho e no permite que o mesmo seja remapeado, e o mapeamento a s funciona em modo de insero, isso signica que um atalho pode ser mapeado o ca para diferentes modos de operao. ca Veja este outro mapeamento: map <F11> <Esc>:set nu!<cr> Permite habilitar ou desabilitar nmeros de linha do arquivo corrente. A exclau mao ao nal torna o comando booleano, ou seja, se a numerao estiver ativa ca ca ser desabilitada, caso contrrio ser ativada. O <cr> ao nal representa um a a a Enter.

12.8.2

Limpando o registro de buscas

A cada busca, se a opo hls1 estiver habilitada o Vim faz um destaque coca lorido, para desabilitar esta opo pode-se criar um mapeamento qualquer, no ca caso abaixo usando a combinao de teclas <S-F11>. ca nno <S-F11> <Esc>:let @/=""<CR> E um mapeamento para o modo normal que faz com que a combinao de teclas ca Shift-F11 limpe o registro de buscas

12.8.3

Destacar palavra sob o cursor

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

12.8.4

Contar ocorrncias de uma palavra e

" contagem de ocorr^ncias de uma palavra (case insensitive) e " busca somente ocorr^ncias exatas e nmap <F4> <esc>mz:%s/\c\<\(<c-r>=expand("<cword>")<cr>\)\>//gn<cr>z " busca parcial, ou seja acha palavra como parte de outra nmap <s-F4> <esc>mz:%s/\c\(<c-r>=expand("<cword>")<cr>\)//gn<cr>z
1 hls

uma abreviao de hightlight search e ca

86

Como Editar Preferncias no Vim e

12.8.5

Remover linhas em branco duplicadas

map ,d <Esc>:%s/\(^\n\{2,}\)/\r/g<cr> No mapeamento acima estamos associando o atalho: ,d . . . ` ao desejada, fazer com que linhas em branco sucessivas sejam substitu a ca das por uma s linha em branco, vejamos como funciona: o map ......... ,d .......... <Esc> ....... : ........... % ........... s ........... \n .......... {2,} ........ \r .......... g ........... <cr> ........ mapear atalho que quermos se estive em modo de inser~o sai ca em modo de comando em todo o arquivo substitua quebra de linha duas ou mais vezes trocado por \r Enter globalmente confirma~o do comando ca

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

12.8.6

Mapeamento para Calcular Expresses o

Os mapeamentos abaixo exibem o resultado das quatro operaes bsicas (soma, co a subtrao, multiplicao e diviso). O primeiro para o modo normal no qual ca ca a posiciona-se o cursor no primeiro caractere da expresso tipo 5*9 e em seguida a pressiona-se Shift-F1, o segundo para o modo insert em que, aps digitada a o expresso 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 clculos com maior preciso e tambm resolver problemas como a a e potncias ra e zes, logaritmos pode-se mapear comandos externos, como a biblioteca matemtica da linguagem de programao Python. Neste link [10] h um a ca a manual que ensina a realizar este procedimento, ou acesse o cap tulo 2.16 na pgina 17. a

12.9 Autocomandos

87

12.8.7

Mapeamentos globais

Podemos fazer mapeamentos globais ou que funcionam em apenas um modo: map - funciona em qualquer modo nmap - apenas no modo Normal imap - apenas no modo de Inser~o ca Mover linhas com Ctrl- ou Ctrl-: " tem que estar em modo normal! nmap <C-Down> ddp nmap <C-Up> ddkP Salvando com uma tecla de funo: ca " salva com F9 nmap <F9> :w<cr> " F10 - sai do Vim nmap <F10> <Esc>:q<cr>

12.8.8

Convertendo as iniciais de um documento para mai su culas

" MinusculasMaiusculas: converte a primeira letra de cada " frase para MAISCULAS 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.9

Autocomandos
:h autocmd.txt

Autocomandos habilitam comandos automticos para situaes espec a co cas. Para executar determinada ao ao iniciar um novo arquivo o autocomando dever ca a obedecer este padro: a au BufNewFile tipo a~o ca Veja um exemplo: au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim

88

Como Editar Preferncias no Vim e

No exemplo acima o Vim aplica autocomandos para arquivos novosBufNewfile ou existentes BufRead terminados em txt, e para estes tipos carrega um arquivo de syntax, ou seja, um esquema de cores espec co. " 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 cabealho para scripts bash caso a linha 1 c esteja vazia, observe que os arquivos em questo tem que ter a extenso .sh. a a au BufNewFile,BufRead *.sh if getline(1) == "" | normal ,sh

 Para congurar o vim de modo que o diretrio corrente que no path coloque o este cdigo no vimrc. o
"fonte: wikia - wiki sobre o vim if exists(+autochdir) set autochdir else autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ / endif

12.9.1

Exemplos prticos de autocomandos a


:h expandtab, retab

Detectando indentao fora do padro ca a H situaes em que necessria a uniformizao de aes, por exemplo, em a co e a ca co cdigos Python deve-se manter um padro para a indentao, ou ser com eso a ca a paos ou ser com tabulaes, no se pode misturar os dois pois o interpretador c a co a retornaria um erro. Outra situao em que misturar espaos com tabulaes ca c co A ocasiona erros em cdigos L TEX, ao compilar o documento a formatao no e o ca a sai como desejado. At que se perceba o erro leva um tempo. Para congurar 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 comeo de linha c tabula~o ca uma vez ou mais fim do padr~o de buscas a

12.10 Funes co

89

Para evitar que este erro se repita, ou seja, que sejam adicionados no comeo c de linha espaos no lugar de tabulaes adiciona-se ao /.vimrc c co set expandtab E perfeitamente poss vel um autocomando que faa direto a substituio de c ca tabulaes por espaos, mas neste caso no recomendado que o autocomando co c a e se aplique a todos os tipos de aquivos. Inserindo automaticamente modelos de documento Pode-se criar um autocomando para inserir um modelo de documento html por exemplo de forma automtica, ou seja, se voc criar um novo documento do a e tipo html o vim colocar em seu contedo um modelo pre-denido. a u au BufNewFile *.html 0r ~/.vim/skel/skel.html

12.10
12.10.1

Funes co
Fechamento automtico de parnteses a e

" -------------------------------------" Ativa fechamento automtico 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) 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

90

Como Editar Preferncias no Vim e " Fechamento automtico 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.10.2

Funo 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 cdigo no funcione acesse este link [11]. o a

12.10.3

Rolar outra janela

Se voc dividir janelas tipo e Ctrl-w n pode colocar esta funo no seu .vimrc ca " rola janela alternativa fun! ScrollOtherWindow(dir) if a:dir == n let move = > elseif a:dir == p let move = > endif exec p . move . p endfun nmap <silent> <M-Down> :call ScrollOtherWindow(n)<CR> nmap <silent> <M-Up> :call ScrollOtherWindow(p)<CR> Esta funo acionada com o atalho Alt- e Alt-. ca e

12.10.4

Funo para numerar linhas ca

No site wikia h um cdigo de funo para numerar linhas [12] a o ca

12.10 Funes co

91

12.10.5

Funo 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 neste link [13].

12.10.6

Uma funo para inserir cabealho de script ca c

para chamar a funo basta pressionar ,sh em modo normal ca " Cria um cabealho para scripts bash c fun! InsertHeadBash() normal(1G) :set ft=bash :set ts=4 call append(0, h) call append(1, : . strftime("%a %d/%b/%Y hs %H:%M")) call append(2, "# ultima modifica~o:(%a %d/%b/%Y hs %H:%M")) ca call append(3, "# NOME DA SUA EMPRESA") call append(3, "# Propsito do script") o normal($) endfun map ,sh :call InsertHeadBash()<cr>

12.10.7

Funo para inserir cabealhos Python ca c

" fun~o para inserir cabealhos Python ca c

92

Como Editar Preferncias no Vim e 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 " Prprio 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>

12.10.8

Funo para pular para uma linha ca

"ir para linha " ir para uma linha especfica function! GoToLine() let ln = inputdialog("ir para a linha...") exe : . ln endfunction "no meu caso o mapeamento com Ctrl-l e "use o que melhor lhe convier imap <S-l> <C-o>:call GoToLine()<CR> nmap <S-l> :call GoToLine()<CR>

12.11 Como adicionar o Python ao path do Vim?

93

12.10.9

Funo para gerar backup ca

A funo abaixo util para ser usada quando voc vai editar um arquivo gerando ca e e modicaes signicativas, assim voc poder restaurar o backup se necessrio 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 dvida :help e u <leader>. 12.11 Como adicionar o Python ao path do Vim?

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

12.12

Criando um menu

Como no Vim podemos ter innitos comandos ca 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:

94

Como Editar Preferncias no Vim e amenu ........................ cria um menu Ferramentas.ExibirNomeDoTema . Menu plugin submenu ExibirNomeDoTema :echo g:colors_name<cr> ...... exibe o nome do tema atual

Caso haja espaos no nome a denir voc pode fazer assim c e amenu Ferramentas.Exibir\ nome\ do\ tema :echo g:colors_name<cr>

12.13

Criando menus para um modo espec co


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

Exemplo de menu

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

 O comando :update Atualiza o menu recm modicado. Quando o coe mando :amenu E usado sem nenhum argumento o Vim mostra os menus denidos atualmente. Para listar todas as opes de menu para Plugin por co exemplo digita-se no modo de comandos :amenu Plugin.
Ocultando as barras de ferramentas e menu :set guioptions-=m :set guioptions-=T ........ oculta menus ........ oculta icones

obs: para exibir novamente repita o comando substituindo o sinal de menos por mais.

12.15 Outros mapeamentos

95

12.15

Outros mapeamentos

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

Portanto a expresso regular acima localizar espaos ou tabulaes no nal de a a c co linha e destacar em vermelho. a "Remove espaos 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 no fosse feito isto o cursor iria car na linha da ultima substituio! a ca "Abre o vim explorer map <F6> <Esc>:vne .<cr><bar>:vertical resize -30<cr><bar>:set nonu<cr> Podemos usar Expresses 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 pgina 42. a
2 http://guia-er.sourceforge.net

96

Como Editar Preferncias no Vim e

12.16

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

Abreviaoes c

Abreviaes habilitam auto-texto para o Vim. O seu funcionamento consiste de co trs campos, o primeiro o modo no qual a abreviao funcionar, o segundo e e ca a a palavra que ir disparar a abreviao e o terceiro campo a abreviao 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 abreviao ao ~/.vimrc. ca cab salvar w<cr> "<cr> corresponde ao <Enter> Abaixo abreviaes para o modo de insero: co ca iab slas Srgio Luiz Arajo Silva e u iab Linux GNU/Linux iab linux GNU/Linux

12.18

Evitando arquivos de backup no disco

Nota-se em algumas situaes que existem alguns arquivos com o mesmo nome co dos arquivos que foram editados, porm com um til () no nal. Esses arquivos e

12.19 Mantendo apenas um Gvim aberto

97

so backups que o Vim gera antes de sobrescrever os arquivos, e podem desde a ocupar espao signicativo no disco r c gido at representar falha de segurana, e c como por exemplo arquivos .php~ que no so interpretados pelo servidor web a a e expem o cdigo-fonte. o o Para que os backups sejam feitos enquanto os arquivos estejam sendo escritos, porm no mantidos aps terminar a escrita, utiliza-se no .vimrc: e a o set nobackup set writebackup Fonte: Site do Eustquio Rangel [15]. a

12.19

Mantendo apenas um Gvim aberto

Essa dica destina-se apenas ` verso do Vim que roda no ambiente grco, 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 denir um script que esteja no seu path3 do sistema (e que possa ser executado de alguma forma por programas do tipo launcher no modo grco) 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 porm pode ser nomeado com o nome que for conveniente. e A unica necessidade para essa dica funcionar a verso do Vim ter suporte para e a o argumento -serverlist, o que deve ser garantido nas verses presentes na o poca em que esse documento foi escrito. Para fazer uma simples vericao 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 no poder a a ser implementado. Do contrrio, deve-se utilizar o comando que teve um retorno a vlido (vim ou gvim) para criar o script. Supondo que foi o comando gvim que a no 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
3 Diretrios o

nos quais o sistema busca pelos comandos

98

Como Editar Preferncias no Vim e

Desse modo, se for digitado tvim sem qualquer argumento, exibida a mensagem e de erro, do contrrio, o arquivo aberto na cpia corrente do Gvim, em uma a e o nova aba, por exemplo: tvim .vimrc Fonte: Site do Eustquio Rangel [16] a

12.20

Referncias e

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

Cap tulo 13

Um Wiki para o Vim


E inegvel a facilidade que um Wiki nos traz, os documentos so indexados e a a linkados de forma simples. J pesquisei uma poro de Wikis e, para uso pesa ca soal recomendo o Potwiki. O link do Potwiki este [17]. O Potwiki um e e Wiki completo para o Vim, funciona localmente embora possa ser aberto remotamente via ssh1 . Para criar um link no Potwiki basta usar WikiNames, so a nomes iniciados com letra maiscula e que contenham outra letra em maisculo u u no meio. Ao baixar o arquivo salve em ~/.vim/plugin. Mais ou menos na linha 53 do Potwiki ~/.vim/plugin/potwiki.vim voc dene e onde ele guardar os arquivos, no meu caso /home/docs/textos/wiki. a linha a cou assim: call s:default(home,"~/.wiki/HomePage") Outra forma de indicar a pgina 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 maisculo e que tenham outra letra em maisculo no meio (sem espaos). 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

100 \wf .... \we .... \\ .... <CR> .... <Tab>.... <BS> .... \wr ....

Um Wiki para o Vim 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 prxima WikiWords o move para os WikiWords anteriores (mesma pgina) a recarrega WikiWords

13.2

Salvamento automtico para o Wiki a

Procure por uma seo autowrite no manual do Potwiki ca :help potwiki O valor que est em zero dever car em 1 a a call s:default(autowrite,0)

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

13.3

Problemas com codicao 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 caram meio estranhos, da z: baixei o pacote [recode] # apt-get install recode para recodicar caracteres de utf-8 para iso faa: c recode -d u8..l1 arquivo

Cap tulo 14

Hbitos para Edio Efetiva a ca


Um dos grandes problemas relacionados com os softwares sua subutilizao. e ca Por inrcia o usurio tende a aprender o m e a nimo para a utilizao 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 hbitos para edio efetiva de textos2 , este cap a ca tulo pretende resumir alguns conceitos mostrados por Bram Moolenaar em seu artigo.

14.1

Mova-se rapidamente no texto

O cap tulo 3, Movendo-se no Documento, pgina 24 mostra uma srie de a e comandos para agilizar a navegao no texto. Memorizando estes comandos ca ganha-se tempo considervel, um exemplo simples em que o usurio est na a a a linha 345 de um arquivo decide ver o contedo 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 navegao rpida um dos requisitos para edio ca a e ca efetiva de documentos.

14.2

Use marcas

veja a seo 3.2 na pgina 29. ca a ma ..... a ..... da .... ya .... 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

102 gg ... G .... 0 .... $ .... fx ... dfx .. g, ... g; ... p .... P .... H .... M .... L ....

Hbitos para Edio Efetiva a ca vai para a linha 1 do arquivo vai para a ltima linha do arquivo u vai para o incio da linha vai para o fim da linha pula at a prxima ocorr^ncia de x e o e deleta at a prxima ocorr^ncia de x e o e avana 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

* ........ 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 prxima ocorrncia o e n Um jeito mais fcil seria: a "coloque a linha abaixo no seu vimrc :set hlsearch Agora use asterisco para destacar todas as ocorrncias do padro desejado e use e a a letra n para pular entre ocorrncias, caso deseje seguir o caminho inverso use e N.

14.3

Use quanticadores

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

14.4 Edite vrios arquivos de uma s vez a o

103

14.4

Edite vrios arquivos de uma s vez a o

O Vim pode abrir vrios arquivos que contenham um determinado padro. Um a a exemplo seria abrir dezenas de arquivos HTML e trocar a ocorrncia bgcolor="ffffff" e Para bgcolor="eeeeee" Usar amos a seguinte sequncia de comandos: e vim *.html .............................. abre os arquivos :bufdo :%s/bgcolor=ffffff/bgcolor=eeeeee/g substitui~o ca :wall .................................... salva todos :qa[ll] .................................... fecha todos Ainda com relao ` edio de vrios arquivos poder ca a ca a amos abrir alguns arquivos txt e mudar de um para o outro assim: :wn O w signica gravar e o n signica next, ou seja, gravar amos o que foi modicado no arquivo atual e mudar amos para o prximo. o

 Veja tambm Movendo-se no documento, cap 3 pgina 24 e tulo a 14.5 No digite duas vezes a

O Vim complementa com tab. Veja mais na seo 12.16 na pgina 96. ca a Use macros. Detalhes na seo 8.3 pgina 62. ca a Use abreviaes coloque abreviaes como abaixo em seu ~/.vimrc. Veja co co mais na seo 12.17. ca As abreviaes fazem o mesmo que auto-correo e auto-texto em outros co ca editores iab tambem tambm e iab linux GNU/Linux No modo de insero 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 contedo em um registrador: u "ayy ... copia a linha atual para o registrador a "ap ... cola o registrador a Crie abreviaes para erros comuns no seu arquivo de congurao ( /.vimrc): co ca

104 iabbrev teh the syntax keyword WordError teh

Hbitos para Edio Efetiva a ca

As linhas acima criam uma abreviao para erro de digitao 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 no esto sendo utilizadas permitindo a a uma melhor visualizao do contedo. Mais detalhes no cap ca u tulo 4 pgina 30. a

14.7

Use autocomandos
:h autocmd.txt

No arquivo de congurao do Vim ~/.vimrc pode-se pode criar comandos ca automticos que sero executados diante de uma determinada circunstncia. 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 congurao do Vim exclusivo para o tipo html/htm e ca no caso de arquivos novos BufNewFile ele j cria um esqueleto puxando do a endereo 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 aps o corpo <body> o au BufNewFile,BufRead *.html,*.shtml,*.htm set noautoindent augroup end

14.8

Use o File Explorer

O Vim pode navegar em pastas assim:

14.9 Torne as boas prticas um hbito a a vim .

105

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

14.9

Torne as boas prticas um hbito a a

Para cada prtica produtiva procure adquirir um hbito e mantenha-se atento a a ao que pode ser melhorado. Imagine tarefas complexas, procure um meio melhor de fazer e torne um hbito. a

14.10

Referncias e

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

Cap tulo 15

Plugins
Plugins1 so 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 navegao e lio ca em arquivos com o caso do plugin NerdTree [18], que divide uma janela que e permite navegar pelos diretrios do sistema a m de abrir arquivos a serem o editados.

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 tambm funciona para temas de cor! e No GNU/Linux ~/.vim/plugin/ No Windows ~/vimfiles/plugin/ Obs: Caso ainda no exista o diretrio, ele pode ser criado pelo prprio usurio a o o a Exemplo no GNU/Linux + /home/usuario/ | | + .vim | | + plugin
1 Plugins

so recursos que se adicionam aos programas a

15.2 Atualizando a documentao dos plugins ca

107

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

15.2

Atualizando a documentao dos plugins ca


:h helptags

Caso seja adicionado algum arquivo de documentao em ~/.vim/doc pode-se ca gerar novamente as tags links para navegao de ajuda. ca :helptags $VIMRUNTIME/doc :helptags ~/.vim/doc

15.3

A Plugin para LTEX

A Um plugin completo para L TEXest acess aqui [19]. Uma vez adicionado o a vel plugin voc pode inserir seus templates em: e

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

15.4

A Criando folders para arquivos LTEX

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


A Adicionar marcadores (labels) `s sees 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 comeo 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

108

Plugins A Criando seoes LTEX c

15.5

o comando abaixo substitui ==se~o== ca por \section{se~o} ca :.s/^==\s\?\([^=]*\)\s\?==/\\section{\1}/g : ......... . ......... s ......... ^ ......... == ........ \s\? ...... [^=] ...... * ......... \s\? ...... \\ ........ \1 ........ comando linha atual substitua comeo de linha c dois sinais de igual seguido ou n~o de espao 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 espao a c insere uma barra invertida repete o primeiro trecho entre ()

15.6

Plugin para manipular arquivos

Acesse o plugin neste link [20]. Para entender este plugin acesse um v deo neste link [21].

15.7

Complementao de cdigos ca o

O plugin snippetsEmu um misto entre complementao de cdigos e os chae ca o mados modelos ou templates. Insere um trecho de cdigo pronto, mas vai alm o e disso, permitindo saltar para trechos do modelo inserido atravs de um atalho e congurvel de modo a agilizar o trabalho do programador. Link para baia xar [22].

15.7.1

Instalao ca

Um artigo ensinando como instalar o plugin snippetsEmu pode ser lido nesse artigo na internet [23]. Outro plugin muito interessante para complementao ca o autocompletepopup que complementa mostrando um popup durante a e digitao, o mesmo pode ser obtido neste link [24], em seguida coloca-se esta ca linha ao vimrc: let g:AutoComplPop_CompleteoptPreview = 1

15.8 Um wiki para o Vim

109

A linha acima faz com que o vim abra uma janela pequena com a documentao ca de cada mtodo que est sendo digitado. e a

15.8

Um wiki para o Vim

O plugin wikipot implementa um wiki para o Vim no qual voc dene um e link com a notao WikiWord, onde um link uma palavra que comea com ca e c uma letra maiscula e tem outra letra maiscula no meio Obtendo o plugin u u neste link [17].

15.9

Acessando documentao do Python no Vim ca

Obtenha um plugin para esta tarefa em seu site ocial [25].

15.10

Formatando textos planos com syntax

Um plugin que adiciona syntaxe colorida a textos planos pode ser obtido neste link [26]. Veja como instalar o este plugin no cap tulo 15.8.

15.11

Movimentando em camel case

O plugin CamelCaseMotion [27] auxilia a navegao em palavras em camel ca case [28] ou separadas por sublinhados, atravs de mapeamentos similares aos e que fazem a movimentao normal entre strings, e um recurso de grande ajuda ca e quando o editor utilizado para programao. e ca Aps instalado o plugin, os seguintes atalhos cam dispon o veis: ,w Movimenta para a prxima posio camel dentro da string o ca ,b Movimenta para a posio camel anterior dentro da string ca ,e Movimenta para o caractere anterior ` prxima posio camel dentro da a o ca string Fonte: Blog do Eustquio Rangel [29] a

15.12

Plugin FuzzyFinder

Este plugin a implementao de um recurso do editor Texmate2 . Sua proposta e ca acessar de forma rpida: e a 1. Arquivos :FuzzyFinderFile
2 Editor

de textos da Apple com muitos recursos

110 2. Arquivos recm editados :FuzzyFinderMruFile e 3. Comandos recm utilizados :FuzzyFinderMruCmd e

Plugins

4. Favoritos :FuzzyFinderAddBookmark, :FuzzyFinderBookmarks 5. Navegao por diretrios :FuzzyFinderDir ca o 6. Tags :FuzzyFinderTag Para ver o plugin em ao acesse este video para obte-lo acesse este endereo, ca c para instal-lo basta copiar para o diretrio /.vim/plugin. a o

15.13

O plugin EasyGrep

Usurios de sistemas Unix Like3 , j conhecem o poder do comando grep, usando a a este comando procuramos palavras dentro de arquivos, este plugin simplica esta tarefa, alm de permitir a utilizao da verso do grep nativa do Vim vimgrep, e ca a assim usurios do Windows tambm 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 ca assim: :Grep foo ........ procura pela palavra foo :GrepOptions ...... exibe as op~es de uso do plugin co O plugin pode ser obtido no seguinte endereo, j sua instalao simples, basta c a ca e copiar o arquivo obtido no link acima para a pasta: ~/.vim/plugin .......... no caso do linux ~/vimfiles/plugin ...... no caso do windows Um v deo de exemplo (na verdade uma animao gif) pode ser visto aqui. ca

15.14

O plugin SearchComplete

Para que o vim complete opes 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 /mercadolgico o
3 Sistemas

da fam Unix tipo o GNU/Linux lia

15.15 O plugin AutoComplete

111

Cada vez que se pressiona a tecla <tab> o cursor saltar para a prxima ocora o rncia daquele fragmento de palavra. Pode-se obter o plugin SearchComplete e no seguinte endereo, e para instal-lo basta copi-lo para a pasta apropriada: c a a ~/vimfiles/plugin .......... no windows ~/.vim/plugin .............. no Gnu/Linux H outro plugin similar chamado CmdlineComplete dispon neste link. a vel

15.15

O plugin AutoComplete

Este plugin trabalha exibindo sugestes no modo de insero, ` medida que o o ca a usurio digita aparece um popup com sugestes para poss a o veis complementos, bastando pressionar <Enter> para aceitar as sugestes. Neste link, voc pode o e fazer o download do plugin.

15.16

O plugin Ctags

Ctags em si um programa externo que indexa arquivos de cdigo fonte. Ele e o l o cdigo fonte em busca de identicadores, declaraes de funo, variveis, e o co ca a e constri seu o ndex de referncias cruzadas. Mas vamos ao plugin, mesmo por e que no estamos no CtagsBook. a Primeiro precisamos ter o arquivos de tags. Para tal, usamos o comando: ctags -R <arquivos> Normalmente o parmetro <arquivos> pode ser uma expresso regular do tipo a a *.[ch] e ans. Depois de obter o arquivo de tags, voc j pode sair usando os e a atalhos do plugin para navegar pelo cdigo fonte. Com o cursor em cima de um o identicador, usando o atalho ctrl+] o cursor pula diretamente para a sua declarao. O atalho ctrl+o volta o cursor para a posio inicial. ca ca

 Quando navegando por um cdigo fonte muito extenso com vrios direto a o
rios, mapear o caminho dos arquivos usando o caminho absoluto deles no seu e diretrio de trabalho deste jeito: o find $(pwd) -regex ".*py$" | xargs ctags Assim voc pode copiar o arquivo de tags para todos os diretrios e mesmo e o assim conseguir usar os atalhos do plugin para navegar no cdigo fonte. o Pode-se obter o programa Ctags neste link. O plugin de Ctags para o Vim est a neste link, e para instal-lo basta copi-lo para a pasta apropriada: a a ~/vimfiles/plugin .......... no windows ~/.vim/plugin .............. no Gnu/Linux

112

Plugins

15.17

O Plugin Project

O plugin project acess atravs deste link cria toda uma estrutura de gerenvel e ciamento de projetos, para programadores uma funcionalidade extremamente e necessria, costuma-se trabalhar com vrios arquivos da mesma fam extena a lia so, e ao clicar em um dos arquivos do projeto o mesmo aberto instantaneaa e mente. :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 Aps digitar o atalho de criao do projeto aparecer uma janela para designar o ca a um nome para o mesmo, em seguida digita-se o caminho para o diretrio do o projeto, aps isto digita-se . (ponto) como parmetro, cria-se um ltro 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 denir um projeto manualmente assim: nome=~/docs/ CD=. filter="*.txt" { } Ao recarregar o Vim pode-se abrir o Plugin :Projetc e pressionar o atalho \r para que o mesmo gere um ndice dos arquivos contidos no caminho indicado.

15.18

O plugin pydiction

Um que completa cdigos python assim: o import sys sys.<tab> O plugin contm dois arquivos: e 1. pydiction.py deve ser colocado no path 2. pydiction deve ser colocado em um lugar de sua preferncia e Deve-se adicionar algumas linhas do .vimrc. No exemplo abaixo o dicionrio a e adicionado ao diretrio /.vim/dict o if has("autocmd") autocmd FileType python set complete+=k/.vim/dict/pydiction isk+=.,( endif " has("autocmd") Pode-se obter o plugin neste link.

15.19 O plugin FindMate

113

15.19

O plugin FindMate

Um plugin que agiliza a busca por arquivos na pasta pessoal, dispon neste vel link. Basta coloca-lo na pasta /home/usuario/.vim/plugins/ e digitar duas vezes v rgula e ele substituir para: a :FindMate Digita-se ento uma palavra e <Enter> para se obter a lista de arquivos que a correspondem ao padro. a

15.20

Atualizando a documentao dos plugins ca


:h helptags

Caso seja adicionado algum arquivo de documentao em em ~/.vim/doc ca pode-se gerar novamente as tags links para navegao de ajuda. ca :helptags ~/.vim/doc

Cap tulo 16

Referncias e
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=2914 VIM avanado (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

Bibliograa
[1] UNKNOWN, PC: MS-DOS and MS-Windows, 19/05/2009, http://www.vim.org/download.php. 2009, acessado

[2] SILVA, S. L. A., Using expression register in Vim, 2009, acessado 14/05/2009, http://vimeo.com/2967392. [3] JARGAS, A. M., Expresses Regulares - Guia de Consulta Rpida. 2001, o a acessado em 14/05/2009, http://guia-er.sourceforge.net/. [4] ANGELO, O. H. E., Mudana em vrias linhas, 2007, acesc a sado em 14/05/2009, http://tech.groups.yahoo.com/group/vi-br/ message/853. [5] CHARLES CAMPBELL, Produce increasing/decreasing columns of numbers, dates, or daynames, 2006, Acessado no dia 19 de agosto de 2009, http://vim.sourceforge.net/scripts/script.php?script_id=670. [6] ALMEIDA, R. Q. D., Juno de linhas com vim, 2008, acessado em ca 14/05/2009, http://www.dicas-l.com.br/dicas-l/20081228.php. [7] LAKSHMANAN, Y., Vim documentation: vim faq, 2005, acessado 17/05/2009, http://vimdoc.sourceforge.net/htmldoc/vimfaq.html. [8] WIKIPEDIA, Acordo Ortogrco de 1990, 2009, acessado em a 21/07/2009, http://pt.wikipedia.org/wiki/Acordo_Ortogr%C3% A1fico_de_1990. [9] MOURA, R. S., Dicionrios do Broce.org, 2009, acessado 14/05/2009, a http://www.broffice.org/verortografico/baixar. [10] ANONYMOUS, Scientic calculator, 2006, acessado 14/05/2009, http: //vim.wikia.com/wiki/Scientific_calculator. [11] BOUNGA, Writing a valid statusline, 2004, acessado 14/05/2009, http: //vim.wikia.com/wiki/Writing_a_valid_statusline. [12] MEDLEY, B., Number a group of lines, 2001, acessado 14/05/2009, http://vim.wikia.com/wiki/Number_a_group_of_lines. [13] UNKNOWN, Gvim colorscheme screenshot, 2009, acessado 14/05/2009, http://nanasi.jp/old/colorscheme_0.html.

116

Referncias Bibliogrcas e a

[14] LEGNER, Automatically add Python paths to Vim path, 2008, acessado em 14/05/2009, http://vim.wikia.com/wiki/Automatically_add_ Python_paths_to_Vim_path. [15] RANGEL, E., Backups do Vim, 2008, acessado 14/05/2009, http:// eustaquiorangel.com/posts/520. [16] RANGEL, E., Instncia solitria do Vim, 2007, acessado 14/05/2009, a a http://eustaquiorangel.com/posts/477. [17] STEINER, E., potwiki.vim : Maintain a Wiki of plain text les, 2008, acessado 14/05/2009, http://www.vim.org/scripts/script.php? script_id=1018. [18] GRENFELL, M., The NERD tree : A tree explorer plugin for navigating the lesystem, 2009, acessado 14/05/2009, http://www.vim.org/ scripts/script.php?script_id=1658. [19] UNKNOWN, Plugin para latex, vim-latex.sourceforge.net/. acessado 14/05/2009, http://

[20] NATSUNO, K., ku : An interface for anything, 2009, acessado 14/05/2009, http://www.vim.org/scripts/script.php?script_ id=2337#0.1.9. [21] UNKNOWN, Video about ku le, 2009, acessado 14/05/2009, http://www.screencast.com/users/kana/folders/Jing/media/ 278e3c04-864f-4dcb-bb7e-8db0fdd2e383. [22] INGRAM, F., snippetsEmu : An attempt to emulate TextMates snippet expansion, 2008, acessado 14/05/2009, http://www.vim.org/scripts/ script.php?script_id=1318. [23] SILVA, S. L. A., Instalando o plugin snippetsEmu no vim, 2008, acesso em 13/05/2009, http://vivaotux.blogspot.com/2008/03/ instalando-o-plugin-snippetsemu-no-vim.html. [24] NISHIDA, T., Plugin para complementao automtica com popup, ca a 2009, acesso em 14/05/2009, http://www.vim.org/scripts/script.php? script_id=1879. [25] KELPE, A., pydoc.vim : Python documentation view- and search-tool (uses pydoc), 2005, acessado 14/05/2009, http://www.vim.org/scripts/ script.php?script_id=910. [26] STAHLMAN, B., Txtfmt (The Vim Highlighter) : Highlight plain text in Vim! (Beautify your documents with colors and formats.), 2009, acessado 14/05/2009, http://www.vim.org/scripts/script.php? script_id=2208&rating=helpful#1.3. [27] KARKAT, I., camelcasemotion : Motion through CamelCaseWords and underscore notation. 2009, acessado em 14/05/2009, http://www.vim. org/scripts/script.php?script_id=1905.

Referncias Bibliogrcas e a

117

[28] WIKIPEDIA, A. E. L., CamelCase, 2009, acessado 14/05/2009, http: //en.wikipedia.org/wiki/Camel_case. [29] RANGEL, E., Plugin do Vim para altos, baixos e rasteiros, 2008, acessado 14/05/2009, http://eustaquiorangel.com/posts/522.

Colaboradores

Seo dedicada aos colaboradores do projeto vimbook ca

Indice
a rea de transferncia, 11 e ajuda, 4 atalhos, 4, 6 autocomandos, 87, 104 backup funo para gerar backup, 93 ca nobackup, 97 writebackup, 97 barra de status, 90 buscas intervalo, 56 clipboard, 11 colar, 911 copiar, 911 cores esquemas, 63, 81, 91 deletar, 8, 9 linhas duplicadas, 11 documentos modelos, 89 editando, 7 vrios arquivos, 103 a em caso de erros, 4 expresses regulares, 2 o buscas, 42 fechar o programa, 8 leExplorer, 104 folders, 104 funes, 89 co grep, 13 histrico, 13 o ide, 2 indentao, 48, 88 ca iniciar, 3, 7 linha espec ca, 7 novo arquivo, 11 padro espec a co, 7 juno de linhas, 56 ca linhas numerar, 90 lista de alteraes, 13 co manual, 4 mapeamento, 4 mapeamentos, 83 exibir numerao de linhas, 85 ca globais, 87 marcas, 101 menus, 93 exemplos, 94 modo de comando, 5 modo de insero, 5, 8 ca modo normal, 5 modo visual, 5 modos de operao, 5, 8, 24 ca errors comuns, 6 exemplos, 5 movendo-se big words, 26 efetuando saltos, 25 em palavras grandes, 26 entre caracteres, 24 entre linhas, 24, 101 entre sentenas, 26 c numeros incrementar, 53 ordenando, 12 pargrafo a ajustar, 82

120 tabulao, 82, 88 ca path, 88 plugins arquivos, 108 camel case motion, 109 python, 109 texto plano, 109 wiki, 109 python path, 93 qunaticadores, 102 registros denindo previamente, 83 salvar o texto, 8 snippets, 108 syntax, 88 tecla <ctrl>, 4 <tab>, 96 varivel, 26 a vericaao ortogrca, 73 c ca a vim, 2 instalar, 2 vimrc ignorando, 81 recarregando, 80, 84

Indice

Você também pode gostar