Você está na página 1de 130

o editor de texto Vim

Um livro escrito em portugu es sobre o editor de texto Vim. A ideia e que este material cres ca e torne-se uma refer encia con avel e pr atica. Use este livro nos termos da Licen ca de Documenta c ao Livre GNU (GFDL). Este trabalho est a em constante aprimoramento, e e fruto da colabora c ao de volunt arios. Participe do desenvolvimento enviando sugest oes e melhorias; acesse o site do projeto no endere co: http://code.google.com/p/vimbook

Vers ao gerada em 31 de Agosto de 2009

Autores
S ergio Luiz Ara ujo Silva Douglas Adriano Augusto Eust aquio Rangel Eduardo Otubo Gustavo Dutra Jo ao Felipe Mitre 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 udo
1 Introdu c ao 1.1 Instala c ao do Vim . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 1.1.2 1.2 1.3 1.4 1.5 1.6 1.7 1.8 Instala ca o no Windows . . . . . . . . . . . . . . . . . . . Instala ca o no GNU/Linux . . . . . . . . . . . . . . . . . . 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 opera c ao . . . . . . . . . . . . . . . . . . . . . . . . . . Entrando em modo de edi c ao . . . . . . . . . . . . . . . . . . . . Erros comuns . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Editando 2.1 2.2 2.3 Abrindo o arquivo para a edi c ao . . . . . . . . . . . . . . . . . . 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 area de transfer encia Clipboard . . . . . . . . .

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

For cando a edi c ao de um novo arquivo . . . . . . . . . . . . . . . Ordenando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando o grep interno do Vim . . . . . . . . . . . . . . . . . . . Lista de altera c oes . . . . . . . . . . . . . . . . . . . . . . . . . . Substituindo tabula c oes por espa cos . . . . . . . . . . . . . . . . Convertendo para mai usculas . . . . . . . . . . . . . . . . . . . .

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 n umeros em modo normal . . . . . . . . . . . . . 2.14 Repetindo a digita c ao de linhas . . . . . . . . . . . . . . . . . . . 2.15 Movendo um trecho de forma inusitada . . . . . . . . . . . . . . 2.16 Uma calculadora diferente . . . . . . . . . . . . . . . . . . . . . . 2.17 Desfazendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.17.1 Undo tree . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.17.2 M aquina do tempo . . . . . . . . . . . . . . . . . . . . . . 2.18 Salvando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.19 Abrindo o u ltimo arquivo rapidamente . . . . . . . . . . . . . . . 2.20 Modelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.21 Edi c ao avan cada de linhas . . . . . . . . . . . . . . . . . . . . . . 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 M etodos de dobras . . . . . . . . . . . . . . . . . . . . . . . . . . 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 dele co es - . . . . . . . . . . . . . . . . . . . Registros nomeados de a at e z ou A at e Z . . . . . . . . . . . Registros somente leitura : . % # . . . . . . . . . . . . . . . . . Registro de express oes = . . . . . . . . . . . . . . . . . . . . . . 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 pr oximo arquivo da lista de buers . . 5.14 Como colocar um peda co de texto em um registro? . . . . . . . . 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 Refer encias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Substitui c oes 6.1 Usando Express oes Regulares em buscas . . . . . . . . . . . . . 6.1.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 Evitando escapes ao usar Express oes regulares . . . . . .

Destacando padr oes . . . . . . . . . . . . . . . . . . . . . . . . . Inserindo linha antes e depois . . . . . . . . . . . . . . . . . . . . Obtendo informa c oes do arquivo . . . . . . . . . . . . . . . . . . Trabalhando com registradores . . . . . . . . . . . . . . . . . . . Edi c oes complexas . . . . . . . . . . . . . . . . . . . . . . . . . . Indentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Corrigindo a indenta c ao de c odigos . . . . . . . . . . . . . . . . . Usando o File Explorer . . . . . . . . . . . . . . . . . . . . . . . .

6.10 Selecionando ou deletando conte udo de tags HTML . . . . . . . . 6.11 Substitui c oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 Jun c ao de linhas com Vim . . . . . . . . . . . . . . . . . . . . . . 6.19 Buscando em um intervalo de linhas . . . . . . . . . . . . . . . . 7 Trabalhando com Janelas 7.1 7.2 Alternando entre Buers de arquivo . . . . . . . . . . . . . . . . Modos de divis ao da janela . . . . . . . . . . . . . . . . . . . . . 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 Repeti c ao de Comandos 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 Repetindo a digita c ao de uma linha Guardando trechos em registros . . . . . . . . . . . . . . . . . . Gravando comandos . . . . . . . . . . . . . . . . . . . . . . . . . Repetindo substitui c oes . . . . . . . . . . . . . . . . . . . . . . . Repetindo comandos . . . . . . . . . . . . . . . . . . . . . . . . . Scripts Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Usando o comando bufdo . . . . . . . . . . . . . . . . . . . . . . Colocando a u ltima busca em um comando . . . . . . . . . . . . Inserindo o nome do arquivo no comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8.10 Inserindo o u ltimo comando

8.11 Inserindo a palavra sob o cursor em um comando . . . . . . . . . 8.12 Para repetir exatamente a u ltima inser c ao 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 Refer encias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Verica c ao Ortogr aca 10.1 Habilitando a verica c ao ortogr aca . . . . . . . . . . . . . . . . 10.1.1 Habilita c ao autom atica na inicializa c ao . . . . . . . . . .

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 dicion ario de termos . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Dicion ario portugu es segundo o acordo ortogr aco . . . . 10.3 Comandos relativos ` a verica c ao ortogr aca . . . . . . . . . . . . 10.3.1 Encontrando palavras desconhecidas . . . . . . . . . . . . 10.3.2 Tratamento de palavras desconhecidas . . . . . . . . . . . 11 Salvando Sess oes de Trabalho 11.1 O que uma sess ao armazena? . . . . . . . . . . . . . . . . . . . . 11.2 Criando sess oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Restaurando sess oes . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 Viminfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Como Editar Prefer encias no Vim 12.1 Onde colocar plugins e temas de cor . . . . . . . . . . . . . . . . 12.2 Coment arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12.3 Efetiva c ao das altera c oes no vimrc . . . . . . . . . . . . . . . . . 12.4 Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5 Ajustando par agrafos em modo normal . . . . . . . . . . . . . . . 12.6 Exibindo caracteres invis veis . . . . . . . . . . . . . . . . . . . . 12.7 Denindo registros previamente . . . . . . . . . . . . . . . . . . . 12.8 Mapeamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.8.1 Recarregando o arquivo de congura c ao . . . . . . . . . . 12.8.2 Limpando o registro de buscas . . . . . . . . . . . . . . 12.8.3 Destacar palavra sob o cursor . . . . . . . . . . . . . . .

12.8.4 Contar ocorr encias de uma palavra . . . . . . . . . . . . . 12.8.5 Remover linhas em branco duplicadas . . . . . . . . . . . 12.8.6 Mapeamento para Calcular Express oes . . . . . . . . . . . 12.8.7 Mapeamentos globais . . . . . . . . . . . . . . . . . . . .

12.8.8 Convertendo as iniciais de um documento para mai usculas 87 12.9 Autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.9.1 Exemplos pr aticos de autocomandos . . . . . . . . . . . . 12.10Fun c oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.10.1 Fechamento autom atico de par enteses . . . . . . . . . . . 12.10.2 Fun c ao para barra de status . . . . . . . . . . . . . . . . . 12.10.3 Rolar outra janela . . . . . . . . . . . . . . . . . . . . . . 12.10.4 Fun c ao para numerar linhas . . . . . . . . . . . . . . . . . 87 88 89 89 90 90 90

CONTEUDO 12.10.5 Fun c ao para trocar o esquema de cores . . . . . . . . . . . 12.10.6 Uma fun c ao para inserir cabe calho de script . . . . . . . . 12.10.7 Fun c ao para inserir cabe calhos Python . . . . . . . . . . . 12.10.8 Fun c ao para pular para uma linha . . . . . . . . . . . . . 12.10.9 Fun c ao para gerar backup . . . . . . . . . . . . . . . . . . 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.16Complementa c ao com tab . . . . . . . . . . . . . . . . . . . . . 12.17Abrevia c oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.18Evitando arquivos de backup no disco . . . . . . . . . . . . . . . 12.19Mantendo apenas um Gvim aberto . . . . . . . . . . . . . . . . . 12.20Refer encias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 autom atico para o Wiki . . . . . . . . . . . . . . . . 100 13.3 Problemas com codica c ao de caracteres . . . . . . . . . . . . . . 100 14 H abitos para Edi c ao Efetiva 101

14.1 Mova-se rapidamente no texto . . . . . . . . . . . . . . . . . . . . 101 14.2 Use marcas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 14.3 Use quanticadores . . . . . . . . . . . . . . . . . . . . . . . . . . 102 14.4 Edite v arios arquivos de uma s o vez . . . . . . . . . . . . . . . . 103 14.5 N ao digite duas vezes . . . . . . . . . . . . . . . . . . . . . . . . 103 14.6 Use dobras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.7 Use autocomandos . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.8 Use o File Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.9 Torne as boas pr aticas um h abito . . . . . . . . . . . . . . . . . 105 14.10Refer encias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 15 Plugins 106

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

CONTEUDO
A 15.4 Criando folders para arquivos L TEX . . . . . . . . . . . . . . . . 107 A 15.5 Criando se c oes L TEX . . . . . . . . . . . . . . . . . . . . . . . . . 108 15.6 Plugin para manipular arquivos . . . . . . . . . . . . . . . . . . . 108

15.7 Complementa ca o de c odigos . . . . . . . . . . . . . . . . . . . . . 108 15.7.1 Instala ca o . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 15.8 Um wiki para o Vim . . . . . . . . . . . . . . . . . . . . . . . . . 109 15.9 Acessando documenta c ao do Python no Vim . . . . . . . . . . . 109 15.10Formatando textos planos com syntax . . . . . . . . . . . . . . . 109 15.11Movimentando em camel case . . . . . . . . . . . . . . . . . . . . 109 15.12Plugin FuzzyFinder . . . . . . . . . . . . . . . . . . . . . . . . . . 109 15.13O plugin EasyGrep . . . . . . . . . . . . . . . . . . . . . . . . . . 110 15.14O plugin SearchComplete . . . . . . . . . . . . . . . . . . . . . . 110 15.15O plugin AutoComplete . . . . . . . . . . . . . . . . . . . . . . . 111 15.16O plugin Ctags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 15.17O Plugin Project . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 15.18O plugin pydiction . . . . . . . . . . . . . . . . . . . . . . . . . . 112 15.19O plugin FindMate . . . . . . . . . . . . . . . . . . . . . . . . . . 113 15.20Atualizando a documenta c ao dos plugins . . . . . . . . . . . . . . 113 16 Refer encias Colaboradores 114 118

Cap tulo 1

Introdu c ao
A edi c ao de texto e uma das tarefas mais frequentemente executadas por seres humanos em ambientes computacionais, em qualquer n vel. Usu arios nais, administradores de sistemas, programadores de software, desenvolvedores web, e tantas outras categorias, todos eles, constantemente, necessitam editar textos. Usu arios nais editam texto para criar documentos, enviar e-mails, atualizar o blog, escrever recados ou simplesmente trocar mensagens instant aneas pela internet. Administradores de sistemas editam arquivos de congura c ao, criam regras de seguran ca, editam scripts e manipulam sa das de comandos armazenados em arquivos de texto. Programadores desenvolvem c odigos-fonte e a documenta c ao de programas essencialmente em editores de texto. Desenvolvedores web interagem com editores de texto para criarem layout e din amica de sites. Tamanha e a frequ encia e onipresen ca da tarefa de edi c ao de texto que a eci encia, exibilidade e o repert orio de ferramentas de editores de texto tornam-se quesitos cr ticos para se atingir produtividade e conforto na edi c ao de textos. Qualquer tarefa de aprendizado requer um certo esfor co. Todo programa introduz novos conceitos, op c oes e congura c oes que transformam o modus operanti do usu ario. Em princ pio, quanto maior o esfor co, maior o benef cio. Quem quer apenas escrever textos, pode-se contentar com um editor b asico, cuja as u nicas op c oes s ao digitar o texto, abrir e salvar o documento ou pode utilizar um editor que permita pr e-congurar a c oes, formatar o conte udo, revisar a ortograa, etc, al em da a c ao b asica que e escrever textos. Qualquer usu ario de computador pode abrir o primeiro tipo de editor e imediatamente come car a escrever, a curto prazo, sua a c ao ter a consequ encias imediatas e n ao requer conhecimentos adicionais. Por outro lado, esse usu ario ter a que fazer esfor co para digitar o mesmos cabe calho todos os dias. O outro tipo de editor permite que o usu ario pr e-congure o cabe calho do documento e todos os dias esse trecho j a estar a digitado. Em contrapartida, o usu ario deve aprender como pr e-congurar o editor. O que requer esfor co para aprender a utilizar o programa escolhido. O benef cio somente ser a observado a m edio/longo prazo, quando o tempo ganho ao utilizar a congura c ao ser a superior ao tempo consumido aprendendo sobre o programa.

Introdu c ao

O Vim1 e um editor de texto extremamente congur avel, criado para permitir a edi c ao de forma eciente, tornando-a produtiva e confort avel. Tamb em e uma aprimora c ao do editor Vi, um tradicional programa dos sistemas Unix. Possui uma s erie de mudan cas em rela c ao a este u ltimo. O pr oprio slogan do Vim e Vi IMproved, ou seja, Vi Melhorado. O Vim e t ao conhecido e respeitado entre programadores, e t ao u til para programa c ao, que muitos o consideram uma verdadeira IDE (Integrated Development Environment, em portugu es, Ambiente Integrado de Desenvolvimento). Ele e capaz de reconhecer mais de 500 sintaxes de linguagens de programa c ao e marca c ao, possui mapeamento para teclas, macros, abrevia c oes, busca por Express oes Regulares2 , entre outras facilidades. A 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 c odigo em L TEX

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

1.1

Instala c ao do Vim
:h install

1.1.1

Instala c ao no Windows

H a uma vers ao gr aca do Vim dispon vel para v arios sistemas operacionais, incluindo o Windows; esta vers ao pode ser encontrada no site ocial [1]. Para
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 n ao serviria para muita coisa.
2 Express oes

1.2 Dicas iniciais

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

1.1.2

Instala c ao no GNU/Linux

A maioria das distribui c oes GNU/Linux traz o Vim em seus reposit orios, sendo que e bastante comum o Vim j a vir inclu do na instala c ao t pica da distribui c ao. A forma de instala c ao prefer vel depende do Vim: J a vir instalado por default neste caso nada precisa ser feito. Estar dispon vel no reposit orio, mas n ao instalado em distribui c oes derivadas da Debian GNU/Linux5 , a instala c ao do Vim atrav es dos reposit orios e usualmente executada digitando-se apt-get install vim6 em um terminal (este procedimento requer privil egios de administrador e, tipicamente, conex ao com a internet). Algumas distribui c oes GNU/Linux dividem o programa vim em v arios pacotes. Pacotes adicionais como gvim, vim-enhanced, vim-phython7 , entre outros, representam diferentes vers oes do mesmo aplicativo. O gvim ea vers ao gr aca do Vim e o vim-enhanced e uma vers ao do vim compilada com um suporte interno ao Python8 . A alternativa para resolver esse problema e buscar na documenta c ao da distribui c ao o que signica cada pacote. N ao estar dispon vel no reposit orio da distribui c ao cen ario muito improv avel, mas nas sua ocorr encia o Vim pode ser instalado atrav es da compila c ao do c odigo-fonte; basta seguir as instru c oes do site ocial [1].

1.2

Dicas iniciais

Ao longo do livro alguns comandos ou dicas podem estar duplicados, o que eu til devido ao contexto e tamb em porque o aprendizado por satura c ao e um otimo recurso. Ao perceber uma dica duplicada, antes de reclamar veja se j a sabe o que est a sendo passado. Contudo dicas e sugest oes ser ao bem vindas! Para abrir um arquivo com Vim digite num terminal: vim texto.txt onde texto.txt e o nome do arquivo que deseja-se criar ou editar. Em algumas distribui c oes, pode-se usar o comando vi ao inv es de vim.
5 Debian 6 Recomenda-se

GNU/Linux - http://www.debian.org/index.pt.html tamb em instalar a documenta c ao em HTML do Vim: apt-get install

vim-doc 7 Para ubuntu e Debian 8 O Python (http://www.python.org) e uma linguagem de programa c ao orientada a objetos muito comum no meio prossional e acad emico

Introdu c ao

1.3

Ajuda integrada

O Vim possui uma ajuda integrada muito completa, s ao mais de 100 arquivos somando milhares de linhas. O u nico inconveniente e n ao haver ainda tradu c ao para o portugu es, sendo o ingl es seu idioma ocial; entretanto, as explica c oes costumam ser sint eticas e diretas, de forma que no c oes em ingl es seriam sucientes para a compreens ao de grande parte do conte udo da ajuda integrada. Obs: No Vim quase todos os comandos podem ser abreviados, no caso help pode ser chamado porhe assim por diante. Um comando s o pode ser abreviado at e o ponto em que este nome mais curto n ao coincida com o nome de algum outro comando existente. Para chamar a ajuda do Vim pressione Esc e em seguida: :help .... vers~ ao longa, ou :h ....... vers~ ao abreviada ou simplesmente F1. Siga os links usando o atalho ctrl+], em modo gr aco o clique com o mouse tamb em funciona, e para voltar use ctrl+o ou ctrl+t Para as situa c oes de desespero pode-se digitar: :help!

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

1.4

Em caso de erros

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

1.5

Como interpretar atalhos e comandos

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

1.6 Modos de opera c ao

1.6

Modos de opera c ao

A tabela abaixo mostra uma refer encia r apida para os modos de opera c ao do Vim, a seguir mais detalhes sobre cada um dos modos. Modo Normal Inser c ao Visual Comando Descri c ao Para deletar, copiar, formatar, etc Prioritariamente, digita c ao de texto Sele c ao de blocos verticais e linhas inteiras Uma verdadeira linguagem de programa c ao Atalho <Esc> i,a,I,A,o,O V, v, Ctrl-v <Esc>:

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

1.7

Entrando em modo de edi c ao

Estando no modo normal, digita-se: a i A I o O .... .... .... .... .... .... inicia inicia inicia inicia inicia inicia inser c~ ao inser c~ ao inser c~ ao inser c~ ao inser c~ ao inser c~ ao de de de de de de texto texto texto texto texto texto ap os o caractere atual antes do caractere atual no final da linha no come co da linha na linha abaixo na linha acima

Outra possibilidade e utilizar a tecla <Insert> para entrar no modo de inser c ao de texto antes do caractere atual, ou seja, o mesmo que a tecla i. Uma vez no modo de inser c ao, a tecla <Insert> permite alternar o modo de digita c ao de inser c ao de simples de caracteres para substitui c ao de caracteres. Agora come camos a sentir o gostinho de usar o Vim, uma tecla seja mai uscula ou min uscula, faz muita diferen ca se voc e n ao estiver em modo de inser c ao, e para sair do modo de inser c ao e voltar ao modo normal sempre use <Esc>.

Introdu c ao

1.8

Erros comuns

Estando em modo de inser ca o pressionar j na inten c ao de rolar o documento, 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 e a jun c ao das linhas, ali as um otimo recurso quando a inten c ao e de fato esta. Em modo normal tentar digitar um n umero seguido de uma palavra e ao perceber que nada est a sendo digitado, iniciar o modo de inser c ao, digitando por m o que se queria, o resultado e que o n umero que foi digitado inicialmente vira um quanticador para o que se digitou ao entrar no modo de inser c ao. A palavra aparecer a repetida na quantidade do n umero digitado. Assim, se voc e quiser digitar 10 vezes isto e um teste fa ca assim: <Esc> ........... se assegure de estar em modo normal 10 .............. quantificador i ............... entra no modo de inser c~ ao isto e um teste <Enter> <Esc>

 Alguns atalhos u teis. . .


Ctrl-O ..... i Ctrl-a ... @: ......... Shift-insert gi ......... gv ......... comando do modo normal no modo insert repetir a ultima inser c~ ao repetir o ultimo comando colar texto da area de transfer^ encia modo de inser c~ ao no mesmo ponto da ultima vez repete sele c~ ao visual

Para saber mais sobre repeti c ao de comandos veja o cap tulo 8, na p agina 60. No Vim, cada arquivo aberto e chamado de buffer, ou seja, dados carregados na mem oria. Voc e pode acessar o mesmo buer em mais de uma janela, bem como dividir a janela em v arios buers distintos o que veremos mais adiante.

Cap tulo 2

Editando
A principal fun c ao de um editor de textos e editar textos. Parece obvio, mas em meio a in umeros recursos extras essa simples e crucial fun c ao perde-se entre todos os demais.

2.1

Abrindo o arquivo para a edi c ao

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

 Caso o padr ao tenha espa cos no nome coloque entre aspas ou use escape \
a m de n ao obter erro.

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

2.2

Escrevendo o texto

O Vim e um editor que possu diferentes modos de edi c ao. Entre eles est a o modo de inser c ao, que e o modo onde escreve-se o texto naturalmente.

Editando

Para se entrar em modo de inser c ao, estando em modo normal, pode-se pressionar qualquer uma das teclas abaixo: i ..... I ..... a ..... A ..... o ..... O ..... <Esc> . entra no modo de inser c~ ao entra no modo de inser c~ ao entra no modo de inser c~ ao entra no modo de inser c~ ao entra no modo de inser c~ ao entra em modo de inser c~ ao sai do modo de inser c~ ao antes do caractere atual no come co da linha ap os o caractere atual no final da linha uma linha abaixo uma linha cima

Uma vez no modo de inser c ao todas as teclas s ao exatamente como nos outros editores simples, caracteres que constituem o conte udo do texto sendo digitado. O que inclui as teclas de edi c ao de caracteres. Para salvar o conte udo escrito, digite a tecla <Esc> para sair do modo de inser c ao e digite o comando :w para gravar o conte udo. Caso queira sair do editor, digite o comando: :q caso tenha ocorrido modica c oes no arquivo desde que ele foi salvo pela u ltima vez haver a uma mensagem informando que o documento foi modicado e n ao foi salvo, nesse caso, digite o comando :q! para fechar o Vim sem salvar as u ltimas modica c oes feitas. Caso queira salvar e sair do arquivo, digite o comando :wq Nesse ponto, conhece-se o vim de forma suciente para editar qualquer coisa nele. Daqui por diante o que existe s ao as formas de realizar a edi c ao do arquivo com maior naturalidade e produtividade. O usu ario iniciante do Vim pode cometer o erro de tentar decorar todos os comandos que ser ao apresentados. N ao fa ca isso. Tentar decorar comando e exatamente o caminho contr ario da naturalidade exigida por um editor texto para aumentar a produtividade. Ao contr ario, sugere-se que leia-se todo o conte udo. Identique quais s ao as atividades de maior recorr encia no estilo individual de escrita e busque como realizar tais fun c oes com mais u encia nesse editor. A pr atica levar a ao uso de uente desse comandos principais, abrindo espa co para os demais comandos. Isso n ao impede que o usu ario experimente cada comando conforme for lendo. De fato, essa pr atica pode ajudar a selecionar as formas de edi c ao que lhe s ao mais simp aticas ao uso.

2.3

Copiar, Colar e Deletar


:h delete, d

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

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

 Pode-se combinar o comando de dele c ao d com o comando de movimento


(considere o modo normal) para apagar at e a pr oxima v rgula use: df,. Copiar est a associado ` a letra y. yy .... Y ..... ye .... yb .... copia copia copia copia a linha atual a linha atual do cursor ao fim da palavra do come co da palavra ao cursor

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 ap os o cursor

2.3.1

Deletando uma parte do texto


:h deleting

O comando d remove o conte udo para a mem oria. x .... 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 pr oximos 5 caracteres apaga a linha atual apaga 5 linhas (tamb em pode ser: d5d) apaga at e a linha 5 apaga uma palavra apaga 5 palavras (tamb em pode ser: d5w) apaga uma letra (sin^ onimo: x) apaga 5 letras (tamb em pode ser: d5l ou 5x) apaga at e o in cio da linha apaga at e o primeiro caractere da linha apaga at e o final da linha (sin^ onimo: D) apaga at e o in cio do arquivo apaga at e o final do arquivo apaga o resto da linha deleta at e o pr oximo (,[,{ deleta aspas com conte udo

Depois do texto ter sido colocado na mem oria, digite p para inserir o texto em uma outra posi c ao. Outros comandos:

10

Editando diw .. apaga palavra mesmo que n~ ao esteja posicionado no in cio dip .. apaga o par agrafo atual d4b .. apaga as quatro palavras anteriores dfx .. apaga at e o pr oximo x d/casa/+1 - deleta at e a linha ap os a palavra casa

Trocando a letra d nos comandos acima por c de change mudan ca ao inv es de deletar ser a feita uma mudan ca de conte udo. Por exemplo:
:h change

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

modifica modifica modifica modifica

uma palavra um par agrafo uma senten ca at e o final da linha

2.3.2

Copiando sem deletar


:h yank

O comando y (yank) permite copiar uma parte do texto para a mem oria sem deletar. Existe uma semelhan ca muito grande entre os comandos y e os comandos d, um ativa a c opia e outro a exclus ao de conte udo, suportando ambos quanticadores: yy .... 5yy .... y/pat .. yw .... 5yw .... yl .... 5yl .... y^ .... copia a linha atual (sin^ onimo: Y) copia 5 linhas (tamb em pode ser: y5y ou 5Y) copia at e pat copia uma palavra copia 5 palavras (tamb em pode ser: y5w) copia uma letra copia 5 letras (tamb em pode ser: y5l) copia da posi c~ ao atual at e o in cio da linha (sin^ onimo: y0) y$ .... copia da posi c~ ao atual at e o final da linha ygg .... copia da posi c~ ao atual at e o in cio do arquivo yG .... copia da posi c~ ao atual at e o final do arquivo

Digite P (p mai usculo) para colar o texto rec em copiado na posi c ao onde encontra-se o cursor, ou p para colar o texto na posi c ao imediatamente ap os o cursor. yi" .... copia trecho entre aspas (atual - inner) vip .... sele c~ ao visual para par agrafo atual inner paragraph yip .... copia o par agrafo atual yit .... copia a tag agual inner tag util para arquivos HTML, XML, etc.

2.4 For cando a edi c ao de um novo arquivo

11

2.3.3

Usando a area de transfer encia Clipboard


:h paste, clipboard, quoteplus

Exemplos para o modo visual: Ctrl-insert .... copia area selecionada Shift-insert ... cola o que est a no clipboard Ctrl-del ....... recorta para o clipboard Caso obtenhamos erro ao colar textos da area de transfer encia usando os comandos acima citados podemos usar outra alternativa. Os comandos abaixo preservam a indenta c ao1 . "+p ............ cola preservando indenta c~ ao "+y ............ copia area selecionada

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

2.3.4

Removendo linhas duplicadas

:sort u

2.4

For cando a edi c ao de um novo arquivo


:h edit!

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

entre o come co da linha e o in cio do texto

12

Editando

2.5

Ordenando
:h sort

O Vim, vers ao 7 ou superior, passa a ter um comando de ordena c ao que tamb em permite a retirada de linhas duplicadas, tal como foi apresentado. :sort u ... ordena e retira linhas duplicadas :sort n ... ordena numericamente Obs: a ordena c ao num erica e diferente da ordena c ao alfab etica se em um trecho contendo algo como: 8 9 10 11 12 Voc e tentar fazer: :sort O Vim colocar a nas tr es primeiras linhas 10 11 12 Portanto lembre-se que se a ordena c ao envolver n umeros use: :sort n Voc e pode fazer a ordena c ao em um intervalo assim: :1,15 sort n O comando acima diz Ordene numericamente da linha 1 at e a linha 15. Podemos ainda ordenar ` a partir de uma coluna: :sort /.*\%8v/ ..... ordena ` a partir do 8o caractere

2.6 Usando o grep interno do Vim

13

2.6

Usando o grep interno do Vim


:h vimgrep, lvimgrep

Para editar todos os arquivos que contenham a palavra inusitada: :vimgrep /\cinusitada/ * a op c ao \c torna a busca indiferente a letras mai usculas e min usculas. Obs: o Vim busca ` a partir do diret orio atual, para se descobrir o diret orio atual ou mud a-lo: :pwd ........... exibe o diret orio atual :cd /diret orio muda de diret orio

2.7

Lista de altera co es
:h changelist, changes

O Vim mant em uma lista de altera c oes, veremos agora como usar este recurso. g, ................. avan ca na lista de altera c~ oes g; ................. recua na lista de altera c~ oes :changes ........... visualiza a lista de altera c~ oes

2.8

Substituindo tabula c oes por espa cos


:h expandtab, retab

Se houver necessidade2 de trocar tabula c oes por espa cos fazemos assim: :set expandtab :retab Para fazer o contr ario usamos algo como: :%s/\s\{4,}/<pressiona-se ctrl-i>/g onde <Ctrl-i>...... insere uma tabula c~ ao Explicando:
2 Em

c odigos Python por exemplo n ao se pode misturar espa cos e tabula c oes

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

Editando

2.9

Convertendo para mai usculas


:h case

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

converte converte converte altera o

a linha para mai usculo a linha para min usculo a palavra atual para mai usculo case do caractere atual

2.10

Editando em modo de comando


:h put, move, global, holy-grail

Para mover um trecho usando o modo de comandos fa ca: :10,20m $ O comando acima move m da linha 10 at e a linha 20 para o nal $. :g /palavra/ m 0 Move as linhas contendo palavra para o come co (linha zero) :10,20y a Copia da linha 10 at e a linha 20 para o registro a :56pu a Cola o registro a na linha 56 :g/padr~ ao/d O comando acima deleta todas as linhas contendo a palavra padr ao. Podemos inverter a l ogica do comando global g:

2.11 O arquivo alternativo :g!/padr~ ao/d

15

N ao delete as linhas contendo padr ao, ou seja, delete tudo menos as linhas contendo a palavra padr ao. :v/padr~ ao/d ........ apaga linhas que n~ ao contenham "padr~ ao" :v/\S/d ............ apaga linhas vazias \S ................. significa "string" A op c ao acima equivale a :g!/padr~ ao/d. Para ler mais sobre o comando global utilizado nesta se c ao veja o cap tulo 6.13. :7,10copy $ Da linha 7 at e a linha 10 copie para o nal.  Veja mais sobre edi c ao no modo de comando na se c ao 6 Buscas e substitui c oes na p agina 42. Gerando sequ encias Para inserir uma sequ encia de 1 a 10 ` a partir da linha inicial zero fazemos: :0put =range(1,10) Caso queira inserir sequ encias como esta: 192.168.0.1 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 Usamos este comando: :for i in range(1,5) | .put =192.168.0..i | endfor

2.11

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

muito comum um usu E ario concluir a edi c ao em um arquivo no Vim e inocentemente imaginar que n ao vai mais modicar qualquer coisa nele, ent ao este usu ario abre um novo arquivo: :e novo-arquivo.txt Mas de repente o usu ario lembra que seria necess ario adicionar uma linha no arquivo rec em editado, neste caso usa-se o atalho

16 Ctrl-6

Editando

cuja fun c ao e alternar entre o arquivo atual e o u ltimo editado. Para retornar ao outro arquivo basta portanto pressionar Ctrl-6 novamente. Pode-se abrir o arquivo alternativo em nova janela usando-se o atalho: Ctrl-w Ctrl-6

 Mais informa c oes sobre janelas leia a se c ao 7 na p agina 57. 2.12 Lendo um arquivo para a linha atual
:h :r[ead]

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

2.13

Incrementando n umeros em modo normal


:h Ctrl-a, Ctrl-x

Posicione o cursor sobre um n umero e pressione Ctrl-a ..... incrementa o n umero Ctrl-x ..... decrementa o n umero

2.14

Repetindo a digita c ao de linhas


modo insert repete linha acima repete linha abaixo repete linhas inteiras repete a ultima inser c~ ao

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

 Para saber mais sobre repeti c ao de comandos veja o cap tulo 8, na p agina
60.

2.15

Movendo um trecho de forma inusitada


move move move move move da linha 20 at e 30 para o come co da linha 20 at e pat para a linha 5 a linha atual 5 posi c~ oes acima a linha atual para o come co 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 necess ario digitar o resultado de uma express ao matem atica (portanto no modo de inser c ao) pode-se usar o atalho Ctrl-r =, ele ativa o registro de express oes, na linha de comando do Vim aparece um sinal de igual, digita-se ent ao uma express ao matem atica qualquer tipo 35*6 e em seguida pressiona-se Enter, o Vim coloca ent ao o resultado da express ao no lugar desejado. Portanto n ao precisa-se recorrer a nenhuma calculadora para fazer c alculos. Pode-se fazer uso do Registro de Express oes dentro de macros, ou seja, ao gravar a c oes pode-se fazer uso deste recurso, aumentando assim sua complexidade e poder! Para ler sobre macros acesse a se c ao 8.3 na 62. Para saber mais sobre o registro de express oes leia a se c ao 5.6 na p agina 35.

 Na se c ao 9.9 Calculadora Cient ca com o vim p agina 69 h a uma descri c ao


sobre como fazer c alculos com maior precis ao e complexidade.

 Se a inten c ao for apenas exibir um calculo na barra de comandos e poss vel


fazer algo assim: :echo 5.2 * 3

2.17

Desfazendo
:h undo

Se voc e cometer um erro, n ao se preocupe! Use o comando u: u ............ desfazer U ............ desfaz mudan cas na ultima linha editada Ctrl-r ...... refazer

2.17.1

Undo tree

Um novo recurso muito interessante foi adicionado ao Vim a partir da vers ao 7 e a chamada arvore do desfazer. Se voc e desfaz alguma coisa, fez uma altera c ao um novo branch ou galho, deriva c ao de altera c ao e criado. Basicamente, os branches nos permitem acessar quaisquer altera c oes ocorridas no arquivo. Um exemplo did atico Siga estes passos (para cada passo <Esc>, ou seja, saia do modo de inser c ao) Passo 1 - digite na linha 1 o seguinte texto # controle de fluxo <Esc> Passo 2 - digite na linha 2 o seguinte texto

18 # um la co for <Esc> Passo 3 - Nas linhas 3 e 4 digite... for i in range(10): print i <Esc> Passo 4 - pressione u duas vezes (voc e voltar a ao passo 1) Passo 5 - Na linha 2 digite # operador tern ario <Esc> Passo 6 - na linha 3 digite var = (1 if teste == 0 else 2) <Esc>

Editando

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

2.17.2

M aquina do tempo

O Vim possui muitas formas para desfazer e refazer, e uma das mais interessantes e a m aquina do tempo! A m aquina do tempo e extremamente u til quando no meio de um texto se percebe que boa parte do que foi adicionado e in util e que nos ultimos 10 minutos n ao h a nada que se possa aproveitar. Utilizando a m aquina do tempo e poss vel eliminar os u ltimos 10 minutos de texto in util do seu documento facilmente, utilizando: :earlier 10m Com esse comando o documento car a exatamente como ele estava 10 minutos atr as! Caso ap os a exclus ao perceba-se que foi exclu do um minuto a mais, e poss vel utilizar o mesmo padr ao novamente para avan car no tempo:

2.18 Salvando :later 60s

19

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

2.18

Salvando
:h writing

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

20

Editando

2.19

Abrindo o u ltimo arquivo rapidamente

O Vim guarda um registro para cada arquivo editado veja mais no cap tulo 5 na p agina 33. 0 ........ abre o ultimo arquivo editado 1 ........ abre o pen ultimo arquivo editado Ctrl-6 .... abre o arquivo alternativo (booleano) Bom, j a que abrimos o nosso u ltimo arquivo editado com o comando 0 podemos, e provavelmente o faremos, editar no mesmo ponto em que est avamos editando da u ltima vez: gi

 Pode-se criar um alias3 para que ao abrir o vim o mesmo abra o u ltimo arquivo editado: alias lvim="vim -c \"normal 0\"". No cap tulo 6 p agina 42 voc e encontra mais dicas de edi c ao.

2.20

Modelines
:h modeline

S ao um modo de guardar prefer encias no pr oprio arquivo, suas prefer encias viajam literalmente junto com o arquivo, basta usar em uma das 5 primeiras linhas ou na u ltima linha do arquivo algo como: # vim:ft=sh: OBS: Voc e deve colocar um espa co entre a palavra vim e a primeira coluna, ou seja, a palavra vim deve vir precedida de um espa co, da em diante cada op c ao ca assim: :op c~ ao: Por exemplo: posso salvar um arquivo com extens ao .sh e dentro do mesmo indicar no modeline algo como: # vim:ft=txt:nu: Apesar de usar a extens ao sh o Vim reconhecer a este arquivo como txt, e caso eu n ao tenha habilitado a numera c ao, ainda assim o Vim usar a por causa da op c ao nu. Portanto o uso de modelines pode ser um grande recurso para o seu dia-a-dia pois voc e pode coloca-las dentro dos coment arios!
3 Abrevia c ao

para um comando do GNU/Linux

2.21 Edi c ao avan cada de linhas

21

2.21

Edi c ao avan cada de linhas

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

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

22

Editando i ....... entra no modo de inser c~ ao n~ ao .... insere a palavra "n~ ao" seguida de espa co " " ^[ ...... sai do modo de inser c~ ao (atrav es de Ctrl-v seguido de Esc) $ ....... vai para o fim da linha ciw ..... apaga a ultima palavra ("novo") e entra em modo de inser c~ ao velho ... insere a palavra "velho" no lugar de "novo"

A combina c ao Ctrl-v e utilizada para inserir caracteres de controle na sua forma literal, prevenindo-se assim a interpreta c ao destes neste exato momento.

2.22

Comentando rapidamente um trecho

Tomando como exemplo um trecho de c odigo como abaixo: 1 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 e a linha 9 podemos fazer: posicionar o cursor no come co da linha 4 Ctrl-v ........... inicia sele c~ ao por blocos 5j ............... estende a sele c~ ao at e o fim Shift-i .......... inicia inser c~ ao no come co da linha % ................ insere coment ario (LaTeX) Esc .............. sai do modo de inser c~ ao

2.23

Comparando arquivos com o vimdi


:h di

O vim possui um modo para checagem de diferen cas entre arquivos, e bastante u til especialmente para programadores, para saber quais s ao as diferen cas entre dois arquivos faz-se: vimdiff arquivo1.txt arquivo2.txt .. exibe as diferen cas ]c ................................. mostra pr oxima diferen ca vim -d ............................. outro modo de abrir o vimdiff mode

2.23 Comparando arquivos com o vimdi

23

Para usu arios do GNU/Linux e poss vel ainda checar diferen cas remotamente assim: vimdiff projeto scp://usuario@estacao//caminho/projeto O comando acima ir a exibir lado a lado o arquivo local chamado projeto e o arquivo remoto contido no computador de nome estacao de mesmo nome.

Cap tulo 3

Movendo-se no Documento
:h motion.txt

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

Uma vez no modo de inser c ao todas as teclas s ao exatamente como nos outros editores simples, caracteres que constituem o conte udo do texto sendo digitado. Para sair do modo de inser c ao e retornar ao modo normal digita-se <Esc> ou Ctrl-[. As letras h, k, l, j funcionam como setas: k h j ou seja, a letra k e usada para subir no texto, a letra j para descer, a letra h para mover-se para a esquerda e a letra l para mover-se para a direita. A ideia e que se consiga ir para qualquer lugar do texto sem tirar as m aos do teclado, sendo portanto alternativas para as setas de movimenta c ao usuais do teclado. Ao inv es de manter os quatro dedos sobre H, J, K e L, e aconselh avel manter o padr ao de digita c ao com o indicador da m ao esquerda sobre a tecla F e o da m ao direita sobre a letra J, sendo que seu indicador da m ao direita vai alternar entre a tecla J e H para a movimenta c ao. Para ir para linhas espec 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 n umero da linha. Para retornar ao modo normal pressione <Esc> ou use Ctrl-[ (^[). No vim e poss vel realizar diversos tipos de movimentos, tamb em conhecidos como saltos no documento. A lista abaixo aponta o comandos de salto t picos. gg .... G ..... 0 ..... ^ ..... $ ..... 25gg .. .... fx .... tx .... Fx .... Tx .... * ..... .... gd .... gD .... w ..... W ..... E ..... e ..... zt .... zm .... zz .... n ..... N ..... vai para o in cio do arquivo vai para o final do arquivo vai para o in cio da linha vai para o primeiro caractere da linha (ignora espa cos) vai para o final da linha salta para a linha 25 salta para a linha da ultima posi c~ ao em que o cursor estava para primeira ocorr^ encia de x Para ir para uma letra antes de x Para ir para ocorr^ encia anterior de x Para ir para uma letra ap os o ultimo x Pr oxima ocorr^ encia de palavra sob o cursor salta exatamente para a posi c~ ao em que o cursor estava salta para declara c~ ao de vari avel sob o cursor salta para declara c~ ao (global) de vari avel sob o cursor move para o in cio da pr oxima palavra pula para pr oxima palavra (desconsidera h fens) pula para o final da pr oxima palavra (desconsidera hifens) move o cursor para o final da pr oxima palavra movo o cursor para o topo da p agina move o cursor para o meio da p agina move a p agina de modo com que o cursor fique no centro move o cursor para a pr oxima ocorr^ encia da busca move o cursor para a ocorr^ encia anterior da busca

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

26

Movendo-se no Documento gi .... entra em modo de inser c~ ao no ponto da ultima edi c~ ao gf .... abre o arquivo sob o cursor

Para o Vim palavras-separadas-por-h fen s ao consideradas em separado, portanto se voc e usar, em modo normal w para avan car entre as palavras ele pular a uma de cada vez, no entanto se usar W em mai usculo (como visto) ele pular a a a-palavra-inteira :) E .... pula para o final de palavras com hifen B .... pula palavras com hifen (retrocede) W .... pula palavras hifenizadas (come co) Podemos pular senten cas: ) .... ( .... } .... { .... y) ... d} ... pula uma senten ca para frente pula uma senten ca para tr as pula um par agrafo para frente pula um par agrafo para tr as copia uma senten ca para frente deleta um par agrafo para frente

Caso tenha uma estrutura como abaixo: def pot(x): return x**2 E tiver uma refer encia qualquer para a fun c ao pot e desejar mover o cursor at e sua deni c ao basta posicionar o cursor sobre a palavra pot e pressionar (em modo normal): gd Se a vari avel for global, ou seja, estiver fora do documento (provavelmente em outro) use: gD Quando denimos uma vari avel tipo var = teste e em algum ponto do documento houver refer encia a esta vari avel e se desejar ver seu conte udo fazemos [i

27 Na verdade o atalho acima lhe mostrar aou ltimo ponto onde foi feita a atribui c ao aquela vari ` avel que est a sob o cursor, uma m ao na roda para os programadores de plant ao!  Observe a barra de status do Vim se o tipo de arquivo est a certo, tipo. Para detalhes sobre como personalizar a barra de status na se c ao 12.10.2. ft=python a busca por deni c oes de fun c ao s o funciona se o tipo de arquivo estiver correto :set ft=python

 Um mapeamento interessante que facilita a movimenta c ao at e linahas que contenham determinada palavra de um modo bem simples, bastando pressionar ,f pode ser feito assim:
map ,f [I:let nr = input("Which one: ")<Bar>exe "normal " . nr ."[\t"<CR> Uma vez denido o mapeamento acima e pressionando-se o atalho associado, que neste caso e ,f o vim exibir a as uma opp c ao para pular para as ocorr encias da palavra assim: 1: trecho contendo a palavra 2: outro trecho contendo a palavra Which one: outro detalhe para voltar ao u ltimo ponto em que voc e estava 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 pr oximas 5 linhas em modo normal sobe uma linha sobe 5 linhas copia 5 linhas (para cima) pula uma palavra para frente pula 5 palavras deleta 5 palavras retrocede uma palavra retrocede 5 palavras posiciona o cursor em x deleta at e o pr oximo x deleta da linha atual at e o come co do arquivo deleta at e o final do arquivo copia at e o final do arquivo copia at e o pr oximo x copia 5 linhas

28

Movendo-se no Documento

3.1

Paginando

Para rolar uma p agina de cada vez (em modo normal) Ctrl-f Ctrl-b :h jumps . :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 c~ ao mais recente salta para a posi c~ ao mais antiga abre o ultimo arquivo editado abre o pen ultimo arquivo editado pula para a defini c~ ao de uma vari avel pula para o fim do par agrafo pula para a coluna 10 pula para defini c~ ao de vari avel sob o cursor

Observa c ao: lembre-se ^ .... equivale a Ctrl ^I ... equivale a Ctrl-I poss E vel abrir v arios arquivos tipo vim *.txt. Editar algum arquivo, salvar e ir para o pr oximo arquivo com o comando ` a seguir: :wn Ou voltar ao arquivo anterior :wp poss E vel ainda rebobinar sua lista de arquivos. :rew[wind] Ir para o primeiro :fir[st] Ou para o u ltimo :la[st]

3.2 Usando marcas

29

3.2

Usando marcas
:h mark-motions

As marcas s ao um meio eciente de se pular para um local no arquivo. Para criar uma, estando em modo normal faz-se: ma Onde m indica a cria c ao de uma marca e a e o nome da marca. Para pular para a marca a: a Para voltar ao ponto do u ltimo salto: Para deletar de at e a marca a (em modo normal): da

3.2.1

Marcas globais

Durante a edi c ao de v arios arquivos pode-se denir uma marca global com o comando: mA Onde m cria a marca e A (mai usculo) dene uma marca A acess vel a qualquer momento com o comando: A Isto far a o Vim dar um salto at e a marca A mesmo que esteja em outro arquivo, mesmo que voc e tenha acabado de fecha-lo. Para abrir e editar v arios arquivos do Vim fazemos: vim :bn :bp :ls :wn :wp *.txt ......... ............... ............... ............... ............... ............... abre todos os arquivos txt vai para o pr oximo da lista volta para o arquivo anterior lista todos os arquivos abertos salva e vai para o pr oximo salva e vai para o pr evio

Cap tulo 4

Folders
Folders s ao como dobras nas quais o Vim esconde partes do texto, algo assim: +-- 10 linhas --------------------------Deste ponto em diante chamaremos os folders descritos no manual do Vim como dobras! Quando tiver que manipular grandes quantidades de texto tente usar dobras, isto permite uma visualiza c ao completa do texto. Um modo de entender rapidamente como funcionam as dobras no Vim seria criando uma dobra para as pr oximas 10 (dez) linhas com o comando abaixo: zf10j Voc e pode ainda criar uma sele c ao visual Shift-v ............ j .................. zf ................. zo ................. sele c~ ao por linha desce linha cria o folder abre o folder

4.1

M etodos de dobras

O Vim tem seis modos fold, s ao eles: Sintaxe (syntax) Identa c ao (indent) Marcas (marker) Manual (manual) Diferen cas (di) Express oes Regulares (expr)

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

31

Outro modo para determinar o m etodo de dobra seria colocando na u ltima linha do seu arquivo algo assim: vim:fdm=marker:fdl=0: Obs: fdm signica foldmethod, e fdl signica foldlevel. Deve haver um espa co entre a palavra inicial vim e o come co da linha este recurso chama-se modeline, leia mais na se c ao 2.20 modelines na p agina 20.

4.2

Manipulando dobras

Os principais comandos relativos ao uso de dobras s ao: zo 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 par agrafo ap atual cria uma dobra at e a palavra casa cria uma dobra at e a marca a apaga a dobra (n~ ao o seu conte udo) move para o in cio da pr oxima dobra move para o final da dobra anterior move o cursor para in cio da dobra aberta move o cursor para o fim da dobra aberta desabilita ou habilita as dobras diminui/aumenta n vel da dobra fdl n vel da dobra 0 (foldlevel) mostra uma coluna ao lado da numera c~ ao

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 espa cos coloque o trecho abaixo no seu arquivo de congura c ao do Vim (.vimrc) - veja o cap tulo 12, p agina 79.

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 congura c ao do seu .vimrc: set foldcolumn=2 o que adiciona uma coluna ao lado da coluna de enumera c ao das linhas.

4.3

Criando dobras usando o modo visual

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

Um modo inusitado de se criar dobras e: Shift-v ..... inicia sele c~ ao visual /chapter/-2 . extende a sele c~ ao at e /chapter -2 linhas zf .......... cria a dobra

Cap tulo 5

Registros
O Vim possui nove tipos de registros, cada tipo tem uma utilidade espec ca, por exemplo voc e pode usar um registro que guarda o u ltimo comando digitado, pode ainda imprimir dentro do texto o nome do pr oprio arquivo, armazenar por c oes distintas de texto ( area de transfer encia m ultipla) etc. Vamos aos detalhes. O registro sem nome 10 registros nomeados de 9 O registro de pequenas dele c oes 26 registros nomeados de z ou de Z 4 registros somente leitura O registro de express oes = Os registro de sele c ao e *, + and O registro o Registro do u ltimo padr ao de busca /

5.1

O registro sem nome

Armazena o conte udo de a c oes como: d ....... s ....... c ....... x ....... yy ...... dele c~ ao substitui c~ ao modifica c~ ao change apaga um caractere copia uma linha inteira

Para acessar o conte udo deste registro basta usar as letras p ou P que na verdade s ao comandos para colar abaixo da linha atual e acima da linha atual (em modo normal).

34

Registros

5.2

Registros nomeados de 0 a 9
:h registers

O registro zero armazena o conte udo da u ltima c opia yy, ` a partir do registro 1 v ao sendo armazenadas as dele c oes sucessivas de modo que a mais recente dele c ao ser a armazenada no registro 1 e os registros v ao sendo incrementados em dire c ao ao nono. Dele c ao menores que uma linha n ao s ao armazenadas nestes registros, caso em que o Vim usa o registro de pequenas dele c oes ou que se tenha especicado algum outro registro.

5.3

Registro de pequenas dele c oes -

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

5.4

Registros nomeados de a at e z ou A at e Z

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

5.5
": ". "% "#

Registros somente leitura : . % #


..... ..... ..... ..... armazena armazena cont em o cont em o o ultimo comando uma c opia do ultimo texto inserido nome do arquivo corrente nome do arquivo alternativo

Uma forma pr atica de usar registros em modo de inser c ao e usando: Ctrl-r

5.6 Registro de express oes = Ctrl-r Ctrl-r Ctrl-r Ctrl-r % : / a .... .... .... .... insere insere insere insere o o a o nome do arquivo atual ultimo comando digitado ultima busca efetuada registro a

35

Em modo de inser c ao pode-se repetir a u ltima inser c ao de texto simplesmente pressionando: Ctrl-a

5.6
"=

Registro de express oes =

O registro de express oes permite efetuar c alculos diretamente no editor, usando o atalho Ctrl-r = no modo de inser c ao, o editor mostrar a um sinal de igualdade na barra de status e o usu ario digita ent ao uma express ao matem atica como uma multiplica c ao 6*9 e em seguida pressiona Enter para que o editor nalize a opera c ao. Veja um v deo demonstrando sua utiliza c ao neste link [2]. Para entender melhor como funciona o registro de express oes tomemos um exemplo. Para fazer uma sequ encia como abaixo: linha 1 tem o valor 150, linha 2 tem o valor 300, linha 3 tem o valor 450, ... Acompanhe os passos para a cria c ao de uma macro permite fazer uma sequ encia de quantas linhas forem necess arias com o incremento proposto acima. <Esc> ......... qa ............. yy ............. p .............. w .............. <Ctrl-a> ....... 4w ............. "ndw ........... a .............. Ctrl-r = ....... Ctrl-r n + 150 <Enter> ........ <Esc> ........... 0 ............... q ............... sai do modo de inser c~ ao inicia a macro copia a primeira linha cola a linha copiada pula para o n umero 1 incrementa o n umero (agora 2) avan ca 4 palavras at e 150 apaga o 150 para o registro "n entra em modo de inser c~ ao abre o registro de express~ oes insere dentro do registro de express~ oes o registro "n executa o registro de express~ oes sai do modo de inser c~ ao vai para o come co da linha para a grava c~ ao da macro

36 Agora posicione o cursor no come co da linha e pressione 10@a.

Registros

 Na se c ao 12.8.6 p agina 86 h a mais dicas sobre o uso do registro de express oes


c alculos matem aticos.

5.7

Registros de arrastar e mover

O registro "* e respons avel por armazenar o u ltimo texto selecionado (p.e., atrav es do mouse). J a o registro "+ e o denominado area de transfer encia, normalmente utilizado para se transferir conte udos entre aplica c oeseste registro e preenchido, por exemplo, usando-se a t pica combina c ao Ctrl-v encontrada em muitas aplica c oes. Finalmente, o registro "~ armazena o texto colado pela opera c ao mais recente de arrastar-e-soltar (dragand-drop).

5.8

Registro buraco negro

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

5.9

Registros de buscas /

Se desejar inserir em uma substitui c ao uma busca pr evia, voc e poderia fazer assim em modo de comandos: :%s,<Ctrl-r>/,novo-texto,g

5.10 Manipulando registros

37

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

5.10

Manipulando registros
@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 ultima busca para o buffer de colagem ... copia o nome do arquivo para o buffer de colagem ... mostra o conte udo de todos os registros ... ... ... ... ...

:let :let :let :let :let

:let @*=@/ :let @*=@% :reg Em modo de inser c ao

<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 c~ oes registros 0-9 e a-z o nome do arquivo o conte udo de uma vari avel Big-Words veja se c~ ao 2.1

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

5.11

Listando os registros atuais

Digitando o comando

38 :reg ou ainda :ls

Registros

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

5.12

Listando arquivos abertos

Suponha que voc e abriu v arios arquivos txt assim: vim *.txt Para listar os arquivos aberto fa ca: :buffers Usando o comando acima o Vim exibir a a lista de todos os arquivos abertos, ap os exibir a lista voc e pode escolher um dos arquivos da lista, algo como: :buf 3 Para editar arquivos em sequ encia fa ca as altera c oes no arquivo atual e acesso o pr oximo assim: :wn O comando acima diz w gravar n pr oximo

5.13
:sn

Dividindo a janela com o pr oximo arquivo da lista de buers

O comando acima e uma abrevia c ao de split next, ou seja, dividir e pr oximo.

5.14

Como colocar um peda co de texto em um registro?

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

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

39

 H a situa c oes em que se tem caracteres n ao ascii

que s ao complicados de se colocar em uma busca ou substitui c ao, nestes casos pode-se usar os seguintes comandos: "ayl ............. copia para o registro a o caractere sob o cursor :%s/<c-r>a/char .. subsitui o conte udo do registro a por char Pode-se ainda usar esta t ecnica para copiar rapidamente coment arios do bash1 , representados pelo caracteres #, em modo normal usando o atalho 0yljP. 0 ............... yl .............. j ............... P ............... posiciona o cursor no in cio a linha copia o caractere sob o cursor desce uma linha cola o caractere copiado

5.15

Como criar um registro em modo visual?

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

5.16

Como denir um registro no vimrc?

Se voc e n ao sabe ainda como editar prefer encias no Vim leia antes o cap tulo 12. Voc e pode criar uma vari avel no vimrc assim:
1 Interpretador

de comandos do GNU/Linux

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

Registros

Neste caso estou dizendo a ele que guarde na vari avel d at d, o valor da data do sistema strftime("c") ou ent ao cole isto no vimrc: let @d=strftime("c")<cr> A diferen ca entre digitar diretamente um comando e adicion a-lo ao vimrc e que uma vez no vimrc o registro em quest ao estar a sempre dispon vel, observe tamb em as sutis diferen cas, um Enter inserido manualmente e apenas uma indica c ao de uma a c ao que voc e far a pressionando a tecla especicada, j a o comando mapeado vira <cr>, veja ainda que no vimrc os dois pontos : somem. Pode mapear tudo isto let @d=strftime("c")<cr> imap ,d <cr-r>d nmap ,d "dp As atribui c oes acima correspondem a: 1. Guarda a data na vari avel d 2. Mapeamento para o modo de inser c ao imap digite ,d 3. Mapeamento para o modo normal nmap digite ,d E digitar ,d normalmente 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 inser c ao assim: Ctrl-r d

5.17 Como selecionar blocos verticais de texto?

41

5.17

Como selecionar blocos verticais de texto?

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

5.18

Refer encias

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

Cap tulo 6

Buscas e Substitui c oes


Para fazer uma busca, certique-se de que est a em modo normal, pressione / e digite a express ao a ser procurada. Para encontrar a primeira ocorr encia de foo no texto: /foo Para repetir a busca basta pressionar a tecla n e para repetir a busca em sentido oposto N. /teste/+3 Posiciona o cursor tr es linhas ap os a ocorr encia da palavra teste

/\<casa\> A busca acima localiza casa mas n ao casamento. Em express oes regulares, \< e \> s ao representadas por \b, que representa, por sua vez, borda de palavras. Ou seja, casa,, casa! seriam localizado, visto que sinais de pontua c ao n ao fazem parte da palavra.

6.1

Usando Express oes Regulares em buscas


:h regex, pattern

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

inicia uma busca (modo normal) c odigo da letra i localiza a letra i - hexadecimal 069 localiza n umeros localiza n umeros de 3 at e 8

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

43

come co de linha final de linha um ou mais localiza somente d gitos localiza linhas terminadas com ^M localiza linhas vazias ou contendo apenas espa cos localiza linhas que iniciam com tabs localiza espa cos localiza espa cos no final da linha

6.1.1

Evitando escapes ao usar Express oes regulares

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

44

Buscas e Substitui c oes

Analisando o exemplo anterior, a linha de racioc nio foi a de manter o texto entre os d gitos, o que pode ser traduzido, em uma outra forma de racioc nio, como remover os d gitos. :%s/\d//g " explica c~ ao do comando acima % ......... em todo arquivo s ......... substitua / ......... inicia padr~ ao de busca \d ........ ao encontrar um d gito / ......... subtituir por vazio ..... exato, substituir por vazio /g ........ a express~ ao se torna gulosa Por guloso - /g - se entende que ele pode e deve tentar achar mais de uma ocorr encia do padr ao de busca na mesma linha. Caso n ao seja gulosa, a express ao ir a apenas casar com a primeira ocorr encia em cada linha. Classes POSIX para uso em Express oes Regulares Ao fazermos substitui c oes em textos poderemos nos deparar com erros, pois [a-z] n ao inclui caracteres acentuados, as classes POSIX s ao a solu c ao para este problema, pois adequam o sistema ao idioma local, esta e a m agica implementada por estas classes. [:lower:] ...... letras min usculas incluindo acentos [:upper:] ...... letras mai usculas incluindo acentos [:punct:] ...... ponto, virgula, colchete, etc Para usar estas classes fazemos: :%s/[[:lower:]]/\U&/g Explicando o comando acima: : ....... modo de comando % ....... em todo o arquivo atual s ....... substitua / ....... inicia o padr~ ao a ser buscado [ ....... inicia um grupo [: ...... inicia uma classe POSIX lower ... letras min usculas :] ...... termina a classe POSIX ] ....... termina o grupo / ....... inicia substitui c~ ao \U ...... para mai usculo & ....... correponde ao que foi buscado

6.2 Destacando padr oes

45

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

 Uma forma r apida para encontrar a pr oxima ocorr encia de uma palavra sob
o cursor e teclar *. Para encontrar uma ocorr encia anterior da palavra sob o cursor, existe o # (em ambos os casos o cursor deve estar posicionado sobre a palavra que deseja procurar). As duas op c oes citadas localizam apenas se a palavra corresponder totalmente ao padr ao sob o cursor, pode-se bucar por trechos de palavras que fa cam parte de palavras maiores usando-se g*. Podese ainda exibir dentro do contexto todas as ocorr encias de uma palavra sob o cursor usando-se o seguinte atalho em modo normal: [ Shift-i

6.2

Destacando padr oes


:h %>

Voc e pode destacar linhas com mais de 30 caracteres assim: :match ErrorMsg /\%>30v/ . destaca linhas maiores que 30 caracteres :match none .............. remove o destaque

6.3

Inserindo linha antes e depois

Suponha que se queira um comando, considere ,t, que fa ca com que a linha indentada corrente passe a ter uma linha em branco antes e depois; isto pode ser obtido pelo seguinte mapeamento: :map ,t <Esc>:.s/^\(\s\+\)\(.*\)/\r\1\2\r/g<cr> Explicando:

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

Buscas e Substitui c oes entra no modo de comando mapeia ,t para a fun c~ ao desejada ao executar sai do modo de inser c~ ao substitui isto por aquilo inicia o modo de comando na linha corrente substitua come co de linha um espa co ou mais (barras s~ ao escapes) qualquer coisa depois agrupo para referenciar com \1 repete na substitui c~ ao o grupo 1 insere uma quebra de linha em todas as ocorr^ encias da linha Enter

6.4

Obtendo informa co es do arquivo


ga ............. mostra o c odigo do caractere em decimal hexa e octal ^g ............. mostra o caminho e o nome do arquivo g^g ............ mostra estat sticas detalhadas do arquivo

Obs: O c odigo do caractere pode ser usado para substitui c oes, especialmente em se tratando de caracteres de controle como tabula c oes ^I ou nal de linha DOS/Windows \%x0d. Voc e pode apagar os caracteres de nal de linha Dos/Windows usando uma simples substitui c ao, veja mais adiante:

:%s/\%x0d//g Uma forma mais pr atica de substituir o terminador de linha DOS para o terminador de linha Unix:

:set ff=unix :w Na se c ao 12 p agina 79 h a um c odigo para a barra de status que faz com que a mesma exiba o c odigo do caractere sob o cursor na se c ao 12.10.2.  O caractere de nal de linha do Windows/DOS pode ser inserido com a seguinte combina c ao de teclas:

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

6.5 Trabalhando com registradores

47

6.5

Trabalhando com registradores

Pode-se guardar trechos do que foi copiado ou apagado para registros distintos ( area de transfer encia m ultipla). Os registros s ao indicados por aspas seguido por uma letra. Exemplos: "a, "b, "c, etc. simples: basta especicar o nome Como copiar o texto para um registrador? E 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 conte udo do registrador a o conte udo do registrador b 3 linhas para o registrador x linha para o registrador a 3 linhas para o registrador a uma palavra para o registrador a 3 palavras para o registrador a

No modo de inser c ao, como visto anteriormente, pode-se usar um atalho para colar rapidamente o conte udo de um registrador. Ctrl-r (registro) Para colar o conte udo do registrador a Ctrl-r a Para copiar a linha atual para a area de transfer encia "+yy Para colar da area de transfer encia "+p Para copiar o arquivo atual para a a rea de transfer encia clipboard: :%y+

6.6

Edi co es complexas

Trocando palavras de lugar: Posiciona-se o cursor no espa co antes da 1a palavra 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 mai usculo gggUG ggVGU

Buscas e Substitui c oes

6.7

Indentando
>> ..... ^t ..... ^d ..... >ip .... Indenta a linha atual Indenta a linha atual em modo de inser c~ ao Remove indenta c~ ao em modo de inser c~ ao indenta o par agrafo atual

6.8

Corrigindo a indenta c ao de c odigos

Selecione o bloco de c odigo, por exemplo vip ..... visual inner paragraph (selecione este par agrafo) = ....... corrige a indenta c~ ao do bloco de texto selecionado ggVG= .... corrige a identa c~ ao do arquivo inteiro

6.9

Usando o File Explorer

O Vim navega na arvore de diret orios com o comando vim . Use o j para descer e o k para subir ou Enter para editar o arquivo selecionado.  Pressionando F1 ao abrir o FileExplorer do Vim, voc e encontra dicas adicionais sobre este modo de opera c ao do Vim.

6.10 Selecionando ou deletando conte udo de tags HTML

49

6.10

Selecionando ou deletando conte udo de tags HTML

<tag> conte udo da tag </tag> basta usar (em modo normal) as teclas vit ............... visual inner tag | esta tag Este recurso tamb em funciona com par enteses vi( ..... visual select vi" ..... visual select di( ..... delete inner (, ou seja, seu conte udo

6.11

Substitui c oes

Para fazer uma busca, certique-se de que est a em modo normal, em seguida digite use o comando s, conforme ser a explicado. Para substituir foo por bar na linha atual: :s/foo/bar Para substituir foo por bar da primeira ` a d ecima linha do arquivo: :1,10 s/foo/bar Para substituir foo por bar da primeira ` au ltima linha do arquivo: :1,$ s/foo/bar Ou simplesmente: :% s/foo/bar $ ... significa para o Vim final do arquivo % ... representa o arquivo atual O comando s possui muitas op c oes que modicam seu comportamento.

6.12

Exemplos

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

50

Buscas e Substitui c oes

Buscar a if, while e for. Observe que e necess ario escapar os caracteres \(, \| e \), caso contr ario eles ser ao interpretados como caracteres comuns. Quebra de linha /quebra\nde linha Ignorando mai usculas e min usculas /\cpalavra Usando \c o Vim encontrar a palavra, Palavraa ou at e mesmo PALAVRA. Uma dica e colocar no seu arquivo de congura c ao vimrc veja o cap tulo 12 na p agina 79. set ignorecase .. ignora mai usculas e min usculas na bucsca set smartcase ... se busca contiver mai usculas ele passa a consider a-las set hlsearch .... mostra o que est a sendo buscado em cores set incsearch ... ativa a busca incremental se voc e n ao sabe ainda como colocar estas prefer encias no arquivo de congura c ao pode ativa-las em modo de comando precedendo-as com dois pontos, assim: :set ignorecase<Enter> Substitui c oes com conrma c ao: :%s/word/palavra/c ..... o c no final habilita a confirma c~ ao Procurando palavras repetidas /\<\(\w*\) \1\> Multilinha /Hello\_s\+World Buscar a World, separado por qualquer n umero de espa cos, incluindo quebras de linha. Buscar a as tr es sequ encias: Hello World Hello Hello World World

6.12 Exemplos Buscar linhas de at e 30 caracteres de comprimento /^.\{,30\}$ ^ . ..... representa come co de linha ..... 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 par agrafos diminuindo para uma s o linha vazia. :%s/\(^\n\{2,}\)/\r/g Voc e pode criar um mapeamento e colocar no seu /.vimrc map ,s <Esc>:%s/\(^\n\{2,}\)/\r/g<cr> No exemplo acima, ,s e um mapeamento para reduzir linhas em branco sucessivas para uma s o Remove n ao d gitos (n ao pega n umeros) :%s/^\D.*//g Remove nal de linha DOS/Windows ^M que tem c odigo hexadecimal igual a 0d :%s/\%x0d//g Troca palavras de lugar usando express oes regulares: :%s/\(.\+\)\s\(.\+\)/\2 \1/ Modicando todas as tags HTML para min usculo: :%s/<\([^>]*\)>/<\L\1>/g Move linhas 10 a 12 para al em da linha 30: :10,12m30

52

Buscas e Substitui c oes

6.13

O comando global g

Buscando um padr ao e gravando em outro arquivo: :a,b g/^Error/ . w >> errors.txt Apenas imprimir linhas que cont em determinada palavra, isto e u til quando voc e quer ter uma vis ao sobre um determina aspecto do seu arquivo vejamos: :set nu ..... habilita numera c~ ao :g/Error/p .. apenas mostra as linhas correspondentes

 Para mostrar o as linhas correspondentes a um padr ao, mesmo que a numera c ao de linha n ao esteja habilitada use :g/padr~ ao/#. numerar linhas: :let i=1 | g/^/s//\=i."\t"/ | let i=i+1 Outro modo de inserir n umeros de linha :%s/^/\=line(.). : ............ % ............ s ............ / ............ ^ ............ / ............ \=line(.) .. . ........

comando em todo o arquivo substitui c~ ao inicio da busca come co de linha inicio da substitui c~ ao corresponde ao no da linha atual concatena um espa co ap os o no

Para copiar linhas come cadas com Error para o nal do arquivo fa ca: :g/^Error/ copy $ Obs: O comando copy pode ser abreviado co ou ainda pode-se usar t para mais detalhes: :h co Como adicionar um padr ao copiado com yy ap os um determinado padr ao? :g/padrao/+put! :g/padrao/.put=teste Entre as linhas que contiverem fred e joe substitua:

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

53

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

Incrementar n umeros no come co da linha: :.,20g/^\d/exe "normal! \<c-a>" Sublinhar linhas come cadas com Chapter: :g/^Chapter/t.|s/./-/g : ........ g ........ / ........ ^ ........ Chapter .. comando global inicio de um padr~ ao come co de linha palavra literal

54 / t . s / . / / g ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ fim do par~ ao copia linha atual substitua inicio de um padr~ ao qualquer caractere in cio da substitui c~ ao por tra co fim da substitui c~ ao em todas as ocorr^ encias

Buscas e Substitui c oes

6.14

Dicas

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

6.15

Filtrando arquivos com o vimgrep

Por vezes sabemos que aquela anota c ao foi feita, mas no momento esquecemos em qual arquivo est a, no exemplo abaixo procuramos a palavra dicas ` a partir da nossa pasta pessoal pela palavra dicas em todos os arquivos com extens ao txt. ~/ ............ equivale a /home/user :lvimgrep /dicas/gj ~/**/*.txt | ls :h lvim ....... ajuda sobre o comando

6.16

Copiar a partir de um ponto

:19;+3 co $ O Vim sempre necessita de um intervalo (inicial e 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 an aloga pode-se usar como refer encia um padr ao qualquer: :/palavra/;+10 m 0 O comando acima diz: a ` partir da linha que cont em palavra incluindo as 10 pr oximas linhas mova m para a primeira linha 0, ou seja, antes da linha 1.

6.17 Dicas das lista vi-br

55

6.17

Dicas das lista vi-br

Fonte: Grupo vi-br do yahoo [4] Problema: Essa deve ser uma pergunta comum. Suponha o seguinte conte udo de arquivo: ... // v arias linhas texto1000texto // texto1000texto // texto1000texto // texto1000texto // texto1000texto // ... // v arias linhas

linha linha linha linha linha

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

Gostaria de um comando que mudasse para ... // v arias linhas texto1001texto // texto1002texto // texto1003texto // texto1004texto // texto1005texto // ... // v arias linhas

linha linha linha linha linha

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

Ou seja, somasse 1 a cada um dos n umeros entre os textos especicando como range as linhas i,i+4 :10,20! awk BEGIN{i=1}{if (match($0, +)) print o (substr($0, RSTART, RLENGTH) + i++) o} Mas muitos sistemas n ao tem awk, e logo a melhor solu c ao mesmo e usar o Vim: :let i=1 | 10,20 g/texto\d\+texto/s/\d\+/\=submatch(0)+i/ | let i=i+1 Observa c ao: 10,20 e o intervalo, ou seja, da linha 10 at e a linha 20 :help / :help :s :help pattern

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

56

Buscas e Substitui c oes

6.18

Jun c ao de linhas com Vim

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

6.19

Buscando em um intervalo de linhas

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

Cap tulo 7

Trabalhando com Janelas


O Vim trabalha com o conceito de m ultiplos buers de arquivo. Cada buer e um arquivo carregado para edi c ao. Um buer pode estar vis vel ou n ao, e e poss 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 a desaparecer da janela atual cedendo lugar ao mais novo, mas permanecer a ativo no buer para futuras modica c oes. Para saber quantos documentos est ao abertos no momento utiliza-se o comando :ls ou :buers. Esses comandos listam todos os arquivos que est ao referenciados no buer com suas respectivas chavesde referencia. Para trocar a visualiza c ao do Buer atual pode-se usar:

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

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

7.2

Modos de divis ao da janela

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

58

Trabalhando com Janelas

7.2.1

Utilizando abas tab

A partir do Vim 7 foi disponibilizada a fun c ao de abrir arquivos em abas, portanto e poss vel ter v arios buers abertos em abas distintas e alternar entre elas facilmente. Os comandos para utiliza c ao das abas s ao: :tabnew ........... Abre uma nova tab :tabprevious ...... Vai para a tab anterior :tabnext .......... Vai para a pr oxima tab

7.2.2

Utilizando split horizontal

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

7.2.3

Utilizando split vertical

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

7.3

Abrindo e fechando janelas


Ctrl-w-s 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 unica (:only) 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 e fechado, o que est a sendo fechado e a visualiza c ao do mesmo, pois ele continua aberto no buer.

7.4

Salvando e saindo

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

7.5 Manipulando janelas

59

7.5

Manipulando janelas
Ctrl-w-w 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 espa co da janela atual Diminui o espa co da janela atual

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

7.6

File Explorer
:h buers windows

Para abrir o gerenciador de arquivos do Vim use: :Vex ............ abre o :Sex ............ abre o :Tex ............ abre o :e .............. abre o ap os abrir chame a ajuda 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 poss E vel mapear um atalho no caso abaixo F2 para abrir o File Explorer. map <F2> <Esc>:Vex<cr>

 Ao editar um arquivo no qual h a refer encia a um outro arquivo, por exemplo:


/etc/hosts, pode-se usar o atalho Ctrl-w f para abri-lo em nova janela, ou gf para abri-lo na janela atual. Mas e importante posicionar o cursor sobre o nome do arquivo. Veja tamb em mapeamentos na se c ao 12.8 p agina 83.

Cap tulo 8

Repeti c ao de Comandos
Para repetir a u ltima edi c ao saia do modo de Inser c ao e pressione ponto (.): . Para inserir um texto que deve ser repetido v arias vezes: 1. Posicione o cursor no local desejado; 2. Digite o n umero de repeti c oes; 3. Entre em modo de inser c ao; 4. Digite o texto; 5. Saia do modo de inser c ao (tecle Esc). Por exemplo, se voc e quiser inserir oitenta tra cos numa linha, em vez de digitar um por um, voc e pode digitar o comando: 80i-<Esc> Veja, passo a passo, o que aconteceu: Antes de entrar em modo de inser c ao usamos um quanticador 80 depois iniciamos o modo de inser c ao i depois digitamos o caractere a ser repetido -

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

61

8.1

Repetindo a digita c ao de uma linha


modo de inser c~ ao Ctrl-y .......... repete a linha acima Ctrl-e .......... repetira linha abaixo Ctrl-x Ctrl-l ... repete linhas completas

O atalho Ctrl-x Ctrl-l s o funcionar a para uma linha semelhante, experimente digitar: uma linha qualquer com algum conte udo uma linha <Ctrl-x Ctrl-l> e veja o resultado

8.2

Guardando trechos em registros

Os registradores a-z s ao uma esp ecie de area de transfer encia m ultipla. Deve-se estar em modo normal e ent ao digitar aspas duplas e uma das 26 letras do alfabeto, em seguida uma a c ao por exemplo, y (copiar) d (apagar). Depois, mover o cursor para a linha desejada e colar com "rp, onde r corresponde ao registrador para onde o trecho foi copiado. "ayy ... copia a linha atual para o registrador a "ap ... cola o conte udo do registrador a abaixo "bdd ... apaga a linha atual para o registrador b

62

Repeti c ao de Comandos

8.3

Gravando comandos

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

N ao e poss vel simplesmente executar repetidas vezes um comando do Vim, pois necess e preciso incluir texto tanto no come co quanto no m da linha? E ario a mais de um comando para isso. E que entram as macros. Pode-se gravar at e 26 macros, j a que elas s ao guardadas nos registros do Vim, que s ao identicados pelas letras do alfabeto. Para come car a gravar uma macro no registro a, digitamos qa No modo Normal. Tudo o que for digitado a partir de ent ao, ser a gravado no registro a at e que seja conclu do com o comando <Esc>q novamente (no modo 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 c~ ao da macro a entra no modo de inser c~ ao no come co da linha insere #include " sai do modo de inser c~ ao insere o ultimo caractere sai do modo de inser c~ ao desce uma linha sai do modo de inser c~ ao para a grava c~ ao da macro

Agora s o e preciso posicionar o cursor na primeira letra de uma linha como esta stdio.h E executar a macro do registro a quantas vezes for necess ario, usando o comando @a. Para executar quatro vezes, digite: 4@a

8.4 Repetindo substitui c oes Este comando executa quatro vezes o conte udo do registro a. Caso tenha sido executada, a macro pode ser repetida com o comando @@

63

8.4

Repetindo substitui co es

Caso seja feito uma substitui c ao em um intervalo como abaixo :5,32s/isto/aquilo/g Pode-se repetir esta substitui c ao em qualquer linha que estiver apenas usando este s mbolo & O Vim substituir a na linha corrente isto por aquilo. Podendo repetir a u ltima substitui c ao globalmente assim: g&

8.5
@:

Repetindo comandos

O atalho acima repete o u ltimo comando no pr oprio modo de comandos

8.6

Scripts Vim

Usando um script para modicar um nome em v arios arquivos: Crie um arquivo chamado subst.vim contendo os comandos de substitui c ao e o comando de salvamento :wq. %s/bgcolor="eeeeee"/bgcolor="ffffff"/g wq Para executar um script, digite o comando :source nome_do_script.vim O comando :source tamb em pode ser abreviado com :so bem como ser usado para testar um esquema de cor: :so tema.vim

64

Repeti c ao de Comandos

8.7

Usando o comando bufdo

Com o comando :bufdo, pode-se executar um comando em um conjunto de arquivos de forma r apida. No exemplo a seguir, ser ao abertos todos os arquivos HTML do diret orio atual, ser a efetuado uma substitui c ao e em seguida ser ao todos salvos. vim *.html :bufdo %s/bgcolor="eeeeee"/bgcolor="ffffff"/ge | :wall :qall O comando :wall salva write todos all os arquivos abertos pelo comando vim *.html. Opcionalmente voc e pode combinar :wall e :qall com o comando :wqall, que salva todos os arquivos abertos e em seguida sai do Vim. A op c ao e faz com que o vim n ao exiba mensagens de erro caso o buer em quest ao n ao contenha o padr ao a ser substitu do.

8.8

Colocando a u ltima busca em um comando

Observa c ao: lembre-se Ctrl = ^ :^r/

8.9

Inserindo o nome do arquivo no comando


:^r%

8.10
^r:

Inserindo o u ltimo comando

Se preceder com : voc e repete o comando, equivale a acessar o hist orico de comandos com as setas :^r:

8.11

Inserindo a palavra sob o cursor em um comando

O comando abaixo pode ser usado para pegar por exemplo, a palavra que est a atualmente sob o cursor, e coloca-la em um comando de busca. ^r^w

8.12 Para repetir exatamente a u ltima inser c ao

65

8.12

Para repetir exatamente a u ltima inser c ao

i<c-a>

Cap tulo 9

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

9.1

Ordenando

Podemos usar o comando sort que ordena o conte udo de um arquivo dessa forma: :5,15!sort ..... ordena da linha 5 at e a linha 15 O comando acima ordena da linha 5 at e a linha 15. O comando sort existe tanto no Windows quanto nos sistemas Unix. Digitando simplesmente sort, sem argumentos, o comportamento padr ao e de classicar na ordem alfab etica (baseando-se na linha inteira). Para mais informa c oes sobre argumentos do comando sort, digite: sort --help ou man sort (no Unix) ou sort /? (no Windows).

9.2 Removendo linhas duplicadas

67

9.2

Removendo linhas duplicadas


:%!uniq

O caractere % representa a regi ao equivalente ao arquivo atual inteiro. A vers ao do Vim 7 em diante tem um comando sort que permite remover linhas duplicadas uniq e ordenar, sem a necessidade de usar comandos externos, para mais detalhes: :h sort

9.3

Ordenando e removendo linhas duplicadas no Vim 7


:sort u

Quando a ordena c ao envolver n umeros faz-se: :sort n

9.4

Beautiers

A maior parte das linguagens de programa c ao possui ferramentas externas chamadas beautiers, que servem para embelezar o c odigo, atrav es da indenta c ao e espa camento. Por exemplo, para embelezar um arquivo HTML e poss vel usar a ferramenta tidy1 , do W3C: :%!tidy

9.5

Editando comandos longos no Linux

comum no ambiente GNU/Linux a necessidade de digitar comandos longos E no terminal, para facilitar esta tarefa pode-se seguir estes passos: 1. Denir o Vim como editor padr ao do sistema editando o arquivo .bashrc2 : #configura o vim como editor padr~ ao export EDITOR=vim export VISUAL=vim 2. No terminal usar a combina ca o de teclas Ctrl-x-e. Esta combina c ao de teclas abre o editor padr ao do sistema onde se deve digitar o comando longo, ao sair do editor o terminal executa o comando editado.
1 http://tidy.sourceforge.net/ 2 Arquivo

de congura ca o do bash

68

Comandos Externos

9.6

Compilando e vericando erros


:h cwindow quickx-window

Se o seu projeto j a possui um Makefile, ent ao voc e pode fazer uso do comando :make para poder compilar seus programas no conforto de seu Vim: :make A vantagem de fazer isso e poder usar outra ferramenta bastante interessante, a janela de quickx: :cw[indow] O comando cwindow abrir a uma janela em um split horizontal com a listagem de erros e warnings. Voc e poder a navegar pela lista usando os cursores e ir diretamente para o arquivo e linha da ocorr encia. Modicando o compilador, o comando make pode mudar sua a c ao. :compiler javac :compiler gcc :compiler php Note que php n ao tem um compilador. Logo, quando executado, o make ir a 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 e usa grep na sua linha de comando voc e pode usar o grep interno do Vim. Exatamente do mesmo jeito: :grep <caminho> <padr~ ao> <op c~ oes> Use a janela de quickx3 aqui tamb em para exibir os resultados do grep e poder ir diretamente a eles.
3 :cope

9.8 Indent

69

9.8

Indent

Indent4 e um programa que indenta seu c odigo fonte de acordo com os padr oes congurados no seu arquivo HOME/.indent.pro. Vou pressupor que voc e j a saiba usar o indent e como fazer as congura c oes necess arias para ele funcionar, ent ao vamos ao funcionamento dele no Vim: Para indentar um bloco de c odigo, primeiro selecione-o com o modo visual line (com V), depois e s o entrar com o comando como se fosse qualquer outro comando externo: :!indent No caso, como foi selecionado um bloco de c odigo, ir ao aparecer alguns caracteres extras, mas o procedimento continua o mesmo: :<,>!indent

9.9

Calculadora Cient ca com o Vim

Para usar a fun c ao de Calculadora Cient ca no Vim usamos uma ferramenta externa, que pode ser o comando bc do GNU/Linux, ou uma linguagem de programa c ao como Python ou Ruby, veremos como habilitar a calculadora usando o Python. Obviamente esta linguagem de programa c ao deve estar instalada no sistema em que se deseja usar seus recursos. Deve-se testar se a vers ao do Vim tem suporte ao Python :version, em seguida colocam-se os mapeamentos no .vimrc. :command! -nargs=+ Calc :py print <args> :py from math import * Feito isto pode-se usar o comando :Calc como visto abaixo: :Calc :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 a-las por e-mail, reportar ao chefe ou at e mesmo salv a-las. Utilizando
4 http://www.gnu.org/software/indent

70 vim ou gvim -

Comandos Externos

a sa da do Shell e redirecionada para o (G)Vim automaticamente, n ao sendo necess ario redirecion a-la para um arquivo tempor ario e, logo ap os, abr -lo para edit a-lo e modic a-lo. Quem trabalha com sistemas de controle de vers ao como svn pode visualizar as diferen cas entre o c odigo que est a sendo editado e o que est a no reposit orio com sintaxe colorida desta forma: svn diff | view Outra situa c ao em que se pode combinar o vim com saidas do shell e com o comando grep. Usando-se a op c ao -l do grep listamos apenas os arquivos que correspondem a um padr ao. grep -irl voyeg3r . ./src/img/.svn/entries ./src/Makefile ./src/vimbook.tex Pode-se em seguida chamar o vim usando substitui c ao de comandos, como o comando !! corresponde ao u ltimo comando, e neste caso a saida corresponde a uma lista de arquivos que cont em o padr ao a ser editado faz-se: vim ${!!}

9.11

Log do Subversion

A vari avel de ambiente $SVN EDITOR pode ser usada para se especicar o caminho para o editor de texto de sua prefer encia, a m de us a-lo na hora de dar um commit usando o subversion. export SVN_EDITOR=/usr/bin/vim svn commit Ser a aberto uma sess ao no Vim, que depois de salva, ser a usada para LOG do commit.

9.12

Refer encias

http://www.dicas-l.com.br/dicas-l/20070119.php http://vim.wikia.com/wiki/Scientific_calculator http://docs.python.org/library/cmath.html http://docs.python.org/library/math.html

Cap tulo 10

Verica c ao Ortogr aca


:h spell

O Vim possui um recurso nativo de verica c ao ortogr aca (spell) em tempo de edi c ao, apontando palavras e express oes desconhecidasusualmente erros de graaenquanto o usu ario as digita. Basicamente, para cada palavra digitada o Vim procura por sua graa em um dicion ario. N ao encontrando-a, a palavra e marcada como desconhecida (sublinhando-a ou alterando sua cor), e fornece ao usu ario mecanismos para corrigi-la (atrav es de sugest oes) ou cadastr a-la no dicion ario caso esteja de fato grafada corretamente.

10.1

Habilitando a verica c ao ortogr aca


:h spell, spelllang

A verica c ao ortogr aca atua em uma linguagem (dicion ario) por vez, portanto, sua efetiva habilita c ao depende da especica c ao desta linguagem. Por exemplo, para habilitar no arquivo em edi c ao a verica c ao ortogr aca na l ngua portuguesa (pt), assumindo-se a exist encia do dicion ario em quest ao: :setlocal spell spelllang=pt ou de forma abreviada: :setl spell spl=pt Trocando-se setlocal (setl) por apenas set (se) faz com que o comando tenha efeito global, isto e, todos os arquivos da sess ao corrente do Vim estariam sob efeito da verica c ao ortogr aca e do mesmo dicion ario (no caso o pt). A desabilita c ao da verica c ao d a-se digitando:

72 :setlocal nospell :set nospell

Verica c ao Ortogr aca

(efeito global)

Caso queira-se apenas alterar o dicion ario de verica c ao ortogr aca, suponha para a l ngua inglesa (en), basta: :setlocal spelllang=en :set spelllang=en

(efeito global)

10.1.1

Habilita c ao autom atica na inicializa c ao


:h autocmd, Filetype, BufNewFile, BufRead

` vezes torna-se cansativo a digita As c ao expl cita do comando de habilita c ao da verica c ao ortogr aca sempre quando desejada. Seria conveniente se o Vim habilitasse automaticamente a verica c ao para aqueles tipos de arquivos que comumente fazem uso da verica c ao ortogr aca, como por exemplo arquivos texto. Isto e poss vel editando-se o arquivo de congura c ao do Vim .vimrc (veja Cap. 12) e incluindo as seguintes linhas: autocmd Filetype text setl spell spl=pt autocmd BufNewFile,BufRead *.txt setl spell spl=pt Assim habilita-se automaticamente a verica c ao ortogr aca usando o dicion ario da l ngua portuguesa (pt) para arquivos do tipo texto e os terminados com a extens ao .txt. Mais tecnicamente, diz-se ao Vim para executar o comando setl spell spl=pt sempre quando o tipo do arquivo (Filetype) for text (texto) ou quando um arquivo com extens ao .txt for carregado (BufRead) ou criado (BufNewFile).

10.2

O dicion ario de termos

A qualidade da verica c ao ortogr aca do Vim est a diretamente ligada ` a completude e corretude do dicion ario da linguagem em quest ao. Dicion arios pouco completos s ao inconvenientes ` a medida que acusam falso positivos em demasia; pior, dicion arios contendo palavras grafadas incorretamente, al em de acusarem falso positivos, induzem o usu ario ao erro ao sugerirem graas erradas. razoavelmente comum o Vim j E a vir instalado com dicion arios de relativa qualidade para algumas linguagens (ao menos ingl es, habitualmente). Entretanto, ainda e raro para a maioria das instala c oes do Vim trazer por default um dicion ario realmente completo e atualizado da l ngua portuguesa. A pr oxima se c ao sintetiza, pois, os passos para a instala c ao de um excelentee dispon vel livrementedicion ario de palavras para a l ngua portuguesa.

10.2 O dicion ario de termos

73

10.2.1

Dicion ario portugu es segundo o acordo ortogr aco

A equipe do projeto BrOffice.org e seus colaboradores mant em e disponibilizam livremente um grandioso dicion ario de palavras da l ngua portuguesa. Al em do expressivo n umero de termos, o dicion ario contempla as mudan cas ortogr acas denidas pelo Acordo Ortogr aco [8] que entraram em vigor no in cio de 2009. A instala c ao envolve tr es passos, s ao eles: 1. obten c ao do dicion ario atrav es do site BrOffice.org; 2. convers ao para o formato interno de dicion ario do Vim; e 3. instala c ao dos arquivos resultantes. Obten c ao do dicion ario O dicion ario pode ser obtido no site do br.oce.org [9]. O arquivo baixado encontra-se compactado no formato Zip, bastando portanto descompact a-lo com qualquer utilit ario compat vel com este formato, por exemplo, o comando unzip. Convers ao do dicion ario
:h mkspell

Ap os a descompacta c ao, os arquivos pt_BR.aff e pt_BR.dic, extra dos no diret orio corrente1 , ser ao usados para a cria c ao dos dicion arios no formato interno do Vim2 . A convers ao propriamente dita e feita pelo pr oprio Vim atrav es do comando mkspell: 1. Carrega-se o Vim a partir do diret orio onde foram extra dos pt_BR.aff e pt_BR.dic 2. O comando mkspell e ent ao executado como: :mkspell pt pt_BR O Vim ent ao gera um arquivo de dicion ario da forma pt.<codifica c~ ao>.spl, onde <codifica c~ ao> e a codica c ao de caracteres do sistema, normalmente utf-8 ou latin1; caso queira-se um dicion ario em uma codica c ao diferente da padr ao ser a preciso ajustar a vari avel encoding antes da invoca c ao do comando mkspell: :set encoding=<codifica ca ~o> :mkspell pt pt_BR
1 Eventualmente, dependendo da vers ao do pacote de corre ca o ortogr aca, os arquivos de dicion ario podem ser extra dos no subdiret orio dictionaries ou outro qualquer. 2 O formato interno de dicion ario do Vim assegura melhor desempenho, em termos de agilidade e consumo de mem oria, quando a verica c ao ortogr aca do editor encontra-se em opera c ao.

74 Instala c ao do(s) dicion ario(s) gerado(s)

Verica c ao Ortogr aca

:h runtimepath

Finalmente, o dicion ario geradoou os dicion arios, dependendo do uso ou n ao de codica c oes diferentesdeve ser copiado para o subdiret orio spell/ dentro de qualquer caminho (diret orio) que o Vim enxergue. A lista de caminhos lidos pelo Vim encontra-se na vari avel runtimepath, que pode ser inspecionada atrav es de: :set runtimepath suciente ent E ao copiar o dicion ario pt.<codifica c~ ao>.spl para o subdiret orio spell/ em qualquer um dos caminhos listados atrav es do comando mostrado.

10.3

Comandos relativos ` a verica c ao ortogr aca


Encontrando palavras desconhecidas

10.3.1

Muito embora o vericador ortogr aco cheque imediatamente cada palavra digitada, sinalizando-a ao usu ario caso n ao a reconhe ca, ` as vezes e mais apropriado realizar a verica c ao ortogr aca do documento por inteiro. O Vim disp oe de comandos espec cos para busca e movimenta c ao em palavras grafadas incorretamente (desconhecidas) no escopo do documento, dentre eles: ]s ..... vai para a pr oxima palavra desconhecida [s ..... como o ]s, mas procura no sentido oposto Ambos os comandos aceitam um prexo num erico, que indica a quantidade de movimenta c oes (buscas). Por exemplo, o comando 3]s vai para a terceira palavra desconhecida a partir da posi c ao atual.

10.3.2

Tratamento de palavras desconhecidas

H a basicamente duas opera c oes poss veis no tratamento de uma palavra apontada pelo vericador ortogr aco do Vim como desconhecida: 1. corrigi-la identicando o erro com ou sem o aux lio das sugest oes do Vim. 2. cadastr a-la no dicion ario ensinando o Vim a reconhecer sua graa. Assume-se nos comandos descritos nas se c oes a seguir que o cursor do editor encontra-se sobre a palavra marcada como desconhecida.

10.3 Comandos relativos ` a verica c ao ortogr aca Corre c ao de palavras grafadas incorretamente

75

poss E vel que na maioria das vezes o usu ario perceba qual foi o erro cometido na graa, de forma que o pr oprio possa corrigi-la sem aux lio externo. No entanto, algumas vezes o erro n ao e evidente, e sugest oes fornecidas pelo Vim podem ser bastante convenientes. Para listar as sugest oes para a palavra em quest ao executa-se: z= ..... solicita sugest~ oes ao verificador ortogr afico Se alguma das sugest oes e v alida as mais prov aveis est ao nas primeiras posi c oes ent ao basta digitar seu prexo num erico e pressionar <Enter>. Se nenhuma sugest ao for adequada, basta simplesmente pressionar <Enter> e ignorar a corre c ao. Cadastramento de novas palavras no dicion ario Por mais completo que um dicion ario seja, eventualmente palavras, especialmente as de menor abrang encia, ter ao que ser cadastradas a m de aprimorar a exatid ao da verica c ao ortogr aca. A manuten c ao do dicion ario d a-se pelo cadastramento e retirada de palavras: zg ..... adiciona a palavra no dicion ario zw ..... retira a palavra no dicion ario, marcando-a como desconhecida

Cap tulo 11

Salvando Sess oes de Trabalho


Suponha a situa c ao em que um usu ario est a trabalhando em um projeto no qual v arios arquivos s ao editados simultaneamente; quatro arquivos est ao abertos, algumas macros foram criadas e vari aveis que n ao constam no vimrc foram denidas. Em uma situa c ao normal, se o Vim for fechado a quase totalidade dessas informa c oes se perde1 ; para evitar isto uma sess ao pode ser criada, gerando-se um retrato do estado atual, e ent ao restaurada futuramente pelo usu ariona pr atica e como se o usu ario n ao tivesse sa do do editor. Uma sess ao do Vim guarda, portanto, uma s erie de informa c oes sobre a edi c ao corrente, de modo a permitir que o usu ario possa restaur a-la quando desejar. Sess oes s ao bastante u teis, por exemplo, para se alternar entre diferentes projetos, carregando-se rapidamente os arquivos e deni c oes relativas a cada projeto.

11.1

O que uma sess ao armazena?

Uma sess ao e composta das seguintes informa c oes: Mapeamentos globais Vari aveis globais Arquivos abertos incluindo a lista de buers Diret orio corrente (:h curdir) Posi c ao e tamanho das janelas (o layout)
1 Algumas informa c oes, no entanto, s ao automaticamente armazenadas no arquivo viminfo; veja :h viminfo

11.2 Criando sess oes

77

11.2

Criando sess oes

Sess oes s ao criadas atrav es do comando :mksession: :mks[ession] sessao.vim .... cria a sess~ ao e armazena-a em sessao.vim :mks[ession]! sessao.vim ... salva a sess~ ao e sobrescreve-a em sessao.vim

11.3

Restaurando sess oes

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

11.4

Viminfo

Se o Vim for fechado e iniciado novamente, normalmente perder a uma por c ao consider avel de informa c oes. A diretiva viminfo pode ser usada para memorizar estas informa c oes. Hist orico da linha de comando Hist orico de buscas Hist orico de entradas input-line history Conte udo de registros n ao vazios Marcas de v arios arquivos

78 Ultimo padr ao de busca/substitui c ao A lista de buers Vari aveis globais

Salvando Sess oes de Trabalho

Deve-se colocar no arquivo de congura c ao algo como: set viminfo=%,50,\"100,/100,:100,n Algumas op oes da diretiva viminfo: ! Quando inclu do salva e restaura vari aveis globais (vari aveis com letra mai uscula) e que n ao cont em letras em min usculo como MANTENHAISTO. N umero m aximo de linhas salvas para cada registro. % Quando inclu do salva e restaura a lista de buers. Caso o Vim seja iniciado com um nome como argumento, a lista de buers n ao e restaurada. Buers sem nome e buers de ajuda n ao s ao armazenados no viminfo. N umero m aximo de arquivos rec em editados. / M aximo de itens do hist orico de buscas. : M aximo de itens do hist orico da linha de comando < N umero m aximo de linhas salvas por cada registro, se zero os registros n ao ser ao salvos. Quando n ao inclu do, todas as linhas s ao salvas. Para ver mais op c oes sobre o arquivo viminfo leia :h viminfo. Pode-se tamb em usar um arquivo de Sess ao. A diferen ca e que viminfo n ao depende do local de trabalho (escopo). Quando o arquivo viminfo existe e n ao est a vazio, as informa c oes novas s ao combinadas com as existentes. A op c ao viminfo e uma string contendo informa c oes sobre o que deve ser armazenado, e cont em limites de o quanto vai ser armazenado para cada item.

Cap tulo 12

Como Editar Prefer encias no Vim


O arquivo de prefer encias do Vim e nomeado vimrc, um arquivo oculto que normalmente encontra-se no diret orio de trabalho (home) do usu ario: ~/.vimrc /home/usuario/.vimrc No sistema operacional Windows o arquivo costuma ser: ~\_vimrc c:\documents and settings\usuario\_vimrc

12.1

Onde colocar plugins e temas de cor

No Windows deve haver uma pasta chamada vimfiles (caso n ao exista deve-se cri a-la), que ca em: c:\documents and settings\usuario\vimfiles No GNU/Linux a pasta de arquivos do Vim e chamada .vim, comumente armazenada 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 Prefer encias no Vim

Os plugins, como se pode deduzir, devem ser colocados no diret orio denominado plugin.  Na se c ao Plugins 15 (p. 106) est ao descritos alguns plugins para o Vim.

12.2

Coment arios

Coment arios s ao linhas que s ao ignoradas pelo interpretador Vim e servem normalmente para descri c ao de comandos e a c oes, deixando portanto mais leg vel e did atico o arquivo de congura c ao. Uma linha e um coment ario se seu primeiro caractere e uma aspa ": " linhas come cadas com aspas s~ ao coment arios " e portanto ser~ ao ignoradas pelo Vim Recomenda-se usar coment arios ao adicionar ou modicar comandos no arquivo vimrc, pois assim torna-se mais f acil futuras leituras e modica c oes neste arquivo.

12.3

Efetiva c ao das altera co es no vimrc

As altera c oes no vimrc s o ser ao efetivadas na pr oxima vez que o Vim for aberto, a n ao ser que o recarregamento do arquivo de congura c ao seja instru do explicitamente: :source ~/vimrc ....... se estiver no GNU/Linux :source ~/_vimrc ...... caso use o Windows :so arquivo ........... so e uma abrevia c~ ao de source

12.4

Set

Os comandos set, respons aveis por atribuir valores ` a vari aveis, podem ser colocados 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 c~ ao de linhas "simplifica c~ ao de number "mostra o modo em que estamos "mostra no status os comandos inseridos "tamanho das tabula c~ oes "simplifica c~ ao de tabstop "quantidade de espa cos de uma tabula c~ ao set sw=4 ................. "simplifica c~ ao de shiftwidth syntax on ................ "habilita cores syn on ................... "simplifica c~ ao de syntax colorscheme tema ......... "esquema de cores syntax highlight autochdir ................ "configura o diret orio de trabalho set hls .................. "destaca com cores os termos procurados set incsearch ............ "habilita a busca incremental set ai ................... "auto identa c~ ao set aw ................... "salva automaticamente ao trocar de buffer set ignorecase ........... "ignora mai usculas e min usculas nas buscas set ic ................... "simplifica c~ ao de ignorecase set smartcase ............ "numa busca em mai usculo habilita case set scs .................. "sin^ onimo de smartcase set backup ............... "habilita a cria c~ ao de arquivos de backup set bk ................... "simplifica c~ ao de backup set backupext=.backup .... "especifica a extens~ ao do arquivo de backup set bex=.backup .......... "simplifica c~ ao de backupext set backupdir=~/.backup,./ "diret orio(s) para arquivos de backup set bdir ................. "simplifica c~ ao de backupdir set nobackup ............. "evita a cria c~ ao de arquivos de backup ste nobk ................. "simplifica c~ ao de nobackup set cursorline ........... "abrevia c~ ao de cursor line (destaca linha atual) set cul .................. "simplifica c~ ao de cursorline set ttyfast .............. "melhora o redraw de janelas. set columns=88 ........... "deixa a janela com 88 colunas. set mousemodel=popup ..... "exibe o conte udo de folders e sugest~ oes spell set viminfo=%,50,\"100,/100,:100,n "armazena op c~ oes (buffers)

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

82

Como Editar Prefer encias no Vim

12.5

Ajustando par agrafos em modo normal

O comando gqap ajusta o par agrafo atual em modo normal.  usando a op c ao :set nojoinspaces o vim colocar a dois espa cos ap os o ponto nal ao se ajustar os par agrafos. geralmente usamos ^I para representar uma tabula c ao <Tab>, e $ para indicar o m de linha. Mas e poss vel customizar essas op c oes. sintaxe:

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

12.6

Exibindo caracteres invis veis

:set list

12.7 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 fa ca: @s O Vim colocar a no comando :sort -u Bastando pressionar <Enter>. Observa c ao: Este registro pr evio pode car no vimrc ou ser digitado em comando : :5,20sort u "da linha 5 at e a linha 20 ordene e retire duplicados :sort n " ordene meu documento considerando n umeros " isto e util pois se a primeira coluna contiver " n umeros a ordena c~ ao pode ficar errada caso n~ ao usemos " o par^ ametro n

12.8

Mapeamentos
:h key-mapping, mapping, index

Mapeamentos permitem criar atalhos de teclas para quase tudo. Tudo depende da criatividade do usu ario e do quanto conhece o Vim, com eles podemos controlar a c oes com quaisquer teclas, mas antes temos que saber que para criar mapeamentos, precisamos conhecer a maneira de representar as teclas e combina c oes. Alguns exemplos: 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 Prefer encias no Vim arquivo sob o cursor arquivo sob o cursor sem extens~ ao conte udo do arquivo sob o cursor salta um caractere para esquerda equivale clicar em seta acima a tecla alt -> m mais a tecla f4 Ctrl-f backspace espa co tab

No Vim podemos mapear uma tecla para o modo normal, realizando determinada opera c ao e a mesma tecla pode desempenhar outra fun c ao qualquer em modo de inser c ao ou comando, veja: " mostra o nome do arquivo com o caminho map <F2> :echo expand("%:p") " insere um texto qualquer imap <F2> Nome de uma pessoa Au nica diferen ca nos mapeamentos acima e que o mapeamento para modo de inser c ao come ca com i, assim como para o modo comando : come ca com c no caso cmap.  O comando :echo pode ser abreviado assim: :ec.

12.8.1

Recarregando o arquivo de congura c ao

Cada altera c ao no arquivo de congura c ao do Vim s o ter a efeito na pr oxima vez que voc e abrir o Vim a menos que voc e coloque isto dentro do mesmo " recarregar o vimrc " Source the .vimrc or _vimrc file, depending on system if &term == "win32" || "pcterm" || has("gui_win32") map ,v :e $HOME/_vimrc<CR> nmap <F12> :<C-u>source ~/_vimrc <BAR> echo "Vimrc recarregado!"<CR> else map ,v :e $HOME/.vimrc<CR> nmap <F12> :<C-u>source ~/.vimrc <BAR> echo "Vimrc recarregado!"<CR> endif Agora basta pressionar <F12> em modo normal e as altera c oes passam a valer instantaneamente, e para chamar o vimrc basta usar. ,v Os mapeamentos abaixo s ao u teis para quem escreve c odigos HTML, permitem inserir caracteres reservados do HTML usando uma barra invertida para proteger os mesmos, o Vim substituir a os barra alguma coisa pelo caractere correspondente.

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

85

O termo inoremap signica: em modo de inser c ao n ao remapear, ou seja ele mapeia o atalho e n ao permite que o mesmo seja remapeado, e o mapeamento s o funciona em modo de inser c ao, isso signica que um atalho pode ser mapeado para diferentes modos de opera c ao. Veja este outro mapeamento: map <F11> <Esc>:set nu!<cr> Permite habilitar ou desabilitar n umeros de linha do arquivo corrente. A exclama c ao ao nal torna o comando booleano, ou seja, se a numera c ao estiver ativa ser a desabilitada, caso contr ario ser a ativada. O <cr> ao nal representa um Enter.

12.8.2

Limpando o registro de buscas

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

12.8.3

Destacar palavra sob o cursor

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

12.8.4

Contar ocorr encias de uma palavra

" contagem de ocorr^ encias de uma palavra (case insensitive) " busca somente ocorr^ encias exatas nmap <F4> <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

e uma abrevia c ao de hightlight search

86

Como Editar Prefer encias no Vim

12.8.5

Remover linhas em branco duplicadas

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

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

12.8.6

Mapeamento para Calcular Express oes

Os mapeamentos abaixo exibem o resultado das quatro opera c oes b asicas (soma, subtra c ao, multiplica c ao e divis ao). O primeiro para o modo normal no qual posiciona-se o cursor no primeiro caractere da express ao tipo 5*9 e em seguida pressiona-se Shift-F1, o segundo para o modo insert em que, ap os digitada a express ao pressiona-se o mesmo atalho. " calculadora map <s-f1> <esc>0"myEA=<c-r>=<c-r>m<enter><esc> imap <s-f1> <space><esc>"myBEa=<c-r>=<c-r>m<enter><del> Para efetuar c alculos com maior precis ao e tamb em resolver problemas como pot encias ra zes, logaritmos pode-se mapear comandos externos, como a biblioteca matem atica da linguagem de programa c ao Python. Neste link [10] h a um manual que ensina a realizar este procedimento, ou acesse o cap tulo 2.16 na p agina 17.

12.9 Autocomandos

87

12.8.7

Mapeamentos globais

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

12.8.8

Convertendo as iniciais de um documento para mai usculas

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

12.9

Autocomandos
:h autocmd.txt

Autocomandos habilitam comandos autom aticos para situa c oes espec cas. Para executar determinada a c ao ao iniciar um novo arquivo o autocomando dever a obedecer este padr ao: au BufNewFile tipo a c~ ao Veja um exemplo: au BufNewFile,BufRead *.txt source ~/.vim/syntax/txt.vim

88

Como Editar Prefer encias no Vim

No exemplo acima o Vim aplica autocomandos para arquivos 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 cabe calho para scripts bash caso a linha 1 esteja vazia, observe que os arquivos em quest ao tem que ter a extens ao .sh. au BufNewFile,BufRead *.sh if getline(1) == "" | normal ,sh

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

12.9.1

Exemplos pr aticos de autocomandos


:h expandtab, retab

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

12.10 Fun c oes

89

Para evitar que este erro se repita, ou seja, que sejam adicionados no come co de linha espa cos no lugar de tabula co es adiciona-se ao /.vimrc set expandtab perfeitamente poss E vel um autocomando que fa ca direto a substitui c ao de tabula c oes por espa cos, mas neste caso n ao e recomendado que o autocomando se aplique a todos os tipos de aquivos. Inserindo automaticamente modelos de documento Pode-se criar um autocomando para inserir um modelo de documento html por exemplo de forma autom atica, ou seja, se voc e criar um novo documento do tipo html o vim colocar a em seu conte udo um modelo pre-denido. au BufNewFile *.html 0r ~/.vim/skel/skel.html

12.10
12.10.1

Fun c oes
Fechamento autom atico de par enteses

" -------------------------------------" Ativa fechamento autom atico para par^ entese " 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^ enteses colchetes etc... inoremap <C-j> <Esc>:call search(BC_GetChar(), W)<cr>a " Function for the above function! BC_AddChar(schar) if exists(k) let b:robstack = b:robstack . a:schar else let b:robstack = a:schar endif endfunction function! BC_GetChar() let l:char = b:robstack[strlen(b:robstack)-1] let b:robstack = strpart(b:robstack, 0, strlen(b:robstack)-1) return l:char endfunction Outra op c~ ao para fechamento de par^ enteses

90

Como Editar Prefer encias no Vim " Fechamento autom atico de par^ enteses imap { {}<left> imap ( ()<left> imap [ []<left> " pular fora dos par^ enteses, colchetes e chaves, mover o cursor " no modo de inser c~ ao imap <c-l> <Esc><right>a imap <c-h> <Esc><left>a

12.10.2

Fun c ao para barra de status

set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L] Caso este c odigo n ao funcione acesse este link [11].

12.10.3

Rolar outra janela

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

12.10.4

Fun c ao para numerar linhas

No site wikia h a um c odigo de fun c ao para numerar linhas [12]

12.10 Fun c oes

91

12.10.5

Fun c ao para trocar o esquema de cores

function! <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 fun c ao para inserir cabe calho de script

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

12.10.7

Fun c ao para inserir cabe calhos Python

" fun c~ ao para inserir cabe calhos Python

92

Como Editar Prefer encias no Vim fun! BufNewFile_PY() normal(1G) :set ft=python :set ts=2 call append(0, "#!/usr/bin/env python") call append(1, "# # -*- coding: ISO-8859-1 -*-") call append(2, : . strftime("%a %d/%b/%Y hs %H:%M")) call append(3, . strftime("%a %d/%b/%Y hs %H:%M")) call append(4, "# Instituicao: <+nome+>") call append(5, "# Proposito do script: <+descreva+>") call append(6, "# Autor: <+seuNome+>") call append(7, "# site: <+seuSite+>") normal gg endfun autocmd BufNewFile *.py call BufNewFile_PY() map ,py :call BufNewFile_PY()<cr>A " Ao editar um arquivo ser a aberto no ultimo ponto em " que foi editado autocmd BufReadPost * \ if line(\(\) <= line($) | \ exe normal g\" | \ endif " Permite recarregar o Vim para que modifica c~ oes no " Pr oprio vimrc seja ativadas com o mesmo sendo editado nmap <F12> :<C-u>source $HOME/.vimrc <BAR> echo "Vimrc recarregado!"<CR>

Redimensionar janelas " Redimensionar a janela com " Alt-seta ` a direita e esquerda map <M-right> <Esc>:resize +2 <CR> map <M-left> <Esc>:resize -2 <CR>

12.10.8

Fun c ao para pular para uma linha

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

12.11 Como adicionar o Python ao path do Vim?

93

12.10.9

Fun c ao para gerar backup

A fun c ao abaixo eu til para ser usada quando voc e vai editar um arquivo gerando modica c oes signicativas, assim voc e poder a restaurar o backup se necess ario " A mapping to make a backup of the current file. fun! WriteBackup() let fname = expand("%:p") . "__" . strftime("%d-%m-%Y--%H.%M.%S") silent exe ":w " . fname echo "Wrote " . fname endfun nnoremap <Leader>ba :call WriteBackup()<CR>

 O atalho <leader> em geral e a barra invertida \, na d uvida :help <leader>. 12.11 Como adicionar o Python ao path do Vim?

Coloque o seguinte script [14] em: * ~/.vim/after/ftplugin/python.vim (on Unix systems) %* $HOME/vimfiles/after/ftplugin/python.vim (on Windows systems) python << EOF import os import sys import vim for p in sys.path: # Add each directory in sys.path, if it exists. if os.path.isdir(p): # Command set needs backslash before each space. vim.command(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 e a que entram os menus, podemos colocar nossos plugins e atalhos favoritos em um menu veja este exemplo amenu Ferramentas.ExibirNomeDoTema :echo g:colors_name<cr> O comando acima diz:

94

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

Caso haja espa cos no nome a denir voc e pode fazer assim 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 c~ ao 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 rec em modicado. Quando o co usado sem nenhum argumento o Vim mostra os menus demando :amenu E nidos atualmente. Para listar todas as op c oes de menu para Plugin por exemplo digita-se no modo de comandos :amenu Plugin.
Ocultando as barras de ferramentas e menu :set guioptions-=m :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 espa cos e tabula c oes redundantes: highlight RedundantWhitespace ctermbg=red guibg=red match RedundantWhitespace /\s\+$\| \+\ze\t/ Explicando com detalhes \s ..... \+ ..... $ ...... \| ..... .. \+ ..... \ze .... \t ..... espa co uma ou mais vezes no final da linha ou espa co (veja imagem acima) uma ou mais vezes at e o fim tabula c~ ao

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

96

Como Editar Prefer encias no Vim

12.16

Complementa c ao com tab

"Word completion "Complementa c~ ao de palavras set dictionary+=/usr/dict/words set complete=.,w,k "------ complementa c~ ao de palavras ---"usa o tab em modo de inser c~ ao para completar palavras function! InsertTabWrapper(direction) let col = col(.) - 1 if !col || getline(.)[col - 1] !~ \k return > elseif d == a:direction return > else return > endif endfunction inoremap <tab> <c-r>=InsertTabWrapper (d)<cr> inoremap <s-tab> <c-r>=InsertTabWrapper (d)<cr>

12.17

Abrevia co es

Abrevia c oes habilitam auto-texto para o Vim. O seu funcionamento consiste de tr es campos, o primeiro e o modo no qual a abrevia c ao funcionar a, o segundo e a palavra que ir a disparar a abrevia c ao e o terceiro campo e a abrevia c ao propriamente dita. Para que em modo de comando : a palavra salvar funcione para salvar os arquivos, adiciona-se a seguinte abrevia c ao ao ~/.vimrc. cab salvar w<cr> "<cr> corresponde ao <Enter> Abaixo abrevia c oes para o modo de inser c ao: iab slas S ergio Luiz Ara ujo Silva iab Linux GNU/Linux iab linux GNU/Linux

12.18

Evitando arquivos de backup no disco

Nota-se em algumas situa c oes que existem alguns arquivos com o mesmo nome dos arquivos que foram editados, por em com um til () no nal. Esses arquivos

12.19 Mantendo apenas um Gvim aberto

97

s ao backups que o Vim gera antes de sobrescrever os arquivos, e podem desde ocupar espa co signicativo no disco r gido at e representar falha de seguran ca, como por exemplo arquivos .php~ que n ao s ao interpretados pelo servidor web e exp oem o c odigo-fonte. Para que os backups sejam feitos enquanto os arquivos estejam sendo escritos, por em n ao mantidos ap os terminar a escrita, utiliza-se no .vimrc: set nobackup set writebackup Fonte: Site do Eust aquio Rangel [15].

12.19

Mantendo apenas um Gvim aberto

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

nos quais o sistema busca pelos comandos

98

Como Editar Prefer encias no Vim

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

12.20

Refer encias

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

Cap tulo 13

Um Wiki para o Vim


ineg E avel a facilidade que um Wiki nos traz, os documentos s ao indexados e linkados de forma simples. J a pesquisei uma por c ao de Wikis e, para uso pessoal recomendo o Potwiki. O link do Potwiki e este [17]. O Potwiki e um Wiki completo para o Vim, funciona localmente embora possa ser aberto remotamente via ssh1 . Para criar um link no Potwiki basta usar WikiNames, s ao nomes iniciados com letra mai uscula e que contenham outra letra em mai usculo no meio. Ao baixar o arquivo salve em ~/.vim/plugin. Mais ou menos na linha 53 do Potwiki ~/.vim/plugin/potwiki.vim voc e dene onde ele guardar a os arquivos, no meu caso /home/docs/textos/wiki. a linha cou assim: call s:default(home,"~/.wiki/HomePage") Outra forma de indicar a p agina inicial seria colocar no seu .virmc let potwiki_home = "$HOME/.wiki/HomePage"

13.1

Como usar

O Potwiki trabalha com WikiWords, ou seja, palavras iniciadas com letras em mai usculo e que tenham outra letra em mai usculo no meio (sem espa cos). Para iniciar o Potwiki abra o Vim e pressione \ww. <Leader> e igual a \ - veja :help leader \ww .... abra a sua HomePage \wi .... abre o Wiki index
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> e igual a Enter move para a pr oxima WikiWords move para os WikiWords anteriores (mesma p agina) recarrega WikiWords

13.2

Salvamento autom atico para o Wiki

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

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

13.3

Problemas com codica c ao de caracteres

Atualmente uso o Ubuntu em casa e ele j a usa utf-8. Ao restaurar meu backup do Wiki no Kurumin os caracteres caram meio estranhos, da z: baixei o pacote [recode] # apt-get install recode para recodicar caracteres de utf-8 para iso fa ca: recode -d u8..l1 arquivo

Cap tulo 14

H abitos para Edi c ao Efetiva


Um dos grandes problemas relacionados com os softwares e sua subutiliza c ao. Por in ercia o usu ario tende a aprender o m nimo para a utiliza c ao de um programa e deixa de lado recursos que poderiam lhe ser de grande valia. O mantenedor do Vim, Bram Moolenaar1 , recentemente publicou v deos e manuais sobre os 7 h abitos para edi c ao efetiva de textos2 , este cap tulo pretende resumir alguns conceitos mostrados por Bram Moolenaar em seu artigo.

14.1

Mova-se rapidamente no texto

O cap tulo 3, Movendo-se no Documento, p agina 24 mostra uma s erie de comandos para agilizar a navega c ao no texto. Memorizando estes comandos ganha-se tempo consider avel, um exemplo simples em que o usu ario est a na linha 345 de um arquivo decide ver o conte udo da linha 1 e em seguida voltar ` a linha 345: gg ....... vai para a linha 1 ....... retorna ao ultimo ponto em que estava Fica claro portanto que a navega c ao r apida e um dos requisitos para edi c ao efetiva de documentos.

14.2

Use marcas

veja a se c ao 3.2 na p agina 29. ma ..... a ..... da .... ya .... em modo normal cria uma marca a move o cursor at e a marca a deleta at e a marca a copia at e a marca a

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

H abitos para Edi c ao Efetiva vai para a linha 1 do arquivo vai para a ultima linha do arquivo vai para o in cio da linha vai para o fim da linha pula at e a pr oxima ocorr^ encia de x deleta at e a pr oxima ocorr^ encia de x avan ca na lista de altera c~ oes retrocede na lista de altera c~ oes 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 ultima linha da tela

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

14.3

Use quanticadores

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

14.4 Edite v arios arquivos de uma s o vez

103

14.4

Edite v arios arquivos de uma s o vez

O Vim pode abrir v arios arquivos que contenham um determinado padr ao. Um exemplo seria abrir dezenas de arquivos HTML e trocar a ocorr encia bgcolor="ffffff" Para bgcolor="eeeeee" Usar amos a seguinte sequ encia de comandos: vim *.html .............................. abre os arquivos :bufdo :%s/bgcolor=ffffff/bgcolor=eeeeee/g substitui c~ ao :wall .................................... salva todos :qa[ll] .................................... fecha todos Ainda com rela c ao ` a edi c ao de v arios arquivos poder amos abrir alguns arquivos txt e mudar de um para o outro assim: :wn O w signica gravar e o n signica next, ou seja, gravar amos o que foi modicado no arquivo atual e mudar amos para o pr oximo.

 Veja tamb em Movendo-se no documento, cap tulo 3 p agina 24 14.5 N ao digite duas vezes

O Vim complementa com tab. Veja mais na se c ao 12.16 na p agina 96. Use macros. Detalhes na se c ao 8.3 p agina 62. Use abrevia c oes coloque abrevia c oes como abaixo em seu ~/.vimrc. Veja mais na se c ao 12.17. As abrevia c oes fazem o mesmo que auto-corre c ao e auto-texto em outros editores iab tambem tamb em iab linux GNU/Linux No modo de inser c ao voc e pode usar: Ctrl-y ........ copia caractere a caractere a linha acima Ctrl-e ........ copia caractere a caractere a linha abaixo Ctrl-x Ctrl-l .. completa linhas inteiras Para um trecho muito copiado coloque o seu conte udo em um registrador: "ayy ... copia a linha atual para o registrador a "ap ... cola o registrador a Crie abrevia c oes para erros comuns no seu arquivo de congura c ao ( /.vimrc):

104 iabbrev teh the syntax keyword WordError teh

H abitos para Edi c ao Efetiva

As linhas acima criam uma abrevia c ao para erro de digita c ao da palavra the e destaca textos que voc e abrir que contenham este erro.

14.6

Use dobras

O Vim pode ocultar partes do texto que n ao est ao sendo utilizadas permitindo uma melhor visualiza c ao do conte udo. Mais detalhes no cap tulo 4 p agina 30.

14.7

Use autocomandos
:h autocmd.txt

No arquivo de congura c ao do Vim ~/.vimrc pode-se pode criar comandos autom aticos que ser ao executados diante de uma determinada circunst ancia. O comando abaixo ser a executado em qualquer arquivo existente, ao abrir o mesmo, posicionando o cursor no u ltimo 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 congura c ao do Vim exclusivo para o tipo html/htm e no caso de arquivos novos BufNewFile ele j a cria um esqueleto puxando do endere co indicado: augroup html au! <--> Remove all html autocommands au! au BufNewFile,BufRead *.html,*.shtml,*.htm set ft=html au BufNewFile,BufRead,BufEnter *.html,*.shtml,*.htm so ~/docs/vim/.vimrc-html au BufNewFile *.html 0r ~/docs/vim/skel.html au BufNewFile *.html*.shtml,*.htm /body/+ " coloca o cursor ap os o corpo <body> au BufNewFile,BufRead *.html,*.shtml,*.htm set noautoindent augroup end

14.8

Use o File Explorer

O Vim pode navegar em pastas assim:

14.9 Torne as boas pr aticas um h abito vim .

105

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

14.9

Torne as boas pr aticas um h abito

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

14.10

Refer encias

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

Cap tulo 15

Plugins
Plugins1 s ao um meio de estender as funcionalidades do Vim, h a plugins para diversas tarefas, desde wikis para o Vim at e ferramentas de aux lio a navega c ao em arquivos com e o caso do plugin NerdTree [18], que divide uma janela que permite navegar pelos diret orios do sistema a m de abrir arquivos a serem editados.

15.1

Como testar um plugin sem instal a-lo?

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

s ao recursos que se adicionam aos programas

15.2 Atualizando a documenta c ao dos plugins

107

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

15.2

Atualizando a documenta c ao dos plugins


:h helptags

Caso seja adicionado algum arquivo de documenta c ao em ~/.vim/doc pode-se gerar novamente as tags links para navega c ao de ajuda. :helptags $VIMRUNTIME/doc :helptags ~/.vim/doc

15.3

A Plugin para L TEX

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

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

15.4

A Criando folders para arquivos L TEX

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


A Adicionar marcadores (labels) ` as se c oes de um documento L TEX

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

108

Plugins A Criando se co es L TEX

15.5

o comando abaixo substitui ==se c~ ao== por \section{se c~ ao} :.s/^==\s\?\([^=]*\)\s\?==/\\section{\1}/g : ......... . ......... s ......... ^ ......... == ........ \s\? ...... [^=] ...... * ......... \s\? ...... \\ ........ \1 ........ comando linha atual substitua come co de linha dois sinais de igual seguido ou n~ ao de espa co n~ ao pode haver = (^ dentro de [] e nega c~ ao) diz que o que vem antes pode vir zero ou mais vezes seguido ou n~ ao de espa co 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

Complementa c ao de c odigos

O plugin snippetsEmu e um misto entre complementa c ao de c odigos e os chamados modelos ou templates. Insere um trecho de c odigo pronto, mas vai al em disso, permitindo saltar para trechos do modelo inserido atrav es de um atalho congur avel de modo a agilizar o trabalho do programador. Link para baixar [22].

15.7.1

Instala c ao

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

15.8 Um wiki para o Vim

109

A linha acima faz com que o vim abra uma janela pequena com a documenta c ao de cada m etodo que est a sendo digitado.

15.8

Um wiki para o Vim

O plugin wikipot implementa um wiki para o Vim no qual voc e dene um link com a nota c ao WikiWord, onde um link e uma palavra que come ca com uma letra mai uscula e tem outra letra mai uscula no meio Obtendo o plugin neste link [17].

15.9

Acessando documenta c ao do Python no Vim

Obtenha um plugin para esta tarefa em seu site 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 navega c ao em palavras em camel case [28] ou separadas por sublinhados, atrav es de mapeamentos similares aos que fazem a movimenta c ao normal entre strings, e e um recurso de grande ajuda quando o editor e utilizado para programa c ao. Ap os instalado o plugin, os seguintes atalhos cam dispon veis: ,w Movimenta para a pr oxima posi c ao camel dentro da string ,b Movimenta para a posi c ao camel anterior dentro da string ,e Movimenta para o caractere anterior ` a pr oxima posi c ao camel dentro da string Fonte: Blog do Eust aquio Rangel [29]

15.12

Plugin FuzzyFinder

Este plugin e a implementa c ao de um recurso do editor Texmate2 . Sua proposta e acessar de forma r apida: 1. Arquivos :FuzzyFinderFile
2 Editor

de textos da Apple com muitos recursos

110 2. Arquivos rec em editados :FuzzyFinderMruFile 3. Comandos rec em utilizados :FuzzyFinderMruCmd

Plugins

4. Favoritos :FuzzyFinderAddBookmark, :FuzzyFinderBookmarks 5. Navega c ao por diret orios :FuzzyFinderDir 6. Tags :FuzzyFinderTag Para ver o plugin em a c ao acesse este video para obte-lo acesse este endere co, para instal a-lo basta copiar para o diret orio /.vim/plugin.

15.13

O plugin EasyGrep

Usu arios de sistemas Unix Like3 , j a conhecem o poder do comando grep, usando este comando procuramos palavras dentro de arquivos, este plugin simplica esta tarefa, al em de permitir a utiliza c ao da vers ao do grep nativa do Vim vimgrep, assim usu arios do Windows tamb em podem usar este recurso. Um comando grep funciona mais ou menos assim: grep [op c~ oes] "padr~ ao" /caminho Mas no caso do plugin EasyGrep ca assim: :Grep foo ........ procura pela palavra foo :GrepOptions ...... exibe as op c~ oes de uso do plugin O plugin pode ser obtido no seguinte endere co, j a sua instala c ao e simples, basta copiar o arquivo obtido no link acima para a pasta: ~/.vim/plugin .......... no caso do linux ~/vimfiles/plugin ...... no caso do windows Um v deo de exemplo (na verdade uma anima c ao gif) pode ser visto aqui.

15.14

O plugin SearchComplete

Para que o vim complete op c oes de busca com a tecla <tab>, digita-se uma palavra parcialmente e o plugin atua, exibindo palavras que tem o mesmo in cio, por exemplo: /merca<tab> /mercado /mercantil /mercadol ogico
3 Sistemas

da fam lia Unix tipo o GNU/Linux

15.15 O plugin AutoComplete

111

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

15.15

O plugin AutoComplete

Este plugin trabalha exibindo sugest oes no modo de inser c ao, ` a medida que o usu ario digita aparece um popup com sugest oes para poss veis complementos, bastando pressionar <Enter> para aceitar as sugest oes. Neste link, voc e pode fazer o download do plugin.

15.16

O plugin Ctags

Ctags em si e um programa externo que indexa arquivos de c odigo fonte. Ele l e o c odigo fonte em busca de identicadores, declara c oes de fun c ao, vari aveis, e constr oi seu ndex de refer encias cruzadas. Mas vamos ao plugin, mesmo por que n ao estamos no CtagsBook. Primeiro precisamos ter o arquivos de tags. Para tal, usamos o comando: ctags -R <arquivos> Normalmente o par ametro <arquivos> pode ser uma express ao regular do tipo *.[ch] e ans. Depois de obter o arquivo de tags, voc e j a pode sair usando os atalhos do plugin para navegar pelo c odigo fonte. Com o cursor em cima de um identicador, usando o atalho ctrl+] o cursor pula diretamente para a sua declara c ao. O atalho ctrl+o volta o cursor para a posi c ao inicial.

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

112

Plugins

15.17

O Plugin Project

O plugin project acess vel atrav es deste link cria toda uma estrutura de gerenciamento de projetos, para programadores e uma funcionalidade extremamente necess aria, costuma-se trabalhar com v arios arquivos da mesma fam lia extens ao, e ao clicar em um dos arquivos do projeto o mesmo e aberto instantaneamente. :Project ......... abre uma janela lateral para o projeto \C ............... inicia a cria c~ ao de um projeto (recursivamente) \c ............... inicia a cria c~ ao de um projeto na pasta local Ap os digitar o atalho de cria c ao do projeto aparecer a uma janela para designar um nome para o mesmo, em seguida digita-se o caminho para o diret orio do projeto, ap os isto digita-se . (ponto) como par ametro, cria-se um ltro como *.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 c odigos python assim: import sys sys.<tab> O plugin cont em dois arquivos: 1. pydiction.py deve ser colocado no path 2. pydiction deve ser colocado em um lugar de sua prefer encia Deve-se adicionar algumas linhas do .vimrc. No exemplo abaixo o dicion ario e adicionado ao diret orio /.vim/dict if has("autocmd") autocmd FileType python set complete+=k/.vim/dict/pydiction isk+=.,( endif " has("autocmd") Pode-se obter o plugin neste link.

15.19 O plugin FindMate

113

15.19

O plugin FindMate

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

15.20

Atualizando a documenta c ao dos plugins


:h helptags

Caso seja adicionado algum arquivo de documenta c ao em em ~/.vim/doc pode-se gerar novamente as tags links para navega c ao de ajuda. :helptags ~/.vim/doc

Cap tulo 16

Refer encias
http://www.vivaolinux.com.br/artigos/impressora.php?codigo=2914 VIM avan cado (parte 1)] http://www.rayninfo.co.uk/vimtips.html http://www.geocities.com/yegappan/vim_faq.txt http://br.geocities.com/cesarakg/vim-cook-ptBR.html http://larc.ee.nthu.edu.tw/~cthuang/vim/files/vim-regex/vim-regex. htm http://aurelio.net/vim/vimrc-ivan.txt http://vivaotux.blogspot.com/search/label/vim http://www.tug.dk/FontCatalogue/seriffonts.html

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., Express oes Regulares - Guia de Consulta R apida . 2001, acessado em 14/05/2009, http://guia-er.sourceforge.net/. [4] ANGELO, O. H. E., Mudan ca em v arias linhas, 2007, acessado 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., Jun c ao de linhas com vim, 2008, acessado em 14/05/2009, http://www.dicas-l.com.br/dicas-l/20081228.php. [7] LAKSHMANAN, Y., Vim documentation: vim faq, 2005, acessado 17/05/2009, http://vimdoc.sourceforge.net/htmldoc/vimfaq.html. [8] WIKIPEDIA, Acordo Ortogr aco de 1990, 2009, acessado em 21/07/2009, http://pt.wikipedia.org/wiki/Acordo_Ortogr%C3% A1fico_de_1990. [9] MOURA, R. S., Dicion arios do Broce.org, 2009, acessado 14/05/2009, 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

Refer encias Bibliogr acas

[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., Inst ancia solit aria do Vim, 2007, acessado 14/05/2009, http://eustaquiorangel.com/posts/477. [17] STEINER, E., potwiki.vim : Maintain a Wiki of plain text 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 complementa c ao autom atica com popup, 2009, acesso em 14/05/2009, http://www.vim.org/scripts/script.php? script_id=1879. [25] KELPE, A., pydoc.vim : Python documentation view- and search-tool (uses pydoc), 2005, acessado 14/05/2009, http://www.vim.org/scripts/ script.php?script_id=910. [26] STAHLMAN, B., Txtfmt (The Vim Highlighter) : Highlight plain text in Vim! (Beautify your documents with colors and formats.), 2009, acessado 14/05/2009, http://www.vim.org/scripts/script.php? script_id=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.

Refer encias Bibliogr acas

117

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

Colaboradores

Se c ao dedicada aos colaboradores do projeto vimbook

Indice
area de transfer encia, 11 ajuda, 4 atalhos, 4, 6 autocomandos, 87, 104 backup fun c ao para gerar backup, 93 nobackup, 97 writebackup, 97 barra de status, 90 buscas intervalo, 56 clipboard, 11 colar, 911 copiar, 911 cores esquemas, 63, 81, 91 deletar, 8, 9 linhas duplicadas, 11 documentos modelos, 89 editando, 7 v arios arquivos, 103 em caso de erros, 4 express oes regulares, 2 buscas, 42 fechar o programa, 8 leExplorer, 104 folders, 104 fun c oes, 89 grep, 13 hist orico, 13 ide, 2 indenta c ao, 48, 88 iniciar, 3, 7 linha espec ca, 7 novo arquivo, 11 padr ao espec co, 7 jun c ao de linhas, 56 linhas numerar, 90 lista de altera c oes, 13 manual, 4 mapeamento, 4 mapeamentos, 83 exibir numera c ao de linhas, 85 globais, 87 marcas, 101 menus, 93 exemplos, 94 modo de comando, 5 modo de inser c ao, 5, 8 modo normal, 5 modo visual, 5 modos de opera c ao, 5, 8, 24 errors comuns, 6 exemplos, 5 movendo-se big words, 26 efetuando saltos, 25 em palavras grandes, 26 entre caracteres, 24 entre linhas, 24, 101 entre senten cas, 26 numeros incrementar, 53 ordenando, 12 par agrafo ajustar, 82

120 tabula c ao, 82, 88 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 vari avel, 26 verica ca c ao ortogr aca, 73 vim, 2 instalar, 2 vimrc ignorando, 81 recarregando, 80, 84

Indice

Você também pode gostar