VIM
23 de abril de 2007
Sumário
I Sobre essa Apostila 2
II Informações Básicas 4
1 O que é o Vim 9
2 Plano de ensino 10
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 Guia do Curso (Início da semana 1) 16
4 Guia de comandos 17
5 Sobre o Vim 25
6 Trabalhando com o Vim 29
7 Modos de operação 33
8 Lição 1 - Interagindo com o Editor 37
8.1 Entrando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.2 Saindo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.3 Escrevendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.4 Saindo sem salvar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
8.5 Salvando 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.6 Salvando 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.7 Salvando e saindo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.8 Abrindo um arquivo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
8.9 Salvando 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8.10 Abrindo um arquivo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
9 Lição 2 - Sintaxe dos comandos 41
9.1 Parte 1 / 7 | Operadores de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9.2 Parte 2 / 7 | O paradigma Vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9.3 Parte 3 / 7 | Objetos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
9.4 Parte 4 / 7 | Verbos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
9.5 Parte 5 / 7 | Valores de quantidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
9.6 Parte 6 / 7 | Os direcionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
9.7 Parte 7 / 7 | Construindo comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
10 Lição 3 - Acesso ao texto: Movendo-o 45
10.1 Parte 1 / 7 | Iniciando uma sessão somente leitura . . . . . . . . . . . . . . . . . . . 45
10.2 Parte 2 / 7 | linha a linha para baixo . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
10.3 Parte 3 / 7 | linha a linha para cima . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
10.4 Parte 4 / 7 | tela a tela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
10.5 Parte 5 / 7 | linhas escolhidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
10.6 Parte 6 / 7 | posição da tela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
10.7 Parte 7 / 7 | posição da tela escolhida . . . . . . . . . . . . . . . . . . . . . . . . . . 46
11 Lição 4 - Acesso ao texto: Movendo o cursor 48
11.1 Parte 1 / 7 | direcionais e texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
11.2 Parte 2 / 7 | tela e página . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
11.3 Parte 3 / 7 | linha, parênteses e chaves . . . . . . . . . . . . . . . . . . . . . . . . . 50
11.4 Parte 4 / 7 | caractere com linha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
11.5 Parte 5 / 7 | coluna com linha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
11.6 Parte 6 / 7 | caractere com sentença e parágrafo . . . . . . . . . . . . . . . . . . . . 51
11.7 Parte 7 / 7 | palavra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
12 Lição 5 - Acesso ao texto: Buscando ocorrências (Início da semana 2) 54
12.1 Parte 1 / 7 | buscando (na linha) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
12.2 Parte 2 / 7 | buscando (na linha) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
12.3 Parte 3 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
12.4 Parte 4 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
12.5 Parte 5 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
12.6 Parte 6 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
12.7 Parte 7 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
13 Lição 6 - Transitando entre os modos 62
13.1 Parte 1 / 7 | Entrando em modos de inclusão . . . . . . . . . . . . . . . . . . . . . . 62
13.2 Parte 2 / 7 | Os modos derivados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
13.3 Parte 3 / 7 | Modo Normal de inclusão . . . . . . . . . . . . . . . . . . . . . . . . . . 64
13.4 Parte 4 / 7 | Modos visual e visual de inclusão . . . . . . . . . . . . . . . . . . . . . . 65
13.5 Parte 5 / 7 | Modos de seleção e seleção de inclusão . . . . . . . . . . . . . . . . . 66
13.6 Parte 6 / 7 | Modo ex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
13.7 Parte 7 / 7 | As ruelas e usos dos modos . . . . . . . . . . . . . . . . . . . . . . . . 68
2
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
14 Lição 7 - Editar o texto 70
14.1 Apagar o texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
14.2 Copiar o texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
14.3 Colar o texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
14.4 Fazer e desfazer comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
14.5 Substituir ocorrências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
15 Lição 8 - Configuração do Vim e ferramentas especiais 74
15.1 Configurando o Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
15.2 Ferramentas de consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
15.3 Ferramentas de edição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
16 Exemplo de .vimrc 80
17 Notas Finais 82
3
Parte I
Sobre essa Apostila
4
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Críticas e sugestões construtivas são bem-vindas a qualquer tempo.
Autores
A autoria deste é de responsabilidade de Tomas Ribeiro Cardoso (tomas@cdtc.org.br).
O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento, que
vem sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com
outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras
que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software
junto a outras entidades no país.
Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da
home page da entidade, através da URL http://www.cdtc.org.br.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
5
Parte II
Informações Básicas
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Sobre o CDTC
Objetivo Geral
O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-
ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do
desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.
Objetivo Específico
Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e
de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os
servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios
de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo
treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,
criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como
incentivadores e defensores de produtos de software não proprietários e código fonte aberto, ofe-
recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de
produtos de software não proprietários e de seu código fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-
dutos de software livre.
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Licenças para cópia de material disponível
• Os 10 mandamentos do aluno de Educação a Distância
• Como participar dos foruns e da wikipédia
• Primeiros passos
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br).
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
Os 10 mandamentos do aluno de educação online
• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é
pré-requisito para a participação nos cursos a distância.
• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-
tica é necessário para poder executar as tarefas.
• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-
cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores.
• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus
colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo.
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais.
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real.
• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre.
• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens
e descobertas.
• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é
ponto - chave na comunicação pela Internet.
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
Como participar dos fóruns e Wikipédia
Você tem um problema e precisa de ajuda?
Podemos te ajudar de 2 formas:
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Forum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
A segunda forma se dá pelas Wikis:
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
• Página principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;
• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
9
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:
• fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá
utilizar;
• gosta que lhe façam perguntas adicionais;
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
• dá uma ajuda complementar para encorajar um estudante em dificuldade;
• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;
• ajuda o estudante a alcançar os seus objetivos;
• é flexível quando necessário;
• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
• escreve todas as correções de forma legível e com um nível de pormenorização adequado;
• acima de tudo, devolve os trabalhos rapidamente;
10
Capítulo 1
O que é o Vim
O Vim é um editor de textos baseado no Vi com suporte a diversos formatos de texto e com
ferramentas extensas de consulta, edição e formatação de textos. Além disso também oferece
ferramentas de configuração de uso. Não somente sua licença é compatível com a GPL como
também contribui socialmente, repassando o suporte financeiro voluntário que recebe para um
programa social da Uganda! Ele é um editor de texto livre (e até libertário), atual e poderoso!
11
Capítulo 2
Plano de ensino
2.1 Objetivo
O objetivo deste curso é qualificar usuários de Linux a utilizar de forma avançada o editor Vim.
Isso significa que ao término deste curso você será capaz de se virar rapidamente com qualquer
edição de texto, seja qual for seu tamanho.
No entanto, para maior esclarecimento, vou dizer o que você não vai aprender com ele: Não
espere aprender a fazer um currículo bonito ou um texto com justificação, fontes, cores e margens
primorosas para sua apresentar sua tese de pós-doutorado. Para isso, você precisa usar um bom
processador de textos como o OpenOffice Writer, por exemplo. O Vim não codifica seu texto, ou
seja, este entra plano e sai plano: sua funcionalidade máxima se aplica à scripts, arquivos de
configuração, códigos fonte e também, é claro, à textos de e-mail, lista de compras, arquivos de
anotações pessoais, de trabalho ou à qualquer texto que não se pretenda parecer uma imagem,
com estilizações de caracteres e de cores, com figuras, margens barrocas e etc.
2.2 Público Alvo
Para novatos no Linux:
• Se você está se aventurando pela linha de comando e não sabe com que escrever bem os
textos, este curso pode ser do seu interesse;
• Se você está estudando Linux e quer conhecer e entender de um dos editores modo texto
mais consagrados (se não for o mais) do universo do software livre, este curso pode ser do
seu interesse;
• Se você já ouviu falar do editor vi ou da sua família de editores e é curiosa(o) por compreendê-
la, este curso pode ser do seu interesse.
Para usuários regulares, estudantes e programadores:
• Se você utiliza um clone do vi, mas não se conforma com suas limitações ou com a sua
licença, este curso pode ser do seu interesse;
• Se você é um entusiasta da linha de comando e sempre quis ou tem vontade de ter controle
sobre o tradicional editor vi ou de algum semelhante, este curso pode ser do seu interesse;
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Se você frequentemente tem de editar arquivos de configuração e precisa dominar algum
bom editor de texto, este curso pode ser do seu interesse;
• Se você pretende estudar e entender bem de Linux, mas sempre achou o vi um editor
exótico, misterioso e de difícil compreensão, este curso pode ser do seu interesse;
• Se você escreve scripts em perl, bash scripts ou o que quer que seja e precisa estudar um
editor modo texto rápido, leve, versátil e configurável, este curso pode ser do seu interesse;
• Se você programa centenas de linhas e necessita de um editor que além de reconhecer sua
sintaxe lhe auxilie na difícil organização e edição das suas várias páginas de código, este
curso pode ser do seu interesse;
2.3 Pré-requisitos
A resposta rápida é: o único pré-requisito, na verdade até somente preferencial, é o uso básico
do linux em modo de comando. Ou seja, em princípio, todo estão.
Agora a resposta longa. Eu devo admitir, usar o Vim intuitivamente não é fácil. O esforço
depositado na tarefa de se familiarizar com as ferramentas e com a filosofia Vim de se editar
textos pode ser comparado ao de aprender uma linguagem de programação nova. Ou seja, exige
paciência com os caprichos do programa. Se você só quiser escrever um e-mail de natal para
o seu tio, provavelmente as poderosas ferramentas do Vim irão parecer a você pouco mais úteis
que uma pinça.
Porque então aprender a usar o Vim? Não é melhor simplesmente usar o emacs para es-
crever meus textos e scripts? Aprender a usar o Vim não seria como querer aprender a usar
uma calculadora cujo uso é mais complicado que os próprios cálculos operados? Sim. Se você
não tem sugurança ou não é convicto sobre a utilidade de saber manipular bem textos planos,
provavelmente você irá se entediar e se desmotivar frente à aparente gratuidade do difícil estilo
de edição do Vim.
2.4 Descrição
Em princípio, nada de mal. Só que talvez você se apaixone. Pelo editor, é claro, não por mim.
Aqui descreverei o programa do curso, porém, se estiver interessado somente na ementa, ou
seja, a lista de passos do curso, consulte "Ementa do curso".
[se estiver perdido, leia "Ambientação do Moodle".]
A primeira parte
Após serem apresentadas as noções preliminares, estudaremos o Vim como um programa
(antes de um editor) como interagir timidamente com o editor em suas funções fundamentais
de operação, como abrir um arquivo, salvá-lo e sair do Vim. Imediatamente depois, para que
se possa inciar o aprendizado das ferramentas e dos comandos do Vim, serão apresentados os
princípios da sintaxe Vi de comandos padrão. Enfim, para terminar a primeira parte, aprende-
remos a consultar, ler e pesquisar, ou, se quiser, a navegar por um texto utilizando ferramentas
específicas de movimentação de texto, de cursor e de busca de ocorrências.
A segunda parte
Visto o editor como um todo, sua sintaxe e suas ferramentas de visualização e de acesso ao
texto, vamos estudar com detalhes como transitar entre os modos de operação e seus derivados,
13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
como pré-requisito para o passo seguinte. Sabendo disto tudo, estamos prontos para aprender
a fazer aquilo que é mais central em qualquer editor de texto: a editar um texto. Aprenderemos
a realizar no Vim (ou seja, de todas as maneiras imagináveis) os comandos básicos de edição
como copiar, colar e deletar, para tanto, farei uma breve vistoria sobre como manipular comandos.
Por fim, na medida do possível, os iniciarei nos bastidores do Vim, e veremos o que faz do Vim
mais do que um editor de texto plano muito versátil, mas praticamente um processador de texto
sem codificação. Ou seja, apresentarei os princípios da configuração do Vim e alguns recursos
especiais.
2.5 Metodologia
O curso está dividido da seguinte maneira:
2.6 Cronograma
• Descrição das atividades
• Semana 1
• Guia de comandos
• Sobre o Vim
• Noções preliminares
• Modos de operação
• Lição 1 - Interagindo com o editor
• Lição 2 - Sintaxe dos comandos
• Lição 3 - Acesso ao texto: Movendo-o
• Lição 4 - Acesso ao texto: Movendo o cursor
• Semana 2
• Lição 5 - Acesso ao texto: Buscando ocorrências
• Lição 6 - Transitando entre os modos
• Lição 7 - Editar o texto
• Lição 8 - Configuração do Vim e ferramentas especiais
• Material: Dicas de Vim
• Material: Meu .vimrc
• Material: Notas finais
• Avaliação de aprendizagem
14
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem ne-
cessárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,
pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor
do que 6.0, sugerimos que você faça novamente esta lição. Ao final do curso será disponibilizada
a avaliação referente ao curso. Tanto as notas das lições quanto a da avaliação serão considera-
das para a nota final. Todos os módulos ficarão visíveis para que possam ser consultados durante
a avaliação final.
Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de
Ensino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.
2.7 Programa
Noções preliminares:
Portabilidade, história do editor e licença GPL;
Sobre o Vim:
• Como usar?
• Interface.
Modos de operação do Vim:
• Modo de comando;
• Modo de linha de comando;
• Modo de inserção;
• Modo de substituição;
• Modo visual;
• Modo de seleção;
• Modo ex.
Primeira parte:
Interagindo com o editor (Abrir arquivos, gravar em disco e sair do Vim);
Sintaxe dos comandos;
Acessar um texto (e suas partes):
• Mover cursor;
• Mover texto;
• Buscar ocorrências.
Segunda parte:
Editando um comando (Selecionar, desfazer, refazer e repetir);
Transitando entre os modos;
Editar um texto:
15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Apagar;
• Copiar;
• Colar;
• Desfazer e refazer.
Apêndices:
Fundamentos de configuração do Vim:
• O arquivo de configuração ?.exrc?;
• Configurar inicializando;
• Os comandos ?set? em modo linha de comando;
Recursos e operações especiais:
• . Criar marcas;
• . Criar macros;
• . Criar abreviações;
• . Utilizar buffers;
• . Indentar o texto;
• . Verificar ortografia;
• . Verificar completude de parênteses, de chaves e de colchetes;
• . Completar palavras automaticamente;
• . Selecionar região do texto.
• . Registrar comandos em um histórico;
• . Gravar comandos interativamente;
• . Editar mais de um texto;
• . Visualizar mais de um texto;
• . Abrir um shell sem tirar o Vim da memória;
• . Comandos de shell de dentro do editor;
• . Comandos de shell para dentro do editor.
Notas finais:
Outros editores de texto plano;
Fontes de consulta;
Links.
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
2.8 Avaliação
Toda a avaliação será feita on-line.
Instrumentos de avaliação:
• Avaliações dentro das lições;
• Avaliação ao final do curso.
• Para a aprovação e obtenção do certificado o participante deverá obter nota final maior ou
igual a 6.0 de acordo com a fórmula abaixo:
• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições
• AF = Avaliação Final
2.9 Bibliografia
• Site oficial: http://www.vim.org
• Site oficial (BR): http://vimdoc.sourceforge.net
17
Capítulo 3
Guia do Curso (Início da semana 1)
Bem vindo ao curso do editor Vim! Bom, logo no início desta primeira semana sugiro que
dêem uma olhada no livro "Noções preliminares "para ganharmos alguma familiaridade com o
trabalho que vamos ter nas próximas quatro semanas. O livro "Sobre o Vim "contém informações
gerais sobre esse editor, sua história, portabilidade, licença... E só deve ser lido por quem real-
mente tiver interesse, uma vez que não é obrigatório já que não é exigido como conhecimento
nas lições. O livro Guia de comandos é um suporte para os seus estudos e não necessariamente
precisa ser consultado. Ele é somente um apanhado de todas as ações sugeridas ao longo das
lições e deve ser útil para aqueles que precisam lembrar de um comando específico ou que pre-
cisam estudar as ferramentas do Vim de forma mais objetiva. O curso realmente acontece dentro
das lições, portanto concentrem-se nelas. Lembrem-se de dar uma olhada geral nas lições antes
de adiar suas leituras, já que algumas delas são um pouco extensas. As lições serão liberadas
ao longo das duas semanas. Cada uma destas é bastante descritiva sobre seu conteúdo, logo
pode ser interessante para alguns saltar alguns trechos de texto para não se cansarem, caso
já sejam familiarizados com o assunto. Neste caso procurem ao menos acompanhar as ações
propostas ao longo do texto e transcritas para o Guia de comandos, ou simplesmente respondam
as pergunta das lições, o que é necessário para serem avaliados e receberem o diploma. Ao
final de cada uma serão feitas algumas perguntas que deverão ser respondidas para que seja
avaliado o seu aprendizado, e ao final do curso, será liberado um questionário final. A nota final
será a média dos resultados que obtiverem em cada lição, que valem 70% da nota, mais a nota
tirada no questionário final, que vale 30%. Caso tenham dúvidas ao longo do curso ou se quise-
rem compartilhar qualquer comentário ou experiência participem do fórum do curso. Estejam à
vontade.
18
Capítulo 4
Guia de comandos
Interagindo com o editor
Entrando no Vim
• Ação: digitem ’vim’ na linha de comando para entrar no Vim!
• Ação: digitem ’i’ para entrar em modo de inserção de caracteres!
• Ação: digitem ’vim nomedoarquivo’ para inciar o Vim já automaticamente chamando um
arquivo para edição!
Gravando e lendo
• Ação: digitem ’:w nomedoarquivo’ para salvar o texto em um arquivo no disco!
• Ação: digitem ’:w’ para salvar o arquivo cujo conteúdo está atualmente em edição!
• Ação: digitem ’:w outroarquivo’ para gravar o texto atual em um outro arquivo que não aquele
já chamado!
• Ação: digitem ’:e’ de dentro do Vim para abrir o arquivo desejado sem ter que voltar à shell!
Saindo do editor
• Ação: digitem ’:q’ para sair caso não tenham efetuado nenhuma edição!
• Ação: digitem ’:q!’ para sair mesmo havendo efetuado modificações!
• Ação: digitem ’:wq’ para salvar e sair imediatamente!
• Ação: digitem ’:wq outroarquivo’ para salvar outro arquivo e imediatamente sair do Vim!
Acessando o texto
Movendo o texto
• Ação: Abra o Vim com o comando ’view’ para já configurar automaticamente a sessão atual
como ’somente leitura’!
• Ação: Segure ’<Ctrl>+e’ para mover a tela uma linha para baixo pelo texto!
• Ação: Segure ’<Ctrl>+y’ para mover a tela uma linha para cima pelo texto!
• Ação: Segure ’<Ctrl>+f’ para mover a tela uma página abaixo pelo texto!
19
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Ação: Segure ’<Ctrl>+b’ para mover a tela uma página acima pelo texto!
• Ação: Especifique um número e segure qualquer um dos comandos básicos de movimen-
tarção de texto para mover um número personalizado de objetos de texto por sob a tela!
• Ação: Digite ’z.’ ou ’zz’ para situar no centro da tela a linha atualmente sob o cursor!
• Ação: Digite ’z+’ para situar no topo da tela a linha atualmente sob o cursor!
• Ação: Digite ’z-’ para situar na base da tela a linha atualmente sob o cursor!
• Ação: Determine o número da linha que deseja enquadrar e o digite seguido de uma das
posições da tela!
Movendo o cursor
Objetos: Caractere e linha com direcionais simples:
• Ação: digite ’ h ’ , ’ j ’ , ’ k ’ ou ’ l ’ para mover o cursor para a esquerda, para baixo, para
cima ou para a direita, respectivamente!
• Ação: digite <Space> ou < BackSpace> para mover o cursor por um caractere para frente
ou para trás, respectivamente!
• Ação: digite um valor numérico seguido de ’ h ’ , ’ j ’ , ’ k ’, ’ l ’, <Space> ou <BackSpace>
para movimentar o cursor por um número determinado de objetos!
Objeto: Texto:
• Ação: digite ’ gg ’ ou ’ [[ ’ para mover o cursor de onde ele estiver até o início da primeira
linha do texto!
• Ação: digite ’ G ’ ou ’ ]] ’ para mover o cursor de onde ele estiver até o início da última linha
do texto!
• Ação: digite n % para mover o cursor à linha correspondente à posição do texto apontada
em percentagem!
• Ação: digite n go para mover o cursor ao enésimo byte (em geral, enésimo caractere) do
texto!
Objeto: Tela:
• Ação: digite ’ H ’ para mover o cursor para a primeira linha visível na tela!
• Ação: digite ’ L ’ para mover o cursor para a última linha visível na tela!
• Ação: digite ’ M ’ para mover o cursor para a linha que está no centro da tela!
Objeto: Página:
• Ação: aperte ’<Ctrl>+f’ para avançar o cursor uma página abaixo!
• Ação: aperte ’<Ctrl>+b’ para recuar o cursor uma página acima!
• Ação: informe o número de páginas seguido do comando de avançar ou recuar o cursor
pelas páginas para andar um número escolhido de páginas!
20
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Objeto: Linha:
• Ação: aperte ’<Ctrl>+u’ para subir o cursor meia página no texto!
• Ação: aperte ’<Ctrl>+d’ para descer o cursor meia página no texto!
• Ação: digite o número de linhas com o qual deseja mover o cursor seguido do comando de
subir ou descer o cursor por
• linhas para movê-lo por um número específico de linhas!
• Ação: digite n gg ou n G para acessar uma linha específica do texto!
• Ação: digite : n <Enter> para acessar uma linha específica do texto!
Objetos: Parênteses e chaves:
• Ação: digite ] ) ou ] } para procurar por um parênteses ou por uma chave que fecham sem
par que estejam à frente do cursor no texto!
• Ação: digite [ ( ou [ { para procurar por um parênteses ou por uma chave que abrem sem
par que estejam à cima do cursor no texto!
Objeto combinado: Caractere com linha:
• Ação: digite ’ ˆ’ para mover o cursor para o primeiro caractere da linha corrente ou ’ _ ’ para
a mesma ação desconsiderando os espaços em branco!
• Ação: digite ’ $ ’ para mover o cursor para o final da linha corrente ou informe um valor a
contar 1 da linha atual para inserir o cursor no final de outra linha!
• Ação: digite ’<Ctrl>+m’ para mover o cursor para o primeiro caractere da linha seguinte ou ’
+ ’ para a mesma ação desconsiderando os espaços em branco!
• Ação: digite ’ - ’ para mover o cursor para o primeiro caractere da linha anterior sem consi-
derar os espaços em branco!
Objeto combinado: Coluna com linha
• Ação: digite ’ n | ’ para mover o cursor para uma coluna específica da linha atual e ’ | ’ ou ’
0 ’ simples para mover o cursor para a primeira coluna da lnha corrente!
Objeto combinado: Caractere com sentença e parágrafo
• Ação: digite ’ ( ’ para inserir o cursor no inicío da sentença corrente!
• Ação: digite ’ ) ’ para inserir o cursor no final da sentença corrente!
• Ação: digite ’ { ’ para inserir o cursor no parágrafo anterior!
• Ação: digite ’ } ’ para inserir o cursor no parágrafo seguinte!
• Ação: informe o número de objetos sentença ou parágrafo seguido do comando simples
para mover o cursor por mais de um desses objetos!
Objetos: Palavra e caractere com palavra
21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Ação: digite ’ E ’ ou ’ e ’ (considera pontuação) para avançar o cursor para o final da palavra
seguinte!
• Ação: digite ’ B ’ ou ’ b ’ (considera pontuação) para recuar o cursor para o inicío da palavra
anterior!
• Ação: digite ’ W ’ ou ’ w ’ (considera pontuação) para avançar o cursor para o primeiro
caractere da palavra seguinte!
• Ação: informe o número de palavras que deseja avançar ou recuar seguido dos comandos
’ E ’ ou ’ B ’!
Buscando
Busca nas linhas:
• Ação: digite "f ’caractere’ "para mover o cursor até a primeira ocorrência do caractere espe-
cificado encontrada após a posição atual do cursor!
• Ação: digite "F ’caractere’ "para mover o cursor até a primeira ocorrência do caractere
especificado encontrada antes da posição atual do cursor!
• Ação: digite "t ’caractere’ "para mover o cursor até a posição imediatamente anterior à
primeira ocorrência do caractere especificado encontrada após a posição atual do cursor!
• Ação: digite "T ’caractere’ "para mover o cursor até a posição imediatamente posterior à
primeira ocorrência do caractere especificado encontrada após a posição atual do cursor!
• Ação: informe um valor numérico antes de um dos comandos de busca de caracteres na
linha corrente para encontrar a sua enésima aparição!
• Ação: digite ’ ; ’ para reaplicar a última busca realizada e sua movimentação de cursor ao
próximo caractere que estiver à frente do cursor e ’ , ’ para fazer a mesma busca na linha
atual para trás do cursor!
Busca no texto:
• Ação: digite ’/<texto>’ para encontrar a primeira ocorrência da string "texto"na linha após o
cursor!
• Ação: digitem /(c).(c) para buscar por uma ocorrência qualquer de um único caractere em
uma determinada posição da string dada!
• Ação: digite / s1 | s2 | s3 | s4 para buscar as ocorrências de todas as strings informadas!
• Ação: digitem /ˆs para procurar as ocorrências da string ’ s ’ que estejam exatamente em
inícios de linha!
• Ação: digitem /s$ para procurar as ocorrências da string ’ s ’ que estejam exatamente em
finais de linha!
• Ação: digite /< s para encontrar a string em suas ocorrências que iniciem uma palavra!
• Ação: digite / s> para encontrar a string em suas ocorrências que finalizem uma palavra!
• Ação: digite /< s> para encontrar a string em suas ocorrências que sejam uma palavra!
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Ação: digite / [ c c ] para buscar as ocorrências de todos os caracteres listados entre os
colchetes!
• Ação: digite / [ ˆc c ] para buscar as ocorrências de todos os caracteres que não estão
listados entre os colchetes!
• Ação: digite / [ c - c ] para buscar as ocorrências de todos os caracteres entre os colchetes
que estão listados implicitamente na ordem de caracteres do escopo indicado pelo símbolo
- !
• Ação: digite / [ c ]+ para buscar por uma ou mais aparições das possibilidades entre col-
chetes!
• Ação: digite / [ c ] * para buscar por nenhuma ou mais aparições das possibilidades entre
colchetes!
Transitando entre os modos
Modo de inserção:
• Ação: digite ’ a ’ para iniciar o modo de inserção com o cursor um caractere a frente da
posição atual!
• Ação: digite ’ I ’ (’ i ’ maiúsculo) para inciar o modo de inserção com o cursor no início da
linha atual!
• Ação: digite ’ A ’ para iniciar o modo de inserção com o cursor no final da linha atual!
• Ação: digite ’ o ’ para inciar o modo de inserção com o cursor em uma nova linha imediata-
mente abaixo da atual!
• Ação: digite ’ O ’ para inciar o modo de inserção com o cursor em uma nova linha imediata-
mente a cima da linha atual!
• Ação: digite ’ s ’ para recortar o caractere sob o cursor e iniciar o modo de inserção!
• Ação: digite ’ S ’ para recortar toda a linha corrente e inciar o modo de inserção no início da
linha em branco!
• Ação: digite ’ c ’ com um parâmetro de objeto para recortá-lo e iniciar o modo de inserção!
• Ação: digite ’ C ’ para recortar todo texto que houver na linha corrente após a posição atual
do cursor!
• Ação: indique um valor numérico e digite quaisquer dos quatro comandos anteriores para
realizar um comando personalizado!
• Ação: digite <Ctrl>+R a partir do modo Normal para iniciar o modo de substituição!
Modo de substituição:
• Ação: digite <Ctrl>+R para iniciar o modo de substituição!
Modo Normal de inserção/substituição:
• Ação: digite <Ctrl>+o em modo de inserção ou em modo de substituição para, em modo
Normal de inclusão, passar um comando de modo Normal e voltar a digitar!
23
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Modo visual:
• Ação: digite ’ v ’ em modo Normal para entrar em modo visual e grifar exatamente o trecho
de texto que deseja editar!
• Ação: digite ’ V ’ a partir do modo Normal para entrar em modo visual do tipo linha e hachurar
o trecho de texto a se editar por linhas!
• Ação: digite ’ <Ctrl>+v ’ a partir do modo Normal para entrar em modo visual do tipo bloco
e hachurar o trecho de texto a se editar por blocos e colunas!
Modo visual de inserção/substituição:
• Ação: digite ’ v ’ ou ’ V ’ ou ’ <Ctrl>+v ’ a partir do modo Normal de inclusão para acessar o
modo visual de inclusão e seus tipos!
Modo de seleção:
• Ação: digite ’ gh ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho
selecionado!
• Ação: digite ’ g_<Ctrl>+h ’ a partir do modo Normal para inserir ou deletar texto sobre um
trecho selecionado linha a linha!
• Ação: digite ’ gH ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho
selecionado por bloco!
Modo de seleção de inserção/substituição:
• Ação: digite ’ gh ’ ou ’ gH ’ ou ’ g_<Ctrl>+h ’ de dentro de um dos modos Normal de inclusão
para entrar em modo de seleção de inserção ou de substituição!
Modo "ex":
• Ação: digite ’ Q ’ ou ’ gQ ’ para entrar no modo "ex"e passar diversos comandos de linha
sem voltar para o modo Normal!
Editando o texto
Apagando o texto
• Ação: digite (n) x para apagar (n) caractere(s)!
• Ação: digite um comando de cursor para designar objeto, acompanhado de um valor numé-
rico, se quiser, seguido de d para apagar o objeto designado!
• Ação: digite dd ou D para apagar a linha sob a qual o cursor está atualmente!
Copiando o texto
• Ação: digite y acompanhado de um movimento de cursor para copiar o objeto designado
com o comado de cursor para o buffer padrão!
• Ação: digite "cy mais o objeto de texto para o copiar para um buffer com o nome do c dado!
• Ação: digite :reg ou :di para ver os buffers atualmente nomeados!
24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Colando o texto
• Ação: digite (n) p para colar o conteúdo do buffer n vezes após o cursor!
• Ação: digite (n) P para colar o conteúdo do buffer n vezes antes do cursor!
• Ação: digite (n) g p ou P para colar o conteúdo do buffer n vezes e posicionar o cursor após
o texto colado!
• Ação: digite "c p para colar o texto armazenado no buffer de nome c!
Desfazendo e refazendo comandos
• Ação: digite (n) u para desfazer a(s) (n) última(s) ação(ões)!
• Ação: digite (n) <Ctrl>+R para refazer a(s) (n) última(s) ação(ões) desfeita(s)!
• Ação: digite U para desfazer todas as ações feitas na linha corrente!
Substituindo ocorrências
• Ação: digite : #,# s /expr1/expr2/ [opções] , sendo # um número de linha e #,# uma região
do texto, para realizar substituições sobre as ocorrências encontradas!
Ferramentans especiais Ferramentas de consulta
• Ação: digite :h assunto para consultar o Vim sobre o assunto dado!
• Ação: digite :version para ver a versão corrente do editor Vim!
• Ação: digite ga sobre um caractere para saber seus códigos hexa e octadecimal e seu valor
ASCII!
• Ação: digite m c nomear a posição sob o cursor de c e ’ c para acessá-la!
• Ação: digite ’ c e realize um comando para executá-lo sobre todo texto que estiver entre a
posição atual do cursor e a posição marcada c!
• Ação: digite : marks para ver a lista de marcas do texto atual!
• Ação: digite :set number para numerar todas as linhas do texto e : set nonumber para
desfazê-lo!
• Ação: digite :set ruler para que o Vim nos indique a posição do cursor no texto!
• Ação: digite :set smd para fazer o Vim sempre nos apresentar o atual modo de operação!
• Ação: digite :set is para habilitar a busca imediata da string de busca na medida em que vai
sendo digitada!
• Ação: digite :set hls para hachurar as ocorrências encontradas de cada busca!
• Ação: digite :split (arquivo) para abrir dividir a tela em janelas contendo diferentes textos
visualizáveis simultaneamente!
• Ação: digite vim arquivo1 arquivo2 no shell para abrir mais de um arquivo no Vim e :next e
:prev para transitar entre os arquivos!
25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Ação: digite K sobre uma palavra que corresponda a um comando para consultar o manual
do comando de dentro da sessão do Vim!
Ferramentas de edição
• Ação: digite r sobre o caractere a ser substituído seguido do novo caractere com o qual
queremos substituí-lo!
• Ação: digite ’ g ’ seguido de um comando de movimentação de cursor para trocar as letras
minúsculas por maiúsculas e vice e versa!
• Ação: digite J para juntar as linhas corrente e seguinte!
• Ação: digite « e » para tabular o texto em modo Normal!
• Ação: digite <Ctrl>+l para redesenhar a tela atual limpando as mensagens obsoletas!
• Ação: digite . para repetir o último comando ou ação realizados!
• Ação: digite :r arquivo para inserir o conteúdo de um arquivo dentro do texto em sessão
atualmente!
• Ação: digite #,# w arquivo para salvar o conteúdo entre as linhas # e # no arquivo dado!
• Ação: digite :set ro para tornar a sessão do Vim somente leitura e proibir a escrita do
arquivo!
• Ação: digite :set ic para tornar o Vim insensível à diferença entre letras maiúsculas e letras
minúsculas!
• Ação: digite :! comando para executar um comando de shell de dentro do Vim!
• Ação: digite :shell para inicar uma nova sessão shell a partir do Vim!
• Ação: digite :!! comando para inserir a saída do comando de shell dentro do arquivo texto
atual!
• Ação: digite :X e informe uma chave para criptografar o texto corrente!
• Ação: digite <Ctrl>+n para completar a palavra a ser digitada com alguma terminação antes
digitada no texto!
• Ação: digite n gq para quebrar ordenadamente as n linhas seguintes!
• Ação: digite qc para inicar e q para finalizar a gravação de uma determinada seqüência de
comandos, depois digite @c para executá-la nova e automaticamente!
• Ação: digite :abbr abreviação abreviado para poder escrever palavras abreviadas que são
convertidas automaticamente!
26
Capítulo 5
Sobre o Vim
Portabilidade
• O Vim é portável para diversas plataformas, entre elas estão:
• MS-DOS;
• SGI;
• Archimedes;
• AmigaOS;
• Atari;
• MiNT;
• BeOS;
• MacOS;
• MachTen;
• OS/2;
• RiscOS;
• VMS;
• Windows;
• A/UX;
• AIX;
• BSDI;
• Convex;
• DYNIX/ptx;
• DG/UX;
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• DEC Unix;
• FreeBSD;
• HPUX;
• Irix;
• MacOSX;
• NetBSD;
• NEXTS TEP;
• OpenBSD;
• OSF;
• QNXS;
• SCO;
• Sinix;
• Solaris;
• SunOS;
• SUPER-UX;
• Ultrix;
• Unixware;
• Unisys.
Suporte a linguagens Além de texto plano ASCII, o Vim tem suporte para textos em UTF-
8 ou em Unicode. Ou seja, suporte para alfabetos cujos caracteres são representados por mais
de um byte, como os ideogramas do Chinês, do Japonês e do Coreano. O Vim suporta edição da
direita-para-esquerda para línguas como Farsi e Hebreu.
O Vim possui mais de duzentos arquivos de reconhecimento de sintaxe para a coloração de
texto cuja extensão identifique uma linguagem ou formato de texto. Entre os formatos reconheci-
dos estão:
Linguagens: Ada, C, C++, Eiffel, Fortran, Haskell, Java, Lisp, Modula, Pascal, Prolog, Python,
Scheme, Smalltalk, SQL, Verilog, VisualBasic;
Programas matemáticos: Maple, Matlab, Mathematica, SAS;
Texto de marcação: DocBook, HTML, LaTeX, PostScript, SGML-LinuxDoc, TeX, WML, XML;
Saída de programa: diff, man;
Arquivos de configuração: 4DOS, Apache, autoconfig, BibTeX, CSS, CVS, elm, IDL, LILO,
pine, procmail, samba, slrn;
Shell scripts e configuração: Shells: sh, bash, csh, ksh, zsh; Linguagens de script: awk, Perl,
sed, yacc.
Arquivos de sistema: printcap, .Xdefaults;
28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Códigos Especiais: O Vim tem integração opcional com Perl, Tcl e Python; O Vim pode atuar
como um servidor de automatização OLE sob o Windows; O Vim pode também ser instalado com
código para X-Windows, adicionando menus configuráveis e suporte para o mouse.
Licensa Ao contrário do Vi, o Vim é um editor gratuito e compatível com a lincensa GPL,
General Public License da GNU. A GPL é a licensa de sofware livre mais difundida e usada
no mundo, o que torna o Vim uma opção acessível a sistemas operacionais como o BeOS e
os BSD e a distribuições linux como o Debian, que somente inclui em seu banco de pacotes
oficiais códigos compatíveis com a GPL. Muitas vezes quando digitamos Vi no console estamos
na verdade chamando o Vim ou um outro clone através de um alias. O criador Bram Moolenaar
faz algumas pequenas resalvas a utilização do seu editor em sua licença. Para lê-la digite ":help
license"em modo linha de comando. Um texto resumido em inglês escrito por ele próprio descreve
essas resalvas: ————————————————————————- Vim is Charityware. You
can use and copy it as much as you like, but you are encouraged to make a donation to orphans
in Uganda. See |iccf| below. If you include Vim on a CD-ROM, I would like to receive a copy.
Just so I know which Vim distributions exists in the world (and to show off to my friends sorriso).
DETAILS There are no restrictions on distributing an unmodified copy of Vim. Parts of Vim may
also be distributed, but this text must always be included. You are allowed to include executables
that you made from the unmodified Vim sources, your own usage examples and Vim scripts.
If you distribute a modified version of Vim, you are encouraged to send the maintainer a copy,
including the source code. Or make it available to the maintainer through ftp; let him know where
it can be found. If the number of changes is small (e.g., a modified Makefile) e-mailing the diffs
will do. When the maintainer asks for it (in any way) you must make your changes, including
source code, available to him. The maintainer reserves the right to include any changes in the
official version of Vim. This is negotiable. You are not allowed to distribute a modified version of
Vim when you are not willing to make the source code available to the maintainer. The current
maintainer is Bram Moolenaar . If this changes, it will be announced in appropriate places (most
likely www.vim.org and comp.editors). When it is completely impossible to contact the maintainer,
the obligation to send him modified source code is dropped. It is not allowed to remove these
restrictions from the distribution of the Vim sources or parts of it. These restrictions may also be
used for previous Vim releases instead of the text that was included with it. —————————
———————————————- O Vim, mais que gratuito, é um Charityware. A idéia de um
Charityware é que os usuários que se sintam interessados e habilitados a coloborar de alguma
forma (em geral financeiramente) com o software invistam não nele, mas no programa de caridade
a ele associado, que é determinado pelo criador. Obviamente, os Charitywares são mantidos por
indivíduos que preferem que se invista em caridade do que neles mesmos e logo, são voluntários.
O editor Vim é um desses. Ele está associado a um programa holandês de suporte às crianças
da Uganda. Para conhecer mais: http://iccf-holland.org. O texto abaixo, escrito pelo criador Bram
Moolenaar, descreve um pouco o que ele pensa de Charityware e do programa associado ao Vim:
Since Vim is open-source and freely distributable, users don’t have to pay to use it. Even so quite
a few people who use Vim regularly expressed to me that they wanted to reward me for my work
in some way. I didn’t really need extra money myself and didn’t like the idea of some people giving
me money for a program that is free. That’s when I thought of the Charityware concept. The basic
idea is that everybody who uses Vim is asked to donate to a charity. Thus the use of Vim is free,
but if you think it’s worth something, give that money to a good cause. How did I chose the charity?
Well, I have worked for a year as a volunteer with a project in the south of Uganda. This is an area
that has been struck hard by AIDS. Estimates are that 10 to 30% of the adults are infected by HIV.
Many parents die, leaving their children behind. The project helps these needy children in several
ways. We find a new home for the child. We make sure the child can go to school, gets medical
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
attention and care made to measure. After I returned from Uganda, my heart was still there. I
decided the least I could do was to keep supporting the project by raising money for them. The
connection to Vim was a very logical one. Thus now I’m asking Vim users to consider donating for
the orphans in Uganda. I have also setup an adoption program. You can financially adopt a child,
which means that the child gets long-lasting help, which is best for the child. Since we work only
with volunteers and the money is directly sent to the project, almost all the money is really used in
Uganda.
História O editor Vim foi desenvolvido por Bram Moolenaar, um usuário do tradicional
editor Vi. Suas origens remontam ao antigo e original editor do Unix, o Ed. Este, como os
outros primeiros editores, rodava em terminais frequentemente sem monitores de vídeo como
teletipos ou terminais lentos do tipo hardcopy. Portanto, para visualizar o texto normalmente era
necessário imprimir suas linhas. O Vi começou a ser desenvolvido nesse contexto, por volta de
1976, a partir do ex, que era um editor orientado à linha baseado no ed. O conceptor do Vi,
Bill Joy, um granduando da Universidade da California em Berkeley que depois veio a participar
da fundação da Sun Microsystems, desenvolveu o Vi com o intuito de ser uma interface visual
para o ex. Ao contrário deste, o Vi seria capaz de dispor de todo texto apresentado no monitor
para edição, e não uma linha somente, e por isso seu nome: (V)isual (I)nterface. Um dia Bram
Moolenaar adquiriu um Amigo, era o computador que veio ao mercado em 1985 e que era bem
visto por seu poder de som e de vídeo e por seu sistema operacional multi-tarefa AmigaOS. Como
este não era compatível com o editor Vi nem Moolenaar se satisfez com os clones que encontrou,
ele pegou o que julgou ser o melhor, o Stevie, e começou a melhorá-lo com o intuito de torná-lo
capaz de todos recursos de que o Vi dispunha. Em 2 de novembro de 1991, assim que seu editor
passou a funcionar razoavelmente bem, na versão 1.14, ele o chamou de Vim, significando Vi
IMitation, e o lançou em um domínio público do Amigo. Assim outros programadores passaram
a o enviar patches e ajudaram a portá-lo para outras plataformas, como para o MS-DOS e para
o Unix. Com o tempo o Vi IMitation, que era derivado do núcleo de um clone do Vi, havia sido
tantas vezes reformulado e extendido com novas implementações que Bram Moolenaar sentiu-se
no direito de chamá-lo de Vim, agora denotando Vi IMproved.
Pequena linha do tempo do editor Vim até a versão 6.0 (O editor está hoje em sua versão
6.4.006)
1988 - Vim 1.00: Ainda Vi IMitation, nunca lançado publicamente; 1991 02 Nov - Vim 1.14:
Primeira publicação (no Fred Fish disk #591); 1992 - Vim 1.22: Portado para o Unix. Agora Vi
IMproved e compete com o Vi; 1994 12 Ago - Vim 3.00: Suporte para várias janelas e buffers;
1996 29 Mai - Vim 4.00: Graphical User Interface (por Robert Webb), mais tarde, Gvim; 1998 19
Fev - Vim 5.00: Coloração de sintaxe; 2001 26 Set - Vim 6.00: Folding, plugins, divisão vertical
de telas, suporte a línguas;
30
Capítulo 6
Trabalhando com o Vim
Apesar de suas poderosas ferramentas de edição, o Vim foi designado para trabalhar com
textos planos, ao contrário, por exemplo, de um processador de texto como o Open Office Writer.
Suas funções mais importantes são, portanto, operações de edição básica de texto, como aces-
sar, mover, visualizar, organizar, copiar, colar, apagar e inserir caracteres. Justamente por serem
operações tão fundamentais é que suas ferramentas são tão versáteis. Como o editor foi conce-
bido segundo os princípios econômicos e versáteis do Vi, o Vim não trabalha, em princípio, como
um editor simplista. Os editores do tipo Vi são editores modais, ou seja, trabalham com modos.
De certa forma, a maioria dos editores são modais em algum sentido, especialmente os gráficos
(que não necessariamente precisa funcionar dentro de um gerenciandor de janelas), visto que
além do cursor de inserção, também dispõe de menus estáticos e dinâmicos, como as barras de
ferramentas e os menus de mouse. Podemos considerar comandos com as teclas de controle ou
meta também usos de um modo de controle do editor, como ferramentas de manipulação de texto
que não seja a inserção direta de caracteres no texto. O Vim, no entanto, é modal por excelência.
Ele possui diversos ambientes a partir dos quais podemos editar. São oficialmente seis diferentes
formas de acessar o texto, chamadas modos de operação, que oferecem diferentes ferramentas
cada qual segundo seu contexto de edição, sendo tudo ergonomicamente acessível a partir do
teclado. Nisto consiste o poder e a expansibilidade dos editores da família Vi. Como pôde ser
notado no programa do curso, separado em duas partes, o trabaho no Vim (como provavelmente
em quase todos os editores) pode ser dividido em dois grandes tipos de tarefas. O primeiro tipo
de tarefa é o trabalho de acessar as diferentes partes do texto, tanto com a visualização que se
obtem com a movimentação da tela sobre o texto quanto com a movimentação do cursor e com
as buscas de ocorrências e marcações de texto, este tipo de tarefa não envolve ferramentas quem
afetem o texto acessado, por serem apenas comandos de consulta. O segundo tipo é o trabalho
de edição propriamente dito, ou seja, aquele que visa modificar um arquivo segundo nossas in-
teresses. Este trabalho inclui saber tanto os comandos básicos de edição quanto as ferramentas
especiais que facilitam a edição, o que tipicamente é alcançado com uma boa configuração. Esse
é o modelo de possibilidades de uso de um editor de texto, mas para que saibamos fazê-lo no
Vim, deveremos conhecer alguns de seus segredos, como os papéis dos modos de operação e
sua sintaxe de comandos padrão, entre outros.
Em seguida descrevo todo o programa do curso, que por motivos técnicos foi dividido em
duas partes, mas enfatizo que essa divisão do programa não tem base nas semanas do curso
nem baseia um cronograma. Para saber a divisão semanal do curso procure a seção "Plano de
curso".
A primeira parte
Após serem apresentadas estas preliminares, estudaremos o Vim como um programa (antes
31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
de um editor) como interagir timidamente com o editor em suas funções fundamentais de ope-
ração, como abrir um arquivo, salvá-lo e sair do Vim. Imediatamente depois, para que se possa
inciar o aprendizado das ferramentas e dos comandos do Vim, serão apresentados os princípios
da sintaxe Vi de comandos padrão. Enfim, para terminar a primeira parte, aprenderemos a con-
sultar, ler e pesquisar, ou, se quiser, a navegar por um texto utilizando ferramentas específicas de
movimentação de texto, de cursor e de busca de ocorrências.
A segunda parte
Visto o editor como um todo, sua sintaxe e suas ferramentas de visualização e de acesso ao
texto como um todo, vamos estudar com detalhes como transitar entre os modos de operação e
seus derivados, como prerequisito para o passo seguinte. Sabendo disto tudo, estamos prontos
para aprender a fazer aquilo que é mais central em qualquer editor de texto: a editar um texto.
Aprenderemos a realizar no Vim (ou seja, de todas as maneirs imagináveis) os comandos básicos
de edição como copiar, colar e deletar, para tanto, farei uma breve vistoria sobre como manipular
comandos. Por fim, na medida do possível, iniciar-los-ei nos bastidores do Vim, e veremos o que
faz do Vim mais do que um editor de texto plano muito versátil, mas praticamente um processador
de texto sem codificação. Ou seja, apresentarei os princípios da configuração do Vim e alguns
recursos especiais.
Convencionando Como estudaremos tantas ferramentas juntos e certamente nos depa-
raremos com dificuldades pessoais diferenciadas assim como tanto com previstas quanto com
inusitadas complicações com respeito a construção de comandos, penso ser sensato determinar
certas ditas convenções, que de convencionado mesmo não têm nada, já que infelizmente fui
somente eu que as decidi. Enquanto nas ações propostas durante as lições, listadas no livro de
consulta Guia de comandos, apresentarei os comandos literalmente, sempre que eu escrever um
comando dentro de um texto o colocarei entre aspas, sugerindo que aquele trecho do texto deve
ser entendido em uma meta-linguagem, em outro contexto, ou seja, que para a oração atual ele
será sempre só um substantivo. Pelo mesmo motivo apresentarei caracteres em aspas simples
quando em uma frase de texto e os caracteres que devam ser interpretados como letras entre as-
pas duplas. Vale notar que eventualmente alguns trechos podem estar despadronizados apesar
das revisões, neste caso, estarei sempre disponível para esclarecimentos. Os termos em inglês
que aparecerão ao longo do curso estarão todos em itálico e serão esclarecidos, caso contrário,
o que também vale para termos técnicos em português, um link nos levará facilmente à entrada
do texto no glossário Wiki. Na apresentação dos comandos, vez ou outra me referirei a teclas
presentes nos teclados em geral, e apresentarei elas no formato <Esc>, <Enter>, <Shift>, etc.
Quando o pressionar de um tecla se seguir do dígito de um caractere, representarei o comando
ligando as duas partes com o símbolo ’ _ ’ , como em "g_<Ctrl> ", o que significa simplismente
que primeiro digitamos uma vez ’ g ’ e depois apertamos uma vez <Ctrl>. Obviamente, algumas
teclas não operam por conta própria, como no exemplo. Nestes casos o formato da representação
será como em "g_<Ctrl>+h ", que significa que se deve apertar uma vez ’ g ’ e depois digitar ’ h ’
enquanto se segura a tecla <Ctrl>. Não farei isso com a tecla <Shift> em todos os casos, pois ao
me referir às letras maiúsculas em comandos simplismente as escreverei em maiúsculas. Por fim,
mais a frente no curso aprenderemos sobre a estrutura sintática dos comandos do Vim e suas
partes, e além de as nomearmos as associaremos a letras que serão usadas na apresentação de
comandos ou, no caso, de projetos ou formatos de comandos. Quando me referir com as letras a
essas entidades, no entanto, as escreverei em itálico para evitar que as confundemos com dígitos
de comandos reais. Não se preocupem, tudo isso ficará claro. Por enquanto farei apenas algu-
mas associações importantes para a leitura de algumas partes do curso: c = caractere - significa
um caractere qualquer; s = string - significa uma string qualquer, ou seja, um trecho de texto ou
um conjunto qualquer de caracteres concatenados.
32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
A interface do Vim Mas como será a cara do Vim? Pois bem, mais uma vez, não vou
mentir. É importante que reconheçam anteriormente algumas das indiossincrasias exóticas do
Vim para que não se atrapalhem posteriormente com seu uso. O Vim, no lugar de linhas vazias,
tem tils ’ ’. O Vim, quando no modo padrão de operação, não imprime os comandos digitados,
fazendo parecer que nada está acontecendo. O cursor do Vim não se mete entre os caracteres,
ele os sobrepõe. O cursor, além disto, não tem independência da tela, e se movermos a tela sobre
o texto, o cursor nos acompanhará, saindo da posição em que o deixamos. Se "mal"configurado,
o editor pode sequer nos informar o modo de trabalho em que nos encontramos e o mouse não
funcionará. Não existem, senão na versão gráfica Gvim, nem botões nem quaisquer tipos de
menu acessáveis. É claro, dependendo da configuração de cores do terminal, seu editor texto
será uma simpática tela preta. E, por fim (?), não há nenhum "X "para se clicar quando se quer
sair. Acreditem, todas essas características são, na verdade, admiráveis. Com o uso vamos todos
aprendendo a extrair as virtudes de toda essa versatilidade pitoresca. O Vim, por trabalhar com
texto plano, tem privilégio em trabalhar facilmente com textos enquanto quadros. Os caracteres
são posicionados cuidadosamente uns sobre os outros, permitindo-nos utilizar um conjunto todo
de comandos que se aplicam ao texto como a uma tabela. Devemos pensar que no Vim, portanto,
existem linhas e colunas dentros das quais os caracteres podem se posicionar. Porém não deixem
de compreender que no Vim nem sempre o primeiro caractere da linha estará na primeira coluna
do texto, pois as linhas podem ser iniciadas por espaços e tabulações.
Dêem uma olhada na apresentação do Vim. Observe como o cursor está na primeira linha e
sobre o primeiro caractere da linha, ou seja, na primeira coluna, como indicado no canto inferior
direito. Vejam também como o Vim está nos informando sobre que modo de operação o Vim se
33
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
encontra, no caso o modo de inserção, em inglês insert mode. Em baixo disto, o Vim reserva um
espaço para interagir conosco nos informando sobre as nossas ações e sobre as dele.
34
Capítulo 7
Modos de operação
Os modos de operação são simplesmente formas de se trabalhar o texto, ou seja, maneiras
diferentes de que dispomos para acessá-lo. É nos modos de operação que consiste a estratégia
inteligente de trabalho que o Vim propõe: "Você quer editar um texto? Escolha um caminho."Nos
manuais oficiais do Vim, escritos pelo próprio Bram Moolenaar, assim como em boa parte dos
livros e tutorias, diz-se existirem seis modos básicos de operação e cinco modos derivados que
resultam de algumas possíveis combinações entre os modos básicos ou de recursos especiais
de um modo. Porquanto ". "designa o modos básicos e - "seus modos derivados, a lista oficial
dos modos de operação é:
. Modo Normal (padrão); - Modo pendente; - Modo Normal de inserção; . Modo de inserção; -
Modo de substituição; . Modo de seleção; - Modo de seleção de inserção; . Modo visual; - Modo
visual de inserção; . Modo linha de comando; . Modo ex.
No entanto, nas páginas de ajuda oficiais do Vim, acessíveis com "help"em modo linha de
comando (ou seja, digintando ":help"em modo Normal, o padrão de entrada) também escritas
pelo criador, não vemos nenhuma lista de modos de operação, mas somente links na primeira
página para três ambientes que ele chama de modos, nesta ordem:
. O modo Normal; . O modo visual; . O modo de inserção.
Isso se deve provavelmente a uma escolha de cunho didático, visto ser um manual de ajuda
e que, ao longo das páginas, podemos encontrar referências a outros modos. Caso tenham inte-
resse, pode-se encontrar os manuais em modelo formal de todas as versões da 5.0 à 6.4 assim
como os manuais de ajuda e links para outros tutoriais e FAQs em "http://vimdoc.sourceforge.net".
Também existem manuais e tutoriais que consideram haver somente dois grandes modos, o Nor-
mal, às vezes chamado de modo aberto, e o modo de inserção, sendo todos os outros derivados
destes, se forem considerados modos. Eu, entre outros, gosto de pensar que são na prática sete
modos básicos de operação, visto que o modo variante de substituição pode ser considerado um
modo a parte. Considerarei haver, portanto, sete modos básicos de operação na prática. O modo
pendente, por sua vez, não necessariamente precisa ser considerado um modo distinto, visto ser
uma propriedade do modo Normal. Logo, a lista na prática será:
. Modo Normal (padrão); - Modo Normal de inserção/substituição; . Modo de inserção; . Modo
de substituição; . Modo de seleção; - Modo de seleção de inserção/substituição; . Modo visual; -
Modo visual de inserção/substituição; . Modo linha de comando; . Modo ex.
Esta lista é de longe mais razoável para nós, usuários, visto que para entender os modos
derivados basta reconhecermos que existem três modos que trabalham em conjunto com os
dois modos de inclusão de caracteres (inserção e substituição): o modo Normal, o visual e o de
seleção. A princípio, se iniciarmos o Vim normalmente, entramos sempre no modo Normal (ou
modo de comando). Podemos, no entanto, passarmos parâmetros para ele na sua chamada na
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
linha de comando, ordenando-o a, entre outras coisas, iniciar um determinado modo. Veremos
isso na segunda lição. De dentro do modo Normal, temos acesso a todos os outros modos,
podendo chamá-los através do teclado com comandos reservados simples. Veremos agora uma
descrição da função de cada modo de operação, seguida do comando básico através do qual
podemos iniciá-los.
1 Modo Normal
O modo Normal, também chamado de modo de comando, é o modo padrão do Vim, não
somente com o qual o editor abre em uma inicialização usual, mas é o modo mais fundamental,
a partir do qual se tem acesso à todos os outros. Ele é capaz de realizar todas as operações
básicas da edição de texto e de controle de comando e de janelas, além de chamar os outros
modos e de oferecer recursos especiais que aprenderemos mais tarde, como criar marcas e
outras ações simples. Este modo é acessado a qualquer momento de qualquer modo com o
simples apertar de tecla de controle "esc". Caso seu teclado não possua a tecla "esc", pode ser
tentado ˆ[ ou ˆ3 , ou ainda alguma tecla <meta> que o teclado venha a possuir. De dentro do modo
Normal são realizados comandos sem a espera da tecla de retorno, o "Enter". Os comandos
digitados são ou processados imediatamente após sua digitação, que é realizada com um ou com
poucos caracteres simples ou com combinações da tecla "Ctrl", ou esperam alguma espécie de
parâmetro. O parâmetro algumas vezes é necessário após habilitarmos, com uma combinação
de "Ctrl", certo tipo de controle e enfim passamos o comando de fato, e em outros casos o
editor espera mudarmos de modo de operação para que o comando digitado seja aplicado. Ou
seja, quando digitamos alguma coisa no modo Normal, ou o comando não é reconhecido (o
que é informado, caso configurado adequadamente), ou ele entra em um outro modo, ou ele
processa uma operação de edição, ou ele espera entrarmos em um dos dois modo de inclusão
de caracteres para realizar uma ação especial (veremos em breve) ou ele espera um parâmetro
simples para indicar o uso e completar o comando. Esta última situação é o que oficialmente
é o variante modo pendente. O (outro) modo derivado do modo Normal é o modo Normal de
inserção, que é acessado com o comando "Ctrl-o"em modo de inserção. Ele funciona como o
modo Normal, mas só nos permite fazer uma operação e ele volta automaticamente para o modo
de inserção.
2 Modo linha de comando
O modo linha de comando se destina ao que podemos chamar de meta-comandos, que dizem
respeito ao controle do próprio programa e dos arquivos. Ele é o ambiente de onde configuramos
a sessão de edição, de onde acessamos salvamos e fechamos arquivos de texto e de onde
saimos do Vim. É esperado de nós a tecla de retorno, ou "Enter", para o processamento do
comando, e por isso sua analogia à linha de comando. Todas essas operações são anunciadas
ao Vim por meio do caractere ": ", que o informa a presença do que chamei de meta-comando.
Este modo também realiza outro tipo de operação, que diz respeito ao acesso às partes do texto.
Com o caractere "/ ", amplamente convencionado em ambientes linux, podemos fazer buscas por
ocorrências altamente especificáveis de expressões e manipulá-las, deletando-as, substituindo-
as, etc. Existe uma sintaxe particular para a busca por ocorrências de texto, o que será explicado
ainda na primeira semana. Com o caractere "? "fazemos buscas para cima do cursor, e com "!
"filtramos comandos para, por exemplo, realizarmos um comando de Shell de dentro do Vim. Todo
este modo é altamente editável, ou seja, existem várias ferramentas exclusivas para facilitar a
elaboração de comandos neste modo. Estudaremos elas ainda na primeira semana. Acessamos
o modo linha de comando, enfim, inciando nosso comando com algum destes caracteres ": / ? !
"a partir do modo Normal, mas, em princípio, sempre que me referir ao modo linha de comando,
ou à linha de comando do Vim, estarei falando de comandos inciados com dois-pontos, ": ". Nos
casos em que me referir aos outros usos deste modo tornarei claro se trato de uma busca, para
36
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
frente ou para trás, ou de um comando filtrado.
3 Modo "ex"
O modo ex poderia ser, e inclusive é, considerado por alguns como uma variante do modo
linha de comando, visto que nele se opera de maneira praticamente idêntica. A diferença está no
controle que temos sobre a linha de comando. Enquanto em linha de comando se espera que
realizemos uma operação e voltemos para o modo Normal, em modo podemos efetuar quantos
comandos quisermos e nos manter como em linha de comando. No modo ex, portanto, não temos
que continuar digitando ": "a cada comando e a tela não é atualizada listando cada operação que
fazemos. Por este último motivo o modo ex é ideal para que configuremos o Vim em pleno uso
com um script "on-line". Para entrar em modo ex, digitamos "Q ". Também podemos iniciá-lo com
"gQ ", o que, é claro, funciona de forma ligeiramente diferente. Enquanto com "Q "as linhas de
comando são manipuláveis somente com os comandos padrões de inserção de linhas, ou seja,
com <bs>, <del> e comandos como "Ctrl-u", "Ctrl-e", etc., o modo ex iniciado com "gQ "é editável
com todos os recursos do modo linha de comando, como completar automaticamente palavras,
por exemplo.
4 Modo de inserção
Este modo funciona como um editor normal, que dispõe um cursor e espera a entrada de
caracteres a serem incluídos diretamente no texto. Entramos em modo de inserção com o co-
mando simples "i ", a partir do modo Normal, mas existem diversas outras maneiras de acessá-lo,
como "I ", "a ", "A ", "o ", "O ", "c ", "C ", "s "e "S ". Podemos utilizar o modo de inserção assim
como o modo de substituição (ou seja, os modos de inclusão de caracteres, como estou cha-
mando) também em combinação com os modos Normal, visual e de seleção o que é explicado
nas respectivas seções.
5 Modo de substituição
Este modo é um modo variante do modo de inserção segundo a lista oficial de modos mas po-
demos considerá-lo um modo básico dado que ambos desempenham os mesmos papéis apesar
de dispor de menos alternativas de ativação. O modo de substituição é utilizado como o modo
de inserção, mas sobrepõe, ou ainda melhor, substitui caracteres do texto com os caracteres di-
gitados ao invés de inseri-los ao lado. É o recurso "Insert"que a maioria dos teclados possui e
que todos editores de hoje reconhecem. Inclusive, a tecla "Insert"é uma das maneiras de entrar
em modo de substituição. Outra, a que recomendo, é apertando "R "em modo Normal. Podemos
utilizar o modo de substituição, assim como o modo de inserção (ou seja, os modos de inclusão
de caracteres, como estou chamando), também em combinação com os modos Normal, visual e
de seleção, o que é explicado nas respectivas seções.
6 Modo visual
O modo visual pode ser visto como uma extensão útil do modo Normal, visto que temos
acesso às mesmas operações de edição. Este modo é destinado à seleção de um trecho de
texto com a movimentação dos cursores, que formam como uma hachura sobre as linhas a se-
rem selecionadas. Passamos comandos então como em modo Normal para manipular o trecho
marcado. Ele funciona como qualquer editor visual com suporte a mouse, e inclusive pode-se
configurar o próprio Vim para suportar a utilização do mouse. Este modo é acessado com o ca-
ractere "v "em modo Normal. Existe um recurso do modo visual que praticamente poderia ser
considerado um modo derivado, que é o bloco visual, ou visual block. Ele é acessado com "Ctrl-
v"a partir do modo Normal. Com ele podemos selecionar blocos quadrangulares de texto, como
se ele fosse uma tabela ou um quadro de caracteres sem linha, nos permitindo selecionar, por
exemplo, somente uma coluna de texto para manipulação. Semelhante a este recurso é o visual
line, acessível com "Shift-v"a partir do modo Normal.
7 Modo de seleção
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
O modo de seleção é semelhante ao modo visual, mas ele não trabalha em cooperação com
o modo Normal, ou seja, o modo de seleção não aceita comandos como o visual. Ao contrário,
caso seja digitado qualquer caractere imprimível entra-se em modo de inserção, ou seja, sua
utilização é análoga a de um editor de texto visual simplista. Este modo é acessado através do
comando "gh", de dentro do modo Normal. "Ctrl-g", a partir do modo visual, é uma das outras
alternativas que serão apresentadas mais tarde. Existem também os recursos de selection block
e selection line no modo de seleção, ativados com "gH"e com "g_Ctrl-h"respectivamente.
38
Capítulo 8
Lição 1 - Interagindo com o Editor
8.1 Entrando
Agora já conhecemos o que é o Vim e temos uma boa noção das suas características, das
suas peculiaridades operacionais e da sua história. Então, estamos prontos para aprender a
editar de fato? Nossa primeira dificuldade técnica a ser enfrentada é abrir o editor de texto.
Estejam com seus terminais de linha de comando preparados para evocar o grande editor. Agora
digitem a palavra ’vim’. Pronto, primeira fase concluída!
Ação: digitem ’vim’ na linha de comando para entrar no Vim!
8.2 Saindo
39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Nessa tela podemos ver uma introdução simples e simpática ao ambiente de edição que nos
informa o nome do programa, VIM - Vi IMproved, o número da sua versão do programa (que
caso seja anterior à 5.0, é aconselhável uma atualização), o nome do principal criador, Bram
Moolenaar, e o aviso orgulhoso de que o código do Vim é aberto e de que sua distribuição é
gratuita. Em seguida ele apresenta uma frase aleatória que pode ser um convite para que nos
registremos, um pedido para que demos alguma contribuição com o programa de ajuda das
crianças da Uganda ou qualquer outra. Em seguida ele nos informa sobre dois comandos vitais
no uso do Vim: ’:help’ e ’:q’.
Com o ’:help’ a partir do modo Normal podemos consultar o manual completo de ajuda de
comandos de edição, de modos de operação e de controle do programa em geral além de outros
textos relativos ao Vim, cuja importância não diz respeito exclusivamente à sua operacionalidade.
Entre esses arquivos de textos estão a licença, o texto de registro descrevendo as alterações da
versão e um texto mostrando as diferenças entre o Vim e o Vi.
Com o ’:q’ a partir do modo Normal, ou seja, no modo padrão de entrada também acessível
com ’Esc’ a partir dos outros modos, saímos do Vim caso não tenhamos realizado nenhuma tarefa
de edição. Vamos testar: digitem ’:q’ (sem os apóstrofes, é claro). ’ q’, em inglês, é quit o que
também funciona se digitado.
Ação: digitem ’:q’ para sair caso não tenham efetuado nenhuma edição!
8.3 Escrevendo
Agora retornem para o Vim digitando ’vim’ na linha de comando novamente. Nós conseguimos
sair mas também não fizemos nada! Isso não adiantou em muita coisa. Vamos iniciar uma edição
então digitem alguma coisa como "text". Parabéns, não apareceu nada! Isto aconteceu porque
estamos em princípio no modo Normal e a partir dele não podemos inserir caracteres novos.
Portanto, como aprendemos, digitem ’i’ a partir da tela inicial do Vim. Porém se você fez como foi
dito provavelmente terá que digitá-lo duas vezes. Pronto! Como aprendemos, ’i’ inicia o modo de
inserção.
Ação: digitem ’i’ para entrar em modo de inserção de caracteres!
8.4 Saindo sem salvar
Enfim, escrevam! Neste modo qualquer um sabe se virar, pois o modo de inserção se com-
porta como um editor simples. Enquanto escrevemos, o texto que editamos está em um buffer
reservado pelo Vim na memória, que ainda não o associa a arquivo nenhum. Para sairmos do
Vim agora não basta digitar ’:q’, inclusive porque estamos em modo de inserção, portanto, voltem
para o modo Normal apertando ’Esc’ e em seguida tente sair com ’:q’. O Vim nos informa de
que não salvamos o texto desde sua última modificação, ou seja, ele está dizendo que o texto
que está atualmente na memória não foi escrito no disco rígido para que seu acesso seja pos-
sível posteriormente. Sim - dizemos - nós sabemos que ele não foi salvo, agora nos deixe sair!
Pois bem, como o Vim (ainda!) não consegue nos ouvir, precisamos informá-lo de que estamos
conscientes do fato de não havermos salvado o texto e que ainda assim queremos sair. Fazemos
isso com o caractere ’!’ após o comando (de modo linha de comando). Esse caractere significa
alguma coisa como "Faça isso e não me pergunte nada!", ou "Sim, eu sei o que eu estou fazendo,
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
acredite em mim!". Seu funcionamento lembra o parâmetro ’-f’ presente em muitos comandos
Unix. Digite, portanto, ’:q!’. Pronto, de volta ao terminal.
Ação: digitem ’:q!’ para sair mesmo havendo efetuado modificações!
8.5 Salvando 1
Grande coisa, não?! Conseguimos entrar em um editor de textos, escrever e sair sem sal-
var! De que isso adianta? Nada! Entre no Vim novamente (’vim’). Entre no modo de inserção
novamente (’i’)’. Digite um texto novamente e retorne para o modo Normal (’Esc’). Agora vamos
salvar o texto antes de sair. Digite ’:w’ para salvá-lo. ’ w ’ vem de write, do inglês, e o comando
nesse formato também é reconhecido. Infelizmente, o Vim não sabe com que nome ele deve
escrever seu texto em disco. Portanto, informe o nome do arquivo após o comando desta forma:
’:w nomedoarquivo’. Pronto! salvamos o texto no disco!
Ação: digitem ’:w nomedoarquivo’ para salvar o texto em um arquivo no disco!
8.6 Salvando 2
O lugar onde o texto foi guardado é por padrão o diretório a partir do qual chamamos o
Vim da linha de comando, ou seja, justamente onde iremos quando saímos dele. Vamos ver?
Digite ’:q’, que agora funcionará já que não há uma modificação sequer que não tenha sido
salva. Com o comando Unix ’ls’ listamos parte do conteúdo do diretório atual. Entre os arquivos
listados devemos encontrar aquele que criamos. Para lê-lo podemos digitar, por exemplo, ’cat
nomedoarquivo’ e conferir se esse tal de Vim funciona mesmo.
Voltemos ao Vim. Agora queremos realizar uma última edição do nosso texto, então digite ’vim’
novamente para entrar no editor. Ora, mas onde está meu texto? Será que eu só posso editar
textos novos!? Imagina! Vamos chamar o texto de dentro do Vim. Digite o comando de linha de
comando ’:e nomedoarquivo’. Olha ele aí! Que beleza esse Vim. Façam suas modificações a
partir do modo de inserção (’i’) e retornem depois para o modo Normal (’Esc’). Percebam que
agora o Vim sabe a que arquivo o texto em edição está associado, logo não é mais necessário
informar o nome do arquivo para salvá-lo, podendo o comando ser simplesmente ’:w’.
Ação: digitem ’:w’ para salvar o arquivo cujo conteúdo está atualmente em edição!
8.7 Salvando e saindo
Queremos agora salvar e sair ao mesmo tempo, afinal o que o Vim teria de rápido e eficiente
se ele fosse todo burocrático? Digite ’:wq’. Perceba que concatenando dois comandos eles
funcionam perfeitamente! Outros comandos existem para realizar a mesma operação: ’:ZZ’ e ’:x’
Ação: digitem ’:wq’ para salvar e sair imediatamente!
8.8 Abrindo um arquivo 1
Apesar dos comandos no formato ’quit’ e ’write’ serem reconhecidos, os comandos concate-
nados devem ser abreviados. Para conferir o conteúdo do arquivo a partir do Vim digite na linha
de comando do seu Linux ’vim nomedoarquivo’. O arquivo será aberto em modo de edição.
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Ação: digitem ’vim nomedoarquivo’ para inciar o Vim já automaticamente chamando um ar-
quivo para edição!
8.9 Salvando 3
Podemos chamar inclusive mais de um arquivo para a sessão do Vim simultaneamente com o
mesmo comando no formato: ’vim arq1 arq2 arq3 (...)’. Veja como ele reconhece o seu comando
e informa na parte inferior o nome do arquivo e a quantidade de linhas e de caracteres existentes
no texto. Caso queiram gravar esse texto em outro arquivo, já sabem, não é mesmo? Digite ’:w
outroarquivo’ e continue editando o texto, pois o Vim continuará o associando ao arquivo original,
diferentemente de outros editores de texto. Esse comando funciona como um "salvar como".
Ação: digitem ’:w outroarquivo’ para gravar o texto atual em um outro arquivo que não seja
aquele já chamado!
8.10 Abrindo um arquivo 2
Logicamente, podemos portanto salvar nosso texto com outro nome de arquivo e também sair
imediatamente! Basta digitarmos ’:wq outroarquivo’.
Ação: digitem ’:wq outroarquivo’ para salvar outro arquivo e imediatamente sair do Vim!
Para terminar vamos aprender uma alternativa para o problema de querermos abrir um ou
mais arquivos já de dentro do Vim. O comando edit (do inlgês), que também funciona, tem sua
versão abreviada ’:e’. Com ’:e nomedoarquivo’ abrimos um arquivo de dentro do Vim. Se quiser,
tente!
Ação: digitem ’:e’ de dentro do Vim para abrir o arquivo desejado sem ter que voltar ao shell!
42
Capítulo 9
Lição 2 - Sintaxe dos comandos
9.1 Parte 1 / 7 | Operadores de controle
Atenção: esta lição não tem questão ao final. Seu objetivo é que a passagem de comandos
seja facilitada, mas caso se sinta seguro quanto a sintaxe de comandos (de modo Normal) do vim
ela é dispensável.
O que aqui chamamos de operadores de controle não são exatamente as famosas teclas de
controle, como <Ctrl>, <Shift>, etc. No Vim, os operadores de controle são todas as teclas e
caracteres que não realizam uma ação propriamente dita nem imprimem texto (mesmo que seja
de um comando). Eles habilitam outros comandos (tipicamente <Ctrl>, mas não somente), como
na função típica das teclas de controle. Além disso manipulam a ambientação e o uso do Vim,
como os caracteres de transição de modos e a tecla <Esc>.
9.2 Parte 2 / 7 | O paradigma Vi
O chamado paradigma Vi envolve três variáveis cujas combinações quando executadas reali-
zam diferentes tarefas de edição: verbo, número e objeto. Esses três argumentos juntos compõe
uma ação e estão presentes, ainda que ocultos, em todos os comandos de edição em modo
Normal. A lógica é: faça isto nesta quantidade de objetos. Não obstante o verbo ser certamente
o parâmetro fundamental, cada uma das variáveis podem ser ocultadas em determinadas situa-
ções. Neste caso, a quantidade padrão é 1 (um) e o verbo padrão é mover o cursor. Em geral, os
caracteres são o objeto padrão, sendo as linhas o objeto secundário. O objeto, caso seja oculto,
é inferido a partir da direção (e não do sentido) para a qual apontamos; apontar horizontalmente
implica que o objeto é um caractere e apontar verticalmente implica que o objeto em questão é
uma linha.
9.3 Parte 3 / 7 | Objetos de texto
Pode ser dito que o Vim é um editor orientado a objetos. Como assim? Isso quer dizer que
o Vim possui a capacidade de reconhecer objetos de texto como caracteres, linhas e parágrafos,
sobre os quais podemos realizar tarefas. Para o Vim, nem que seja implicitamente, realizamos
edições sempre sobre um determinado objeto ou sobre um conjunto de objetos especificáveis.
Estes objetos podem ser:
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
. Caracteres; . Palavras; . Sentenças; . Linhas; . Parágrafos; . Todo o texto; . A string de uma
busca; . Posição de Parênteses e de todo tipo de delimitadores (até comentários em C!).
Como eles são de espécies diferentes, algumas utilizações também serão diferentes. Há de
notar que existem ações que dizem respeito a um objeto inteiro ele mesmo e ações que usam
o objeto como medida para selecionar uma região de ação no texto. O uso de todos objetos,
porém, é relativo à posição do cursor, mesmo quando a ação é mover o próprio cursor para um
determinado objeto (ou por um determinado objeto, no caso de uma ação que usa o objeto como
medida de região de texto). Neste caso, em que a ação é o simples mover do cursor, existe a
exceção de querermos mover o cursor segundo um objeto absoluto, como é qualquer um que
diz respeito ao texto como um todo, como o ’início do texto’ ou o ’final do texto’. Somente neste
caso o uso do objeto não é relativo ao cursor, pois mesmo quando sabemos que o uso do objeto
não será outro (como cópia, colagem e deleção), mas será para o simples movimento do cursor,
temos de saber também a posição desse cursor para identificarmos sua ação específica.
9.4 Parte 4 / 7 | Verbos
Basicamente, exitem dois tipos de verbos: os simples, cujo objeto são sempre caracteres, e
os verbos pendentes, que esperam a entrada do parâmetro ’objeto’ para executarem uma ação.
Ou seja, o primeiro tipo de verbo pode receber somente um parâmetro numérico, que caso seja
omitido será tido como sendo o valor ’1’. Já os verbos compostos recebem além do parâmetro
numérico um que indica sobre qual objeto o verbo deve realizar a sua ação. Esse objeto, por sua
vez, pode ser indicado de diversas maneiras distintas caso seja utilizado no seu lugar um operador
de controle ou um caractere direcional. Um caso extremamente interessante de pendência de
verbo é o de comandos que utilizam uma string inserida no texto em uma sessão de modo de
inclusão como objeto de sua ação. Isso significa que entrar em modo de inserção, por exemplo,
pode ser parte de um comando de edição, e a string inserida o objeto de ação. Alguns dos verbos
básicos são:
. Mover cursor; . Deletar; . Copiar; . Colar; . Recortar; . Buscar ocorrências; . Desfazer; .
Refazer.
Só existe uma ação que suporta a omissão do verbo: a movimentação do cursor. Podemos
montar um comando para mover o cursor com a indicação de um número e de um objeto, ou seja,
com a indicação de por quantos objetos de texto de um certo tipo o cursor andará e apontar a
direção da ação com o uso de um dos direcionais. Como essa é uma ação que permite a omissão
tanto do valor numérico quanto do objeto, se omitimos o verbo realizamos o único comando
completamente omisso. Em outras palavras, mover o cursor é ação padrão que é realizada
automaticamente com o uso dos direcionais.
9.5 Parte 5 / 7 | Valores de quantidade
Um dos parâmetros que podemos passar para comandos é o parâmetro numérico. Este,
em geral, refere-se ao número de objetos do tipo designado que serão incluídos da solução do
comando. Por exemplo, podemos querer remover as duas, quatro, oito ou todas as próximas
palavras. Outros verbos, no entanto, reagem de forma ligeiramente diferente ao parâmetro nu-
mérico, lendo o valor como uma descrição objetiva de algum tipo de objeto numerável, ou seja,
indentificável numericamente, como, por exemplo, as linhas.
44
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
9.6 Parte 6 / 7 | Os direcionais
Os editores da família Vi disponibilizam quatro caracteres que têm a função tanto de suprir a
ausência das teclas de setas direcionais em certos teclados quanto também oferecer uma dis-
posição espacial das teclas de controle que seja ergonômica e eficaz. São, portanto, caracteres
cujas teclas fazem parte do centro da região direita do teclado. As teclas são ’h’, ’j’, ’k’ e ’l’. Elas
desempenham em modo Normal, respectivamente, as funções das setas para a esquerda, para
baixo, para cima e para a direita. Os caracteres direcionais, assim como as setas, não devem
ser entendidos como comandos simples, como seria natural visto que em modo Normal existem
diversos comandos de um dígito que realizam ações. Os direcionais não são meros verbos de
movimento, apesar de poderem constituir ações espaciais como o mover dos cursores sem a
explicitação do verbo. Na verdade, os direcionais não devem ser vistos sequer como verbos, mas
sim como as realizações de um parâmetro para verbos cujo objeto seja indeterminado.
9.7 Parte 7 / 7 | Construindo comandos
Vimos que o paradigma de edição da família Vi assume que toda ação possui os três parâme-
tros respectivamente: valor numérico, doravante "n", verbo de edição, "v", e objeto de texto, "o". É
esta exatamente a ordem sintática com que os parâmetros devem ser concatenados no comando.
Portanto, um esquema bastante simples que pode ser apresentado de como é a sintaxe básica
dos comandos de edição é, em geral: n v o. Uma alternativa a esta estrutura é v n o, que também
funciona igualmente. Como cada um destes pode ser eventualmente omitido (o verbo somente
em um caso), a aparência dos comandos pode e será diferente em muitos casos.
Como ainda não conhecemos os comandos de edição, utilizaremos como exemplo os dois
comandos de remoção de caracteres, o ’x’ e o ’d’ e outros que serão apresentados nos momentos
oportunos. Para nosso experimento, siga estritamente as seguintes instruções: abra o Vim com
o comando ’vim’, insira com ’i’ o texto "O Vim Salva "(repare no espaço) e aperte <Esc>. Em
nosso primeiro comando, vamos instruir o Vim a copiar as três últimas palavras, para tanto, vamos
informá-lo da quantidade de objetos, que é três (’3’), do objeto, que é palavra atrás do cursor (’b’) e
do verbo, que é copiar (’y’, de yank). Logo, o comando é: "3yb". Ao digitar os caracteres, notaram
que eles parecem não ser reconhecidos pelo editor pois não não são impressos na tela, o que
é uma característica dos comandos em modo Normal, mas ele está os armazenando enquanto
espera a sintaxe do comando se completar para então executá-lo. Se realizamos corretamente
o comando, o cursor deve estar sobre o primeiro caractere da linha, a letra ’O’. Vamos agora ao
nosso segundo comando. Apagaremos três palavras a partir do cursor. Informaremos o Vim do
número de objetos, que é novamente três (’3’), do objeto, que é palavra a partir do cursor (’w’, de
word) e do verbo, que é apagar (’d’, de delete). O comando portanto será: "3dw". Os curiosos
podem tentar apagar duas palavras e depois a última, para ver outras combinações do mesmo
comando. Para tanto, aperte ’(1)u’ (de undo), sendo o número opcional, já que 1 é o padrão,
para desfazer o último comando e digite "2dw"e enfim "(1)dw". Tentem também, apertando ’u’,
digitar três vezes "dw", apagando palavra por palavra. Porém, para o nosso propósito neste
caso, é necessário que seja refeita a remoção da frase com o "3dw". Agora, com o texto vazio,
digitem ’5p’. ’p’, que vem de paste, cola o último pedaço de texto armazenado no buffer padrão
(veremos mais sobre os buffers mais tarde). Observe também que os objetos tanto do comando
’u’ quanto do ’p’ são objetos implícitos especiais, no caso a última ação e o último pedaço de
texto armazenado, respectivamente. "5p"tem de ter impresso no texto cinco vezes a expressão
religiosa "O Vim Salva ". Veja como a colagem foi feita sobre uma mesma linha, e experimente
45
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
agora digitar ’(1)dd’. A repetição do verbo e a omissão do número indica que o Vim deve remover
a linha toda, e somente uma linha, linha aqui é o objeto implícito a essa ação. O verbo ’d’, além
de remover, também copia o objeto removido, ou seja, ’d’ mais do que remover ou copiar, recorta.
Sabendo disso e tendo recortado a linha, vamos colá-la diversas vezes com o comando "200p".
Ah, agora sim! Praticamente um salmo!
46
Capítulo 10
Lição 3 - Acesso ao texto: Movendo-o
10.1 Parte 1 / 7 | Iniciando uma sessão somente leitura
Provavelmente a função mais básica de um editor de texto tela cheia é permitir que se percorra
todas as linhas do texto. Em muitos casos não queremos editar nem escrever, mas simplesmente
consultar um arquivo ou ler um pouco. Antes de mais nada é conveniente que aprendamos a ope-
rar o Vim para essa específica finalidade. Podemos, para isso, abrir qualquer arquivo de texto,
plano ou não. O importante é que tenhamos bastante linhas para procurar e percorrer. Para
chamar um texto basta digitar "vim caminho/do/arquivo". Como o texto não vai ser editado e pos-
sivelmente estaremos consultando um arquivo que não queremos modificar, abram o Vim com o
comando "view caminho/do/arquivo". Abrir o Vim com ’view’ é mesmo que abrir o Vim e configu-
rar a sessão como "somente leitura", ou "read only"com o comando ’:set ro’. "View"significa ’ver’,
é uma maneira simples de permitir que se utilize o Vim de uma forma segura contra alterações
indesejadas.
Ação: Abra o Vim com o comando ’view’ para já configurar automaticamente a sessão atual
como ’somente leitura’!
10.2 Parte 2 / 7 | linha a linha para baixo
Com o Vim aberto e um arquivo grande em sessão, independente da forma, vamos conhecer
mais algumas ferramentas. A movimentação do texto pela tela não depende da posição do cursor,
ainda que a posição deste dependa da movimentação da tela. Existem duas formas básicas de
se percorrer o texto. Uma é linha a linha, outra é página a página, como se apertássemos <page
up> ou <page down>. Para caminhar linha a linha para baixo, apertamos ’<Ctrl>+e’ para cada
linha andada. Podemos manter o <Ctrl> segurado e controlar o andamento das linhas com o
caractere ’e’.
Ação: Segure ’<Ctrl>+e’ para mover a tela uma linha para baixo pelo texto!
10.3 Parte 3 / 7 | linha a linha para cima
Igualmente, para seguir para a linha anterior, apertamos ’<Ctrl>+y’ . Da mesma forma pode-
mos manter o <Ctrl> pressionado para facilitar o controle da movimentação do texto pela tela,
permitindo-nos apertar uma vez ’y’ para cada linha que queremos andar.
Ação: Segure ’<Ctrl>+y’ para mover a tela uma linha para cima pelo texto!
47
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
10.4 Parte 4 / 7 | tela a tela
A outra maneira típica de se movimentar o texto é andando página a página. Podemos andar
uma página para baixo digitando ’<Ctrl>+f’ (sendo ’f’ "forward") para cada página movida. Para
andar uma página para cima no texto, digitamos ’<Ctrl>+b’ (sendo ’b’ "backward") para cada
página percorrida. Vale o mesmo sobre o dito controle da movimentação mantendo o <Ctrl>
apertado.
Ação: Segure ’<Ctrl>+f’ para mover a tela uma página a baixo pelo texto!
Ação: Segure ’<Ctrl>+b’ para mover a tela uma página a cima pelo texto!
10.5 Parte 5 / 7 | linhas escolhidas
Por serem comandos de modo Normal, vale a sintaxe de comandos estudada. Ou seja, pode-
mos informar ao Vim em quantos objetos queremos realizar nossa ação, que no caso é mover o
texto pela tela. Experimentem digitar o comando ’5_<Ctrl>+e’. Este comando fará a tela descer 5
linhas! Como o número estava sendo omitido, andávamos sempre por somente um objeto (linha
ou página), mas podemos construir os comandos de movimentação do texto como construímos
qualquer comando de edição em modo Normal! Note que no caso de querermos especificar um
número não podemos manter o <Ctrl> apertado.
Ação: Especifique um número e segure qualquer um dos comandos básicos de movimentar-
ção de texto para mover um número personalizado de objetos de texto pela tela!
10.6 Parte 6 / 7 | posição da tela
Existe no Vim, assim como no Vi, outra uma maneira de acessar uma região do texto que
não é um destes recursos tradicionais de movimentação. Podemos decidir em que lugar da tela
desejamos que fique uma determinada parte (na verdade, linha) do texto. Podemos, por exemplo,
querer que uma determinada linha fique no topo da tela, no centro ou o na sua base. A linha em
questão pode ser tanto a linha atual, ou seja, a linha sobre a qual o cursor está, e neste caso sua
posição é irrelevante para o comando, ou a linha em questão pode ser uma linha especificada
com o parâmetro numérico dos comandos de modo Normal. Para situar a linha atualmente sob o
cursor no centro da tela digitem ’z.’ (’z’ e ’ponto’). Este comando também pode ser realizado com
’zz’. Para situar a linha sob o cursor no topo da tela digitem ’z+’ (’z’ e ’+’) e para situá-la sob o
cursor na base da tela digitem ’z-’ (’z’ e ’-’).
Ação: Digite ’z.’ ou ’zz’ para situar no centro da tela a linha atualmente sob o cursor!
Ação: Digite ’z+’ para situar no topo da tela a linha atualmente sob o cursor!
Ação: Digite ’z-’ para situar na base da tela a linha atualmente sob o cursor!
10.7 Parte 7 / 7 | posição da tela escolhida
Se quisermos determinar uma linha para ser situada em uma das três posições informamos
ao Vim o parâmetro numérico no início do comando. Para a linha 30 ficar no centro da tela,
por exemplo, escrevemos ’30z.’ ou ’30zz’. Observe, como este é um caso em que o valor nu-
mérico não indica uma quantidade de objetos, mas identifica um objeto segundo uma das suas
características, no caso, a posição do objeto linha.
48
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Ação: Determine o número da linha que deseja enquadrar e o digite seguido de uma das
posições da tela!
Note que no Vim o cursor nunca fica perdido pelo texto, ou seja, ele estará sempre visível
mesmo que o texto seja movido (com as comandos básicos) sem levá-lo em considerção. Quando
descemos pelo texto, o cursor fica no topo da tela, e quando subimos pelo texto ele fica na sua
base, sempre acompanhando nosso movimento. Em um editor normal essa característica poderia
ser uma desvantagem visto que estaríamos sempre perdendo a posição do cursor. No Vim, no
entanto, pressupõe-se que existem recursos suficientes para movermos com facilidade o cursor
para diferentes regiões do texto. Veremos a movimentação do cursor na próxima página da lição.
49
Capítulo 11
Lição 4 - Acesso ao texto: Movendo o
cursor
11.1 Parte 1 / 7 | direcionais e texto
Esta lição é certamente fundamental. Claro que não espero que se decore todos os comandos
simplesmente pela leitura, mas prestem atenção nos comandos em geral pois a movimentação
do cursor futuramente será nosso parâmetro de objeto para outras ações. Ou seja, serão estes
mesmos comandos os utilizados futuramente para para apagar, copiar, colar e etc. Assim como
na página "Movendo o texto", precisamos ter em mãos um texto de preferência extenso para
praticar os comandos, afinal, não podemos mover texto nem cursor por linhas de texto que não
existem, indicadas por ’ ’ tanto no Vim quanto no Vi. Portanto, abra um arquivo com a chamada
’vim arquivo’ ou ’view arquivo’, caso queira configurar a sessão como ’somente leitura’.
Objetos: Caractere e linha com direcionais simples
Antes de mais nada, lembremos dos direcionais ’ h ’ , ’ j ’ , ’ k ’ e ’ l ’ , funcionando em modo
Normal como as setas para a esquerda, para baixo, para cima e para a direita, respectivamente.
Como vimos no material "Sintaxe dos comandos", os direcionais são especiais por funcionarem
de forma semelhante a uma operação de controle, no sentido de não serem uma ação, mas
podem eventualmente evocar uma enquanto apontam para algum parâmetro. É exatamente isso
que acontece quando apertamos um dos controles direcionais. O verbo mover cursor é chamado
implicitamente a agir em uma determinada direção, movendo-se pelo objeto implícito caracteres,
no caso do ’ h ’ e do ’ l ’ ou pelo objeto implícito linha, no caso do ’ j ’ e do ’ k ’. Lembre,
no entanto, que o Vim, ao contrário do Vi, reconhece as setas padrão do teclado. Não vamos
utilizá-las, porém, para aprendermos a usar o Vim em sua forma mais otimizada.
Ação: digite ’ h ’ , ’ j ’ , ’ k ’ ou ’ l ’ para mover o cursor para a esquerda, para baixo, para cima
ou para a direita, respectivamente!
Além das setas, existe outra alternativa aos direcionais controlados por caracteres. Em modo
Normal, podemos movimentar o cursor para frente ou para trás com as teclas de <Space> e de
<BackSpace>, respectivamente, ou seja, o botão de espaço pode mover o cursor um caractere
para frente assim como o botão de <BackSpace> pode movê-lo um para trás.
Ação: digite <Space> ou < BackSpace> para mover o cursor por um caractere para frente ou
para trás, respectivamente!
Caso um parâmetro numérico seja passado, por uma vez podemos mover o cursor por um
número determinado de caracteres.
Ação: digite um valor numérico seguido de ’ h ’ , ’ j ’ , ’ k ’, ’ l ’, <Space> ou <BackSpace> para
50
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
movimentar o cursor por um número determinado de objetos!
Com a tecla <Enter>, ou <Return>, fazemos quase o mesmo que digitando ’ j ’, ou seja,
movemos o cursor para a linha de baixo, inclusive sendo possível passar parâmetro numérico
com validade de um movimento, voltando depois ao padrão de um. A diferença é que <Enter>
levará o cursor para o início da linha inferior.
Objeto: Texto
Se precisarmos, e isso acontece com certa freqüência, existem comandos que podem mover o
cursor para as extremidades do texto, seu final e seu começo. Com ’ G ’ podemos alcançar o início
da última linha do texto a partir de qualquer lugar. Com ’ gg ’ levamos o cursor até o seu começo,
o início da primeira linha. Os mesmos resultados são alcançados, porém de forma mais fácil,
com os duplos colchetes: ’ [ [ ’ para o início do texto e ’ ] ] ’ para sua última linha. Opcionalmente,
pode-se passar um parâmetro numérico para os comandos ’ g ’ e ’ G ’ equivalente à linha que
desejamos acessar com o cursor. Podemos também, caso saibamos nos orientar, levar o cursor
à uma determinada ou posição do texto referenciada por um valor em percentagem. Podemos
digitar, por exemplo, ’ 50% ’ para levar o cursor ao meio do texto. Outra ferramenta curiosa é a de
mover o cursor para um determinado caractere do texto referenciado pelo número de bytes que
o antecedem. Em outras palavras, se estivermos trabalhando com caracteres ASCII, podemos
mover o cursor para o enésimo caractere do texto. O comando é ’ n go ’.
Ação: digite ’ gg ’ ou ’ [[ ’ para mover o cursor de onde ele estiver até o início da primeira linha
do texto!
Ação: digite ’ G ’ ou ’ ]] ’ para mover o cursor de onde ele estiver até o início da última linha do
texto!
Ação: digite n % para mover o cursor à linha correspondente à posição do texto apontada em
percentagem!
Ação: digite n go para mover o cursor ao enésimo byte (em geral, enésimo caractere) do texto!
11.2 Parte 2 / 7 | tela e página
Objeto: Tela
De forma semelhante aos comandos de reposição da tela em uma determinada posição do
texto, considerando as três posições visíveis do texto na tela, topo, centro e base, existem três
comandos de movimentação do cursor que nos permitem movê-lo para as mesmas três posi-
ções da tela. Se quisermos mover o cursor para a primeira linha visível na tela, digitamos ’ H ’
(provavelmente High em inglês); se quisermos movê-lo para a última linha visível na tela, digita-
mos ’ L ’ (provavelmente Low em inglês); e se quisermos levá-lo ao meio da tela digitamos ’ M ’
(provavelmente Middle ou Medium em inglês).
Ação: digite ’ H ’ para mover o cursor para a primeira linha visível na tela!
Ação: digite ’ L ’ para mover o cursor para a última linha visível na tela!
Ação: digite ’ M ’ para mover o cursor para a linha que está no centro da tela!
Objeto: Página
Podemos também movimentar o cursor uma página inteira. Como foi dito, no entanto, quando
movemos o texto por sua tela o cursor sempre se mantém a nossa mostra, e se movemos o texto
uma página, o cursor também deve se mover uma página. Ou seja, na prática existe somente
um comando tanto para mover o texto uma página quanto para mover o cursor por uma página.
Logo, o comando de descer o cursor por uma página do texto é o mesmo que o de mover a tela
por uma página para baixo. De forma semelhante, o comando de subir o cursor por uma página
do texto é o mesmo que o de mover a tela por uma página para cima. Experimentem apontar
51
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
verticalmente com os direcionais enquanto seguram a tecla <Shift>, seja com as letras ou com as
setas, e chegarão aos mesmos resultados. Como vimos, podemos informar um valor numérico
antes do comando para determinar quantas páginas o cursor andará.
Ação: aperte ’<Ctrl>+f’ ou <Shift>+j para avançar o cursor uma página abaixo!
Ação: aperte ’<Ctrl>+b’ ou <Shift>+k para recuar o cursor uma página a cima!
Ação: informe o número de páginas seguido do comando de avançar ou recuar o cursor pelas
páginas para andar um número escolhido de páginas!
11.3 Parte 3 / 7 | linha, parênteses e chaves
Objeto: Linha
Como deveria ser esperado, existem também dois comandos que nos permitem avançar um
número determinado de linhas ou para cima ou para baixo. Se não informamos nenhum valor
númerico, o Vim assume que queremos avançar ou recuar o cursor meia página de texto. Para
mover o cursor meia página para cima digitamos ’<Ctrl>+u’, sendo ’u’ up em inglês. Para mover
o cursor meia página para baixo digitamos ’<Ctrl>+d’, sendo ’d’ down em inglês. Para mover o
cursor um número desejado de linhas digitamos o valor numérico seguido do comando apropri-
ado: ’n_<Ctrl>+d’, para descer e ’n_<Ctrl>+u’, para subir. Depois que um número de linhas foi
determinado toda vez que movemos o cursor com um desses dois comandos ele é movido pelo
mesmo número de linhas até que outro valor seja atribuído.
Ação: aperte ’<Ctrl>+u’ para subir o cursor meia página no texto!
Ação: aperte ’<Ctrl>+d’ para descer o cursor meia página no texto!
Ação: digite o número de linhas com o qual deseja mover o cursor seguido do comando de
subir ou descer o cursor por linhas para movê-lo por um número específico de linhas!
Obviamente existem ferramentas para movermos o cursor diretamente para a linha desejada.
Além dos comandos ’ gg ’ e ’ G ’ após o valor numérico da linha, existe um outro comando de fácil
execução, sendo este provavelmente o mais conveniente, que tem como objeivo mover o cursor
para uma linha determinada. Tente digitar ’ : n ’ , um comando de linha, ou seja, seguido de
<Enter>, para acessar a linha apontada por ’ n ’.
Ação: digite n gg ou n G para acessar uma linha específica do texto!
Ação: digite : n <Enter> para acessar uma linha específica do texto!
Objetos: Parênteses e chaves
O Vim possui um recurso muito precioso aos programadores. Ele é capaz de procurar por
parênteses e chaves que estejam sem par, ou seja, incompletos. Muitas vezes é importante para
averiguar se sobrou um símbolo qualquer naquelas funções ou em cálculos aritméticos. Para
tanto devemos nos posicionar no local do símbolo que suspeitamos faltar, e caso o outro símbolo
esteja à frente no texto, digitamos ’ ] ) ’, para parênteses, ou ’ ] } ’ para chaves. Caso o símbolo
esteja a cima, digite ’ [ ( ’ ou ’ [ { ’. Observe que se o parâmetro passado for a repetição do
colchete ’ ] ] ’ ou ’ [ [ ’ levamos o cursor para o final ou para o começo do texto, respectivamente.
Ação: digite ] ) ou ] } para procurar por um parênteses ou por uma chave que fecham sem par
que estejam à frente do cursor no texto!
Ação: digite [ ( ou [ para procurar por um parênteses ou por uma chave que abrem sem par
que estejam à cima do cursor no texto!
52
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
11.4 Parte 4 / 7 | caractere com linha
Objeto combinado: Caractere com linha
Até então vimos comandos que movem o cursor com referência aos objetos caractere, linha
e página. Agora vamos conhecer comandos de movimentação do cursor que levam em conside-
ração outros objetos como palavras, sentenças, parágrafos e combinações entre objetos, como
primeiro caractere da linha seguinte e começo e final de linha, por exemplo.
Podemos mover o cursor para o primeiro caractere da linha atual com o comando simples ’ ˆ’.
Porém, como usamos em geral teclados configurados segundo a ABNT2, temos de digitar ’ ˆ’ duas
vezes para que seja efetuada a ação. O comando ’ _ ’ faz a mesma coisa, desconsiderando os
espaços em branco. Logicamente, podemos também mover o cursor para o final da linha atual,
simplesmente digitando ’ $ ’. Este comando permite que informemos que linha após a corrente
cujo final o cursor estará. Como quando nenhum valor é informado o cursor vai ao final da linha
atual, então significa que a linha atual corresponde ao valor padrão 1. Logo, se queremos mover
o cursor para o final da linha seguinte temos de digitar ’ 2$ ’.
Ação: digite ’ ˆ’ para mover o cursor para o primeiro caractere da linha corrente ou ’ _ ’ para a
mesma ação desconsiderando os espaços em branco!
Ação: digite ’ $ ’ para mover o cursor para o final da linha corrente ou informe um valor a
contar da linha atual para inserir o cursor no final de outra linha!
Podemos mover o cursor para o primeiro caractere de linha seguinte com o comando ’<Ctrl>+m’
como se digitássemos ’ j ’, só que movendo-o para o início da linha. Podemos fazer o mesmo
desconsiderando os espaços em branco com ’ + ’. Se quisermos movê-lo para o primeiro carac-
tere da linha anterior, ao invés da seguinte, desconsiderando os espaços em branco, digitamos ’
- ’.
Ação: digite ’<Ctrl>+m’ para mover o cursor para o primeiro caractere da linha seguinte ou ’ +
’ para a mesma ação desconsiderando os espaços em branco!
Ação: digite ’ - ’ para mover o cursor para o primeiro caractere da linha anterior sem considerar
os espaços em branco!
11.5 Parte 5 / 7 | coluna com linha
Objeto combinado: Coluna com linha
O ’ 0 ’ move o cursor para a primeira coluna da linha atual, que tipicamente corresponde
ao primeiro caractere, exceto nos casos de haver espaços na linha antes do primeiro caractere.
Podemos querer mover o cursor para uma coluna específica da linha atual e não para o início ou
para o final, neste caso podemos especificar um valor correspondente à coluna da linha corrente
com o comando ’ n | ’. Como o valor padrão é sempre 1, se digitamos pipe, ’ | ’, sem parâmetro
numérico movemos o cursor para a coluna 1 da linha, ou seja, para a primeira coluna. Logo, o
comando simples ’ | ’ equivale ao comando simples ’ 0 ’.
Ação: digite ’ n | ’ para mover o cursor para uma coluna específica da linha atual e ’ | ’ ou ’ 0 ’
simples para mover o cursor para a primeira coluna da linha corrente!
11.6 Parte 6 / 7 | caractere com sentença e parágrafo
Objeto combinado: Caractere com sentença e parágrafo
53
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Se quisermos inserir o cursor no início da sentença atual, digitamos ’ ( ’, se quisermos que ele
seja inserido no final, digitamos ’ ) ’. Para reconhecer uma sentença o Vim procura por padrões,
que nem sempre correspondem ao que esperamos. Possíveis exemplos seriam a presença de
um ponto seguido de um espaço ’Texto. ’, de uma tabulação e de uma linha em branco. Podemos
também mover o cursor por parágrafos com ’ { ’ para o parágrafo anterior e ’ } ’ para o parágrafo
seguinte. O Vim identifica parágrafos basicamente pela a presença de linhas em branco, ou
seja, através de um padrão que não nos satisfará sempre. Note que tanto para os comandos
de movimentação de cursor pelas sentenças quanto para os de movimentação por parágrafos
podemos informar o número de objetos que queremos contar para a movimentação do cursor.
Ou seja, podemos montar comandos como ’n(’ , ’n)’ , ’n{’ e ’n}’ .
Ação: digite ’ ( ’ para inserir o cursor no início da sentença corrente!
Ação: digite ’ ) ’ para inserir o cursor no final da sentença corrente!
Ação: digite ’ { ’ para inserir o cursor no parágrafo anterior!
Ação: digite ’ } ’ para inserir o cursor no parágrafo seguinte!
Ação: informe o número de objetos sentença ou parágrafo seguido do comando simples para
mover o cursor por mais de um desses objetos!
11.7 Parte 7 / 7 | palavra
Objetos: Palavra e caractere com palavra
Um dos objetos mais úteis pelos quais podemos movimentar o cursor é a palavra. O Vim
é capaz de reconhecer início e final de palavras considerando ou não as pontuações. A seguir
vamos aprender a mover o cursor pelas palavras.
Para movê-lo uma palavra a frente posicionando o cursor no final da palavra digite ’ E ’,
sendo ’ E ’ End em inglês. Caso o cursor esteja no meio de uma palavra ele vai parar no final
desta. O mesmo vale para ’ B ’, Begin em inglês, mas este move o cursor para o início da
palavra atual e depois recua palavra por palavra. Estes comandos não levam em consideração
as pontuações das palavras, ou seja, ignora saltando-as. Se quisermos realizar os mesmos
comandos mas levando a pontuação a sério, digitamos os mesmos comandos simples em caixa
baixa, com os caracteres minúsculos: ’e’ e ’b’. Se preferirmos, podemos mover o cursor para o
primeiro caractere da palavra seguinte com ’ W ’ para não respeitar a pontuação ou com ’ w ’ para
respeitá-la. Os mesmos comportamentos que ’ w ’ e ’ b ’ podem ser provocados com ’ <Shift>+l
’ e ’ <Shift>+h ’ respectivamente, assim como com ’ <Ctrl>+l ’ e com ’ <Ctrl>+h ’, como acontece
em vários programas e editores. Também podemos informar um valor numérico para determinar
quantas palavras queremos avançar ou recuar com todos esses comandos.
Ação: digite ’ E ’ ou ’ e ’ (considera pontuação) para avançar o cursor para o final da palavra
seguinte!
Ação: digite ’ B ’ ou ’ b ’ (considera pontuação) para recuar o cursor para o início da palavra
anterior!
Ação: digite ’ W ’ ou ’ w ’ (considera pontuação) para avançar o cursor para o primeiro carac-
tere da palavra seguinte!
Ação: informe o número de palavras que deseja avançar ou recuar seguido dos comandos ’
E ’ ou ’ B ’!
Na verdade, existem outras maneiras que aprenderemos de mudar a posição do cursor, mas
estas fazem parte das diferentes formas de entrar em modo de inserção. Por esse motivo, são
ações que implicam em mais que a movimentação do cursor, e que por isso não satisfaria aqueles
54
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
que querem mover o cursor em modo Normal. Veremos estas operações em breve na lição
"Transitando entre os modos".
55
Capítulo 12
Lição 5 - Acesso ao texto: Buscando
ocorrências (Início da semana 2)
12.1 Parte 1 / 7 | buscando (na linha)
Os comandos de busca e de substituição são possivelmente os mais difíceis e elaborados do
Vim. Suas combinações sintáticas são extensas e com eles encontramos todo tipo de strings e
pedaços de texto. A versatilidade, assim como a complexidade, devem-se ao uso que se pode
fazer das expressões regulares, ou seja, dos padrões de texto que usamos para encontrar o exato
trecho de texto que procuramos. Não será apresentada nesta página a utilização dos comandos
de substituição, pois esta lição se destina à operacionalidade de leitura, consulta e análise no Vim,
e não da edição. Naturalmente, também não especificarei todos os parâmetros ou opções pos-
síveis que podemos passar às buscas, visto que existe uma infinidade deles. Aconselho que os
interessados e necessitados busquem por conta própria os recursos de que precisam no manual
de ajuda do Vim digitando ’ :help :/ ’. Aprenderemos aqui os comandos de busca mais básicos
e importantes. Como alguns devem saber, a barra ’ / ’ é um comando de busca convencionado
em silêncio entre os criadores de software para Linux. Digite ’ / ’ em um navegador, em um pro-
cessador de texto ou em um gerenciador de pacotes e será possível realizar uma busca. No Vim
não é diferente. Em modo Normal ao digitar ’ / ’ é iniciado um comando de busca em modo linha
de comando, ou seja, sujeito às mesmas regras de operação que os comandos iniciados por ’ : ’.
No Vim, o mesmo comando de busca pode ser realizado no sentido inverso, ou seja, a partir do
cursor e para cima, digitando ’ ? ’ no lugar de ’ / ’. Porém, fora os comandos de busca no texto que
suportam a sintaxe para buscarmos todo tipo de ocorrência, serão apresentados primeiramente
quatro comandos simples de busca de caracteres na linha corrente. Não somente estes quatro
comandos de busca de caracteres, mas todas as buscas que são realizadas movem o cursor para
a posição da ocorrência encontrada. Portanto, todos os comandos de busca poderiam ser, em
algum sentido, também considerados como comandos de movimentação do cursor. Ainda que
eles possam e até devam ser utilizados com essa finalidade, esta não é a função mais importante
de um comando de busca. Os quatro comandos que serão apresentados agora procuram um
caractere especificado na linha atual do cursor e o move até a ocorrência. O comando "f ’carac-
tere’ "procura a primeira aparição do caractere à frente do cursor na linha atual. Já o comando "F
’caractere’ "faz a mesma busca atrás do cursor. Este é movimentado até o caractere encontrado.
Ação: digite "f ’caractere’ "para mover o cursor até a primeira ocorrência do caractere especi-
ficado encontrada após a posição atual do cursor!
Ação: digite "F ’caractere’ "para mover o cursor até a primeira ocorrência do caractere espe-
56
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cificado encontrada antes da posição atual do cursor!
12.2 Parte 2 / 7 | buscando (na linha)
Os próximos dois comandos buscam caracteres somente após o caractere do cursor na linha
atual. Eles se diferenciam, no entanto, por moverem o cursor para antes ou depois do caractere
encontrado. "t ’caractere’ "move o cursor até a posição anterior do caractere especificado encon-
trado na linha atual à frente do cursor. "T ’caractere’ "faz o mesmo, mas posiciona o cursor uma
coluna após o caractere encontrado.
Ação: digite "t ’caractere’ "para mover o cursor até a posição imediatamente anterior à primeira
ocorrência do caractere especificado encontrada após a posição atual do cursor!
Ação: digite "T ’caractere’ "para mover o cursor até a posição imediatamente posterior à
primeira ocorrência do caractere especificado encontrada após a posição atual do cursor!
Como podemos supor, é possível informar um valor numérico antes de todas estas buscas
para encontrar a enésima ocorrência do caractere especificado. Outros dois comandos que con-
vém explicar são os de repetição de buscas. ’ ; ’, após a realização de uma busca com ’ f ’, ’ F
’, ’ t ’ ou ’ T ’ realiza a última busca novamente e ’ , ’ da mesma forma a repete, mas no sentido
inverso.
Ação: informe um valor numérico antes de um dos comandos de busca de caracteres na linha
corrente para encontrar a sua enésima aparição!
Ação: digite ’ ; ’ para realizar a última busca novamente e sua movimentação de cursor ao
próximo caractere que estiver à frente do cursor; digite ’ , ’ para fazer a mesma busca na linha
atual para trás do cursor!
12.3 Parte 3 / 7 | buscando (no texto)
Busca simples
As buscas de ocorrências no texto utilizam uma pequena sintaxe necessária para que in-
formemos de forma razoável todas as especificações das expressões regulares que queremos
encontrar. Os comandos básicos começam todos com ’ / ’ e a mesma busca pode ser realizada
no sentido inverso, ou seja, para cima, iniciando-o com ’ ? ’. Assim como as buscas de caracteres
na linha atual, podemos repetir a última busca com ’ n ’ e a mesma busca no sentido inverso com
’ N ’. Apesar dessa diferenciação, se sabemos que existe somente uma ocorrência no texto do
padrão que procuramos, não vai haver diferença entre procurá-lo com ’ / ’ ou com ’ ? ’, pois o Vim
considera para as buscas o início do texto como uma continuação do seu final em uma busca
com ’ / ’ e o final do texto como uma continuação do início em uma busca com ’ ? ’. Ou seja, o
Vim dá uma volta no texto quando procura por uma ou mais ocorrências até ter vistoriado todo o
texto. Ele avisa quando encontra a primeira aparição após ter dado a volta, que atingiu o topo ou
a base, e prossegue a busca na outra ponta: "search hit BOTTOM, continuing at TOP", no caso
do aviso de que foi realizada uma volta para cima (logo, em uma busca com ’ / ’); e "search hit
TOP, continuing at BOTTOM", quando uma volta para baixo foi feita durante a busca (neste caso
uma busca com ’ ? ’). Como é razoável pensar, se buscamos algo a partir do meio do texto, ou
seja, com o cursor no meio do texto, seja para cima ou para baixo, o Vim dará uma volta até ler
todo o texto em sua procura. Pelo mesmo motivo, se iniciamos uma busca para baixo ’ / ’ com
o cursor posicionado no primeiro caractere do texto, ou na primeira coluna da primeira linha do
arquivo, o Vim certamente não dará volta alguma, encontrando ou não uma aparição da objeto
57
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
de busca. As buscas, em princípio, são case sensitive, ou melhor, são sensíveis ao tipo de ’caixa’
dos caracteres, se são caixa baixa ou caixa alta. Logo, se procurarmos a palavra ’ocorrência’,
a busca não encontra a palavra "Ocorrência"ou mesmo "ocoRRência". Por outro lado, a busca
simples reconhece strings que sejam, ao nossos olhos, somente parte de outra. Logo, se bus-
carmos "ência", encontramos o trecho "ência"de "ocorrência"(assim como em "Ocorrência"e em
"ocoRRência"). Essa característica da busca é muito natural, visto que os espaços e outras uni-
dades invisíveis que identificamos entre as palavras são igualmente caracteres do ponto de vista
do editor. Esta é, aliás, a mesma característica que nos permite procurar as ocorrências de uma
letra dentro das palvras de uma linha, por exemplo. O comando de busca de string mais simples
possível tem a forma ’ /<texto>’. Experimente.
Ação: digite ’/<texto>’ para encontrar a primeira ocorrência da string "texto"na linha após o
cursor!
12.4 Parte 4 / 7 | buscando (no texto)
Busca completa
Introdução às expressões regulares
A princípio, o sistema de busca simples satisfaz aqueles que procuram uma string em um texto
redigido. Na verdade, em geral os processadores de texto e até os editores oferecem somente
ferramentas de busca padrão, visto terem em mente usuários que editam e consultam textos
como redações e livros. Naturalmente as ferramentas do Vim são altamente capazes de atender
aquelas pessoas que pretendem escrever também cartas, artigos e etc. O Vim, no entanto, é um
editor especialmente desenhado para a edição de códigos, de textos técnicos e de arquivos de
configuração. Nestes arquivos só procurar por uma expressão pode ser obviamente inútil, visto
que muitas vezes existem palavras e strings que se repetem, como, por exemplo, em valores de
colunas. Nestes casos não é suficiente buscar por uma ocorrência mesmo com a definição de
valores numéricos para a busca. Precisamos, muitas vezes, procurar por uma mesma expressão
repetida, mas que é cercada por características que a distingüe, como sua posição na linha e os
tipos, tamanhos e quantidade de caracteres que a antecedem ou que a sucedem, por exemplo.
Ou outras muitas vezes precisamos visualizar todas as expressão que não compartilham nenhum
caractere idêntico, mas somente caracteres que possuam alguma espécie de familiaridade que
definimos. Este uso, podemos dizer, é uma terceira função de acesso ao texto de que podemos
usufruir com os recursos da ação de busca. O primeiro uso possível de uma busca é a simples
movimentação do cursor. Podemos fazer uma busca não para "descobrir"uma ocorrência, mas
simplesmente para movermos o cursor rapidamente para ela, como é usualmente o uso de bus-
cas em linha. O segundo uso que podemos dar à busca é a típica procura por uma determinada
aparição de expressão, caractere, frase ou string perdida. Normalmente é um uso precioso no
caso de precisarmos encontrar uma ou mais ocorrências em um texto muito grande ou mesmo
ocorrências complexas em um texto confuso ou de leitura difícil. A terceira utilidade que podemos
dar à ferramenta de busca, considerando que ela seja suficientemente elaborada, é a procura por
e/ou a seleção (colorir, marcar) de uma ou de mais expressões específicas entre as várias que
muitas vezes são até obviamente visíveis, que possuam características singulares que as dife-
renciam. Este é o uso que fazemos da busca quando queremos selecionar todas as palavras da
primeira coluna de uma tabela e ignorar todas as palavras de todas as outras colunas por exem-
plo, não importando os caracteres das expressões elas mesmas. Também a usamos quando
precisamos de encontrar entre várias frases idênticas, as únicas que precedem um ponto final
seguido de uma letra maiúscula qualquer - observe que se fosse uma letra maiúscula específica,
58
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
seria possível incluí-la na string de busca! Todos esses recursos que completam a ferramenta
de busca do Vim são realizados através da inclusão das chamadas expressões regulares no
comando de busca. Porém se vamos incluir caracteres dentro do comando de busca que não de-
verão ser interpretados como sendo literais, mas sim como de controle, certamente teremos de
respeitar uma sintaxe que permite o Vim entender o comando. Os comandos de busca possuem
uma sintaxe não somente elaborada, mas especial se comparada à dos outros comandos do Vim
em geral. Além do verbo de busca, do objeto procurado e do seu valor numérico, existe um outro
parâmetro que determina a realização da ação de busca. O Vim precisa saber em que região
do texto a busca será realizada. Em uma busca precisamos dizer onde pretendemos procurar a
ocorrência. Esta região pode ser especificada de diversas maneiras inteligentes, mas caso ne-
nhuma região seja informada, assume-se por padrão que se procura o objeto da busca na linha
em que o cursor se encontra atualmente. Como informá-lo sobre a região da busca? Devemos
especificar um trecho do texto apontando para objetos que marcam seu início e seu fim. Ou seja,
selecionar a região apontando os seus objetos limites. Este é o formato típico do parâmetro região
dos comandos de busca, mas podemos também informar um parâmetro simples, com apenas um
valor, para apontar a regiões descritíveis com um só objeto em casos especiais como no caso do
objeto ser o texto todo, representado pelo caractere ’ Este parâmetro de região de texto somente
se mostra necessário nos usos da busca aliados à ferramenta de substituição de ocorrências,
que veremos quando estudarmos a lição de texto, na segunda parte do curso. A sintaxe dessa
ferramenta de substituição de texto respeita a sintaxe de busca simples e completa, sendo aquela
somente um apêndice a esta. Deve-se, portanto, atentar ao máximo à sintaxe das buscas, que
provavelmente é uma das ferramentas mais difíceis do Vim.
12.5 Parte 5 / 7 | buscando (no texto)
Como foi dito, certamente vai haver caracteres que não serão interpretados literalmente - me-
tacaracteres - se quisermos especificar características gerais a partir de dentro do comando de
busca. Esses caracteres de controle podem especificar uma busca por ocorrências de expres-
sões que estejam no início da linha ou no final, expressões com caracteres únicos e quaisquer
indeterminados, expressões ou parte de expressões que estejam especificamente no início ou
no final de outras palavras, ou até strings cujos caracteres sejam quaisquer dentro de um con-
junto de caracteres de determinado tipo. Existem ferramentas também para o armazenamento
dos padrões encontrados em buffers e ferramentas para a repetição da última especificação de
expressão regular em uma nova busca. Provavelmente a função mais básica de todas as expres-
sões regulares seja a representação de um caractere qualquer. Como o asterisco em sistemas
Unix e sistemas baseados no DOS ( como o FreeDOS) o símbolo ’ . ’ representa a aparição de
um caractere único qualquer, simples assim. Um comando de busca completo que utilize ’ . ’ em
uma sintaxe simples tem o formato "/(s).(s) ". Foi escrito assim pois o símbolo ’ . ’ pode ou não
aparecer junto de uma string, o que foi indicado com os parênteses, que indicam um uso optativo.
Façam seus testes!
Ação: digitem /(c).(c) para buscar por uma ocorrência qualquer de um único caractere em uma
determinada posição da string dada!
Entretanto, construir um comando do tipo "/. "resulta na busca por qualquer caractere possí-
vel, ou seja, encontraríamos todos os caracteres e o cursor andaria, em um texto normal, pratica-
mente casa por casa. Vale notar que os caracteres invisíveis ou fantasmas, espaços, tabulações,
retornos de linha e outros não são possibilidades do símbolo ’ . ’, o que pode tornar o comando
citado acima útil no caso de querermos manipular ou consultar um texto com raros caracteres
59
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
vísiveis distribuídos em um vazio amplo e aleatório de caracteres fantasmas. Imagine buscar a
olho nu todas as ocorrências de "x"que se siga a uma string qualquer (que neste caso são sem-
pre valores binários) em um arquivo texto em proporções gigantescas de dezenas ou centenas
de linhas como o do exemplo abaixo: _________________________ x 1110zy x e x x 2sd 1 x
web ge 01100 p 5y x 01010 001x 011 x 3 73 x x 11 x 10101 2f x 1010x :%s/M$/#2&!%@arg/g
0101 010 0001 e e9 x x x 1011100 x 6.4vim 0111 x 10101x 2e1001x 10100011 A2F0 x x x
_________________________
Seria possível achar aqui o que precisamos com um padrão de busca que utilize o símbolo ’ .
’ com o comando "/.x ". Porém essa é uma de algumas possíveis soluções ao nosso problema.
Nosso senso e capacidade de solução se aperfeiçoará na medida em que aprendermos a montar
mais expressões regulares.
Mas e se eu quiser buscar as ocorrências do ponto final? O Vim procurará por qualquer ca-
ractere? Como o símbolo ’ . ’ é por padrão interpretado como um metacaractere, caso queiramos
procurar pelo caractere ponto ele mesmo devemos inserir o símbolo que indica literalidade ’’ an-
tes do nosso metacaractere a ser interpretado literalmente. Ou seja, se quisermos procurar pela
string "fim."devemos digitar "/fi", pois se digitarmos "/fim."vamos encontrar além da string que
procurávamos expressões como "fim!"ou "fim?",o seja , "fim"com qualquer caractere em seguida.
Alternativamente a construir uma busca para cada padrão que procuramos, o que daria bas-
tante trabalho se precisarmos fazer de forma intercalada e mais de uma vez em buscas com-
plexas, podemos construir um comando de busca duplo. Nele informamos mais de um padrão
que queremos encontrar, e buscaremos as aparições de cada expressão indicada, ou seja, o
comando encontrará na ordem do texto cada ocorrência de cada padrão indicado. O símbolo
responsável por essa estrutura é o pipe: ’ | ’. Como queremos que seja interpretado como um
meta-caractere e por padrão não era para o ser, devemos antecedê-lo com a barra invertida, ou
seja, acompanhá-lo desta forma ’|’. Logo, um comando desses teria o formato "/ s1 | s2 ". Ou
seja, procure pela string um e pela string dois. Se quisermos procurar por mais de dois padrões
simplesmente concatenamos as expressões com o símbolo ’ | ’, como em "/ s1 | s2 | s3 | s4 ".
Ação: digite / s1 | s2 | s3 | s4 para buscar as ocorrências de todas as strings informadas!
12.6 Parte 6 / 7 | buscando (no texto)
Observem o conteúdo de um texto como este: txt txt txt txt
txt txt txt txt
txt txt txt txt
txt txt txt txt
Muitas vezes existem strings repetidas que impedem que encontremos e selecionemos o
que precisamos com os recursos de uma busca simples. Pode ser o caso de precisarmos, por
exemplo, de selecionar especificamente as strings repetidas que finalizam as linhas, o que na
tabela equivale a todas as quatro últimas expressãos "txt":
txt txt txt txt txt txt txt txt txt txt txt txt txt txt txt txt
Podemos precisar também, por exemplo, encontrar em um texto somente as letras maiúsculas
que iniciem linhas novas, ou exclusivamente pontos finais que as finalizem. Para satisfazer este
tipo de necessidade utilizamos dois símbolos que indicam a regularidade de iniciar ou de terminar
linhas procurada nas expressões. Inserir ’ ˆ’ imediatamente antes da string, ou seja, no início do
comando, indica ao Vim uma busca por uma expressão que deve estar no início de uma ou de
mais linhas; por outro lado, se digitarmos imediatamente após a string procurada o símbolo ’
60
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ ’, encontramos somente as ocorrências da string estipulada que estejam no final das linhas.
Voltando ao nosso exemplo, o comando "/txt$ "resolve o nosso primeiro problema, das palavras
da última coluna, enquanto "/ˆtxt "resolveria o problema de termos de selecionar exclusivamente
as palavras da primeira coluna. Façam seus testes!
Ação: digitem /ˆs para procurar as ocorrências da string ’ s ’ que estejam exatamente em inícios
de linha!
Ação: digitem /s$ para procurar as ocorrências da string ’ s ’ que estejam exatamente em
finais de linha!
Como podemos imaginar, se quisermos buscar os próprios símbolos literais ’ ˆ’ ou ’ $ ’ basta
digitarmos "ˆ" ou "$ ". No entanto, note que estes são símbolos só são interpretados como metaca-
racteres se estiverem em posições em que eles fariam sentido como metacaracteres! Ou seja, se
buscamos pela string "R$ 1,00 ", não precisamos incluir a barra invertida no comando de busca.
Mas se procuramos exclusivamente as strings "M$ "na linha "M$? Eu não apoio a M$ ", temos de
informar que o cifrão deve ser lido literalmente, com "/M$ ", caso contrário a busca encontrará não
apenas o último "M$ ", mas assim como o final de outras linhas que terminem com "M ". E se qui-
séssemos encontrar somente a última aparição de "M$ "na linha exemplificada? Agora teríamos
que buscar assim: "/M$$ ". E, por fim, para buscar somente a primeira aparição, escreveríamos
"/ ˆM $ ", a não ser caso terminemos o comando com outro caractere literal, como seria em "/R$
1,00", que se buscado no início de linha seria "/ ˆR$ 1,00"e, no final, "/R$ 1,00$". As mesmas
regras valem para o símbolo ’ ˆ’, mas elas se aplicam para o início do comando construído.
Também pode ser útil buscar somente as ocorrências de um determinado padrão que iniciem
ou terminem palavras, em oposição a linhas. Ou seja, podemos buscar somente as aparições da
letra ’ o ’ que finalizem as palavras. Neste caso o cursor marcaria somente letras ’ o ’ como em
"subversão ", "anarquismo "e a segunda aparição da letra em "outro ". Para encontrar padrões no
início de palavras usamos o metacaractere ’ < ’, e para encontrá-los no final usamos o ’ > ’. Como
estes não são símbolos metacaracteres por padrão, devemos informar ao Vim inserindo a barra
invertida ’ ’ antes deles. Logo, um comando de busca poderia ser "/ < 123 ", para encontrar a
string ’ 123 ’ somente nas suas aparições no início de palavras, que poderiam ser, por exemplo,
como ’ 1234567890 ’. Não encontraríamos o trecho ’ 123 ’ em uma palavra como ’ 0123456789
’, por exemplo. Para encontrar somente os últimos caracteres de uma palavra que sejam ’ 789
’, digitaríamos o comando de busca "/ 123 > ". Com algum raciocínio vemos que se pode usar
esta ferramenta para encontrar um padrão em suas ocorrências que sempre formem uma palavra
separada. Podemos querer encontrar somente as strings ’ ana ’, e não ’ analógico ’ ou mesmo ’
Poliana ’. Para tanto, podemos escrever "/ < ana > ". Como podemos imaginar, para procurar
por qualquer expressão que contenha os caracteres ’ < ’ e/ou ’ > ’ basta incluí-los nas buscas
sem qualquer barra, como na busca "/<Esc> ", que encontrará todas as aparicões de «Esc> "em
quaisquer posições de linha e de palavra, sendo uma palavra por si só ou não!
Ação: digite / < s para encontrar a string em suas ocorrências que iniciem uma palavra!
Ação: digite / s > para encontrar a string em suas ocorrências que finalizem uma palavra!
Ação: digite / < s > para encontrar a string em suas ocorrências que sejam uma palavra!
12.7 Parte 7 / 7 | buscando (no texto)
Aprenderemos agora um conceito muito importante sobre expressões regulares. Ele será
chamado de átomo. Existem alguns símbolos que podem ser incluídos em comandos de busca
que só se aplicam e fazem sentido se seguirem um átomo. Átomo é a designação de um ou
mais caracteres que ainda não tenham sido determinados. O átomo leva esse nome pois é uma
61
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
estrutura que é tratada por outros símbolos como sendo uma unidade de busca. Tipicamente,
designamos um átomo de busca indicando os possíveis caracteres dentro de colchetes como no
comando "/ [ c c c c... c ] ". Um comando com esse formato buscará quaisquer caracteres que
estão entre os listados. Podemos também buscar quaisquer caracteres que não estejam entre
os listados com o símbolo ’ ˆ’. Repare com atenção que este é o mesmo símbolo que, do lado
de fora dos colchetes, se colocado no início do comando, significa a busca pela expressão dada
nos casos em que estejam no início das linhas. Este símbolo se opõem ao ’ $ ’, quando fora dos
colchetes. Infelizmente, o acento circunflexo quando dentro dos colchetes significam a negação
das possibilidades indicadas no átomo. Um comando do formato "/ [ ˆc c c c... c ] "buscará no
texto quaisquer caracteres que sejam diferentes das possibilidades indicadas no átomo de busca.
Para ilustrar a confusão um comando do tipo "/ ˆ[ ˆc c c c... c ] "encontrará quaisquer caracteres
que não são possibilidades da lista e que estejam no início de uma ou mais linhas.
Ação: digite / [ c c ] para buscar as ocorrências de todos os caracteres listados entre os
colchetes!
Açãos: digite / [ ˆc c ] para buscar as ocorrências de todos os caracteres que não estão listados
entre os colchetes!
Para evitar que tenhamos de digitar muitos caracteres possíveis que componham um átomo
podemos listá-los utilizando o símbolo hífen, ’ - ’. Ele indica todos os caracteres que estão conti-
dos em um escopo da ordem, por padrão ASCII, de caracteres. Por exemplo, a construção "[ a - z ]
"inclui nas possibilidades de busca todas as letras minúsculas do alfabeto romano, "[ 1 - 5 ] "todos
os cinco números, 1, 2, 3, 4 e 5. Um comando de busca que pretende encontrar todas aparições
dos números 1, 2 ou 3 pode ser construído assim: "/ [1 - 3] ". Façam seus experimentos!
Ação: digite / [ c - c ] para buscar as ocorrências de todos os caracteres entre os colchetes
que estão listados implicitamente na ordem de caracteres do escopo indicado pelo símbolo - !
Para elaborar nossa expressão regular, temos a possibilidade de fazer algumas referências
aos átomos que construímos. Podemos buscar não somente pelas aparições das possibilida-
des de um átomo, mas inclusive buscar por nenhuma ou mais aparições consecutivas de cada
possibilidade, ou mesmo buscar por ao menos uma aparição ou mais de um dos caracteres lis-
tados. Determinamos a procura de uma ou mais ocorrências inserindo o símbolo ’ + ’ após o
átomo formado. Um comando assim teria o formato "/ [ c ] + ". Em geral, para a maioria das
finalidades, a diferença entre fazer uma busca por cada aparição singular de um caractere e fazer
uma busca por uma ou mais aparições desse caractere é que ao percorrermos pelas ocorrências
encontradas com os comandos ’ n ’ ou ’ N ’ o Vim saltará as aparições consecutivas do caractere
buscado. Determinamos a busca por nenhuma ou mais aparições das possibilidades informadas
inserindo o símbolo ’ * ’ após o átomo de busca. Um comando desse teria a forma "/ [ c ] * ". Ora,
mas as buscas em que uso o asterisco encontram todos os caracteres do texto! Ela não serve
pra nada! Mas observe que caso ela encontre aparições consecutivas de um dos caracteres
que estava a procurar seu comportamento será como o da busca por uma ou mais ocorrências:
saltará o conjunto de ocorrências seguidas. Imagine um texto em que a maioria dos caracteres
sejam repetidos, e que buscamos justamente pelas diferenças! Além do mais, caso formemos no
comando de busca uma expressão regular complexa, ou seja, que forme um padrão muito exi-
gente, a presença do asterisco será de uma aplicação eventual, que só será testada caso outros
requisitos da expressão também sejam satisfeitos.
Ação: digite / [ c ] + para buscar por uma ou mais aparições das possibilidades entre colche-
tes!
Ação: digite / [ c ] * para buscar por nenhuma das possibilidades entre colchetes!
Apesar de ter apresentado cada recurso das expressões regulares do Vim separadamente,
os comandos de busca pelo texto serão em geral formados com combinações de todas essas
62
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
ferramentas. Experimente conjugá-las na construção de comandos cada vez mais específicos de
busca!
63
Capítulo 13
Lição 6 - Transitando entre os modos
13.1 Parte 1 / 7 | Entrando em modos de inclusão
Normalmente um editor de textos sempre nos dispõe um cursor para a inserção de caracteres
ou nos permite inseri-los após um ou dois clics de um mouse. A verdade é que o Vim é funda-
mentalmente um editor que trabalha em modo texto e a partir da linha de comando. Existe, para
quem preferir, uma versão do Vim destinada ao modo gráfico, o chamado Gvim. Existe também
um tipo de Vim que se pretende funcionar como um editor simplista: o Easy Vim - Evim. No
Vim, no entanto, precisamos para escrever habilitar um modo de operação específico, e então
nele operamos praticamente como em um editor simples até querermos gravar e sair. O Vim é
assim porque se acredita que vai ser exigido muito dele. Quando falamos em "modos de inclu-
são"nos referimos aos modos de inserção e de substituição, que para quase todos os fins são
análogos. Já conhecemos um comando simples que nos permite entrar em modo de inserção a
partir do modo Normal, o ’ i ’ de insert. Quando apertamos ’ i ’ o cursor mantém-se para inserção
exatamente na posição em que estava em modo Normal, e nada mais acontece. Ou seja, esta
provavelmente é a maneira mais básica de se transitar para o modo de inserção. Existem pelo
menos doze outras.
Vocês estão analisando e editando o texto em modo Normal e percebem que querem começar
a escrever a partir do caractere que se segue imediatamente após a posição atual do cursor. Não
é suficientemente simples andar uma casa para a direita com ’ l ’ e apertar ’ i ’ ? Pois é, a verdade
é que podemos fazer isso com um único comando (ao invés de dois) com ’ a ’. Experimente.
Ação: digite ’ a ’ para iniciar o modo de inserção com o cursor um caractere a frente da posição
atual!
Se quisermos começar a escrever imediatamente no final da linha corrente podemos digitar
’ A ’. Mais ou menos analogamente ’ I ’ (’ i ’ maiúsculo) inicia o modo de inserção com o cursor
no início da linha corrente. Se quisermos começar a escrever no início da linha onde atualmente
está o cursor digitamos ’ I ’ e já podemos escrever.
Ação: digite ’ I ’ (’ i ’ maiúsculo) para iniciar o modo de inserção com o cursor no início da linha
atual!
Ação: digite ’ A ’ para iniciar o modo de inserção com o cursor no final da linha atual!
Estes dois comandos mudam a posição do cursor ao longo da linha atual. Existem outros dois
comandos que nos permitem iniciar a inserção de texto a partir de uma nova linha que pode ser
criada tanto acima quanto abaixo da linha corrente. O comando ’ o ’, cria uma linha após a atual
em modo de inserção. Ele é usado para quando vamos continuar o texto com um novo parágrafo
ou linha, se for um script, por exemplo. Já o comando ’ O ’ abre uma nova linha entre a corrente
64
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
e a linha imediatamente acima desta.
Ação: digite ’ o ’ para iniciar o modo de inserção com o cursor em uma nova linha imediata-
mente abaixo da atual!
Ação: digite ’ O ’ para iniciar o modo de inserção com o cursor em uma nova linha imediata-
mente acima da linha atual!
Como visto em "Sintaxe dos comandos", existem dois tipos de verbos, os simples e o verbos
pendentes. Existem duas duplas de comandos de controle para iniciar o modo de inserção que
se distingüem em nada se não em suas categorias de verbos. As duas duplas de comandos
compartilham a caraterística de recortar um objeto de texto antes de iniciar o modo de inserção.
Aquela com verbos simples é ’ s ’ e ’ S ’. O comando ’ s ’ recorta o caractere sob o cursor em modo
Normal e entra em modo de inserção com o cursor exatamente na mesma posição (considerando
o recuo de um caractere que a linha faz), tudo com somente o dígito ’ s ’, ou seja, com somente
um parâmetro aparente. Já o comando ’ S ’ recorta toda a linha corrente antes de entrar em modo
de inserção, e o cursor permanece pronto para a inserir texto a partir do início da linha em branco.
Teste este dois comandos para compará-los com os comandos de verbos pendentes.
Ação: digite ’ s ’ para recortar o caractere sob o cursor e iniciar o modo de inserção!
Ação: digite ’ S ’ para recortar toda a linha corrente e iniciar o modo de inserção no início da
linha em branco!
A outra dupla de comandos também recorta o texto antes de nos permitir incluir novos dados.
Porém, um desses comandos espera um segundo parâmetro explícito para a determinação do
objeto da ação. Esse parâmetro pode ser dado com um direcional, mas como vimos, verbos como
esse comportam diversos tipos de objeto, como palavra, linha, parágrafo, texto e inclusive objetos
combinados, exatamente como vimos na lição "Acessar o texto"na página "Movendo o cursor".
O comando ’ c ’ espera a indicação do objeto para recortá-lo e iniciar o modo de inserção. Se
apontamos horizontalmente, para as colunas, ele recorta um caractere somente. Apontando para
a direita após ’ c ’, o comando se comporta exatamente como quando digitamos ’ s ’. Apontando
para a esquerda o caractere anterior ao que está sob o cursor é recortado e o cursor recua uma
coluna juntamente com toda a linha. Ou seja, ’ c ’ apontado para a esquerda é o mesmo que
mover o cursor uma casa para a esquerda e digitar ’ s ’. Podemos também apontar verticalmente,
e neste caso ’ c ’ recortará duas linhas inteiras, iniciando o modo de inserção com o cursor em
uma linha em branco. O objeto também pode ser indicado digitando novamente ’ c ’, repetindo
o comando simples, parâmetro que é um tipo de padrão no Vim para a execução de verbos
pendentes. Já digitando ’cc’ recorta toda a linha, mas somente a linha atual, deixando o cursor
no início de uma linha em branco. Como disse, é claro, podemos indicar qualquer outro objeto a
ser recortado, experimentem digitar ’3wc’, por exemplo. Digitando ’ C ’, por sua vez, pode também
recortar toda uma linha, mas só se o cursor estiver anteriormente posicionado no início dessa.
Seu funcionamento é recortar todo o texto existente na linha a partir da atual posição do cursor,
ou melhor, seu objeto é "o texto da linha após o cursor". Esse comando não é realizado com um
verbo pendente, mas sim simples. É importante dizer que todos esses quatro comandos, ’ s ’, ’ S
’, ’ c ’ e ’ C ’ comportam um parâmetro numérico para contar os objetos sobre os quais agir. Como
sabemos, para isso devemos inserir o valor numérico antes do restante do comando, como ’2s’
que recorta dois caracteres.
Ação: digite ’ c ’ com um parâmetro de objeto para recortá-lo e iniciar o modo de inserção!
Ação: digite ’ C ’ para recortar todo texto existente na linha corrente após a posição atual do
cursor!
Ação: indique um valor numérico e digite quaisquer dos quatro comandos anteriores para
realizar um comando personalizado!
Como já foi explicado o modo de substituição é normalmente entendido como um sub-modo
65
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
derivado do modo de inserção, visto que desempenha um papel semelhante e que não possui
as mesmas alternativas de inicialização. O modo de substituição, ao contrário, possui apenas
uma maneira de ser iniciado a partir do modo Normal: ’ <Ctrl>+R ’, ou melhor, ’ <Ctrl>+<Shift>+r
’, onde ’ R ’ tem como origem Replace em inglês, que é substituir. Outra maneira de iniciá-lo é
com o botão ’ <Insert> ’. Podemos considerar este modo como um modo independente do de
inserção, uma vez que ele apresenta as mesmas relações que este com o outros modos, como
veremos em tópicos futuros dessa lição.
Ação: digite <Ctrl>+R para iniciar o modo de substituição!
13.2 Parte 2 / 7 | Os modos derivados
Como já foi explicado, existem modos derivados resultantes de combinações entre os modos
básicos. Caso estejem inseguros sobre o que são, quais são ou para que servem os modos de
operação, é aconselhável que reler a seção "Modos de operação"do livro introdutório deste curso
"Noções preliminares". Um exemplo de interação entre o modo Normal e o de inserção poderia
ser quando o objeto da ação de um comando em modo normal é o texto que digitamos em modo
de inserção. Fazemos isso passando um comando da forma "n ’ i ’ "entrando em modo de inserção
no momento de passar o parâmetro de objeto. O parâmetro de verbo foi desconsiderado pois
neste caso será por padrão a repetição do objeto "texto digitado". Depois da sessão em modo
de inserção apertamos <Esc> e voltamos para o modo Normal e o comando é completado e
executado. Esse parece de fato ser um exemplo de interação entre dois modos, mas considerado
uma sessão de um modo derivado a parte ele não é. Basicamente, existem três modos derivados.
Todos são combinações realizadas entre os modos inserção/substituição e um dos três modos
Normal, Visual e de Seleção. Tanto o modo de inserção quanto o modo de substituição podem
derivar um modo novo com cada um desses três modos básicos. Vamos considerar que existem
três, pois os modos de inclusão de caracteres, ou seja, os modos de inserção e de substituição,
serão tratados como duas variações de um mesmo modo, que são chamados aqui de modos
de inserção/substituição ou de modos de inclusão. Dessa forma existem seis modos derivados
possíveis, que são:
Modo de inserção com : > Modo Normal = modo normal de inserção; > Modo visual = modo
visual de inserção; > Modo de seleção = modo de seleção de inserção;
Modo de substituição com: > Modo Normal = modo normal de substituição; > Modo visual =
modo visual de substituição; > Modo de seleção = modo de seleção de substituição;
13.3 Parte 3 / 7 | Modo Normal de inclusão
O primeiro modo derivado que veremos é o modo normal de inserção, que normalmente não
é o mais utilizado. Sua utilidade pode ser ofuscada pelo uso especial que se faz em geral do
modo visual de inserção/substituição. Apesar disso, o uso do modos Normal de inclusão pode
virar parte constante do trabalho de edição. Os modos Normais de inclusão têm como função
permitir um trânsito acessível entre os modos Normal e de inserção, e entre os modos Normal e
de substituição. Sua utilidade pode acabar sendo esquecida visto ser antes uma facilitação e não
uma ferramenta indispensável. Vale a pena praticar seu uso para que se torne um movimento
natural de acesso e retorno automático aos dois (ou três, com o de substituição) importantes
modos. Ele só pode ser iniciado de dentro dos modos de inclusão, e o comando possível é
apenas esse: ’ <Ctrl>+o ’. Se de dentro do modo de inserção digitamos ’ <Ctrl>+o ’, entramos em
66
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
modo Normal de inserção. Caso o fizermos a partir do modo de substituição entramos no modo
Normal de substituição. Experimentem. Podemos notar que ao digitar ’ <Ctrl>+o ’, o nome do
modo no canto inferior esquerdo irá mudar a sua apresentação, colocando-se entre parênteses e
trocando suas letras para minúsculas. Estamos em modo Normal de inserção ou de substituição.
E agora? Posso desenhar uma margem no meu texto? Não podemos fazer nada de especial
senão passar um único comando de modo Normal. O Vim em modo Normal de inclusão espera a
execução de um comando de edição e retorna ao modo de inclusão original após sua realização.
Útil não é mesmo? Uma maneira prática de digitar <Esc>, um comando e novamente ’ i ’ ou
’ R ’, afinal, às vezes acontece de precisarmos fazer uma simples ação de edição para poder
continuar a escrever, e pode acabar sendo perda de tempo ficar passeando lentamente entre
esses modos de operação. Naturalmente, podemos apertar <Esc> para sair deste modo direto
para o modo Normal completo. Podemos também retornar manualmente ao modo de inclusão
digitando novamente o comando para que ele seja iniciado, como se estivéssemos mesmo em
modo Normal. Pratiquem!
Ação: digite <Ctrl>+o em modo de inserção ou em modo de substituição para, em modo
Normal de inclusão, passar um comando de modo Normal e voltar a digitar!
13.4 Parte 4 / 7 | Modos visual e visual de inclusão
Modo visual
É recomendado que façamos uma nova leitura da descrição do modo visual no livro "Noções
preliminares": —————– O modo visual pode ser visto como uma extensão útil do modo Nor-
mal, visto que temos acesso às mesmas operações de edição. Este modo é destinado à seleção
de um trecho de texto com a movimentação dos cursores, que formam como uma hachura sobre
as linhas a serem selecionadas. Passamos comandos como em modo Normal para manipular
o trecho marcado. Ele funciona como qualquer editor visual com suporte a mouse e inclusive
podemos configurar o próprio Vim para suportar a utilização de mouse. Este modo é acessado
com o caractere "v "em modo Normal. Existe um recurso do modo visual que praticamente po-
deria ser considerado um modo derivado, o bloco visual, ou visual block. Ele é acessado com
"Ctrl-v"a partir do modo Normal. Com ele podemos selecionar blocos quadrangulares de texto,
como se ele fosse uma tabela ou um quadro de caracteres sem linha, nos permitindo selecionar,
por exemplo, somente uma coluna de texto para manipulação. Semelhante a este recurso é o
visual line, acessível com "Shift-v"a partir do modo Normal.
—————-
O modo visual é, em uma explicação simples, o modo Normal com um diferente tratamento
de objetos. Enquanto em modo Normal temos de informar um objeto durante a construção do
comando para realizar a ação, no modo visual o objeto informado é selecionado manualmente,
e só então passamos o verbo a ser aplicado sobre ele. O modo visual é simplesmente uma
ferramenta de seleção do objeto de ação para dar suporte às operações do modo Normal, tanto
que são essas que funcionam em modo visual. Ele é acessado com o comando ’ v ’. Como
explicado, existem duas alternativas ao modo visual simples para grifarmos nosso objeto de texto.
Podemos também marcar o texto segundo o padrão de linhas no modo visual do tipo linha, com
’ V ’ a partir do modo Normal, assim como segundo o padrão de bloco no modo visual do tipo
bloco, o que significa tratar o texto como um quadro, acessado com ’ <Ctrl>+v ’ a partir do modo
Normal.
Ação: digite ’ v ’ em modo Normal para entrar em modo visual e grifar exatamente o trecho de
texto que deseja editar!
67
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Ação: digite ’ V ’ a partir do modo Normal para entrar em modo visual do tipo linha e hachurar
o trecho de texto a se editar por linhas!
Ação: digite ’ <Ctrl>+v ’ a partir do modo Normal para entrar em modo visual do tipo bloco e
hachurar o trecho de texto a se editar por blocos e colunas!
Modo visual de inclusão
O modo visual de inclusão pode ser compreendido como um tipo possível de modo Normal de
inclusão. Seu princípio é o mesmo: entrando nele podemos realizar até um comando e voltar para
o modo de inclusão original. Este modo é, por isso, só uma ferramenta facilitadora do trânsito
entre os modos. Seu uso é bastante razoável e compreensível: a partir do modo de inclusão
digitamos ’ <Ctrl>+o ’ e em seguida ’ v ’. Ao digitar ’ <Ctrl>+o ’ entramos no modo Normal de
inclusão, e até aqui o caminho é o mesmo. Em seguida passamos um comando, só que ele é de
controle para entrarmos em outro modo! Entramos então no modo visual de inclusão e no canto
inferior esquerdo vai aparecer: – (insert) VISUAL –, ou seja, a conjunção do modo Normal de
inclusão e o modo visual. Podemos também iniciar o modo visual de tipo linha ou bloco dentro do
modo Normal de inclusão, se quisermos.
Ação: digite ’ v ’ ou ’ V ’ ou ’ <Ctrl>+v ’ a partir do modo Normal de inclusão para acessar o
modo visual de inclusão e seus tipos!
13.5 Parte 5 / 7 | Modos de seleção e seleção de inclusão
Modo de seleção
Relembremos da nossa introdução ao modo de seleção:
—————- O modo de seleção é semelhante ao modo visual, mas ele não trabalha em
cooperação com o modo Normal, ou seja, o modo de seleção não aceita comandos como o
visual. Caso seja digitado qualquer caractere que possa ser imprimido entra-se em modo de
inserção, ou seja, sua utilização é análoga a de um editor de texto visual simplista. Este modo é
acessado através do comando "gh", de dentro do modo Normal. O comando "Ctrl-g", a partir do
modo visual, é uma das outras alternativas que serão apresentadas mais tarde. Existem também
os recursos de selection block e selection line no modo de seleção, ativados com "gH"e com
"g_Ctrl-h"respectivamente. —————–
O modo de seleção não é análogo ao modo visual, sendo uma ferramenta do modo Normal.
Ele é mais como um suporte para o modo de inserção. Seu funcionamento é semelhante à
operacionalidade padrão de um editor ou processador de texto gráfico qualquer com suporte a
mouse. Selecionamos um trecho do texto e podemos usar nossas teclas como em modo de
inserção. Se digitarmos ’ d ’ sobre o trecho selecionado substituiremos o trecho de texto por ’ d
’, se teclarmos <Delete> com um trecho selecionado o trecho de texto é removido. O modo de
seleção é provavelmente um modo bastante familiar e é iniciado a partir do modo Normal com ’
gh ’. Assim como no modo visual, existem duas formas de selecionar o texto, uma é através do
modo de seleção de tipo linha (com ’ g_<Ctrl>+h ’) e modo de seleção de tipo bloco (com ’ gH ’).
Ação: digite ’ gh ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho
selecionado!
Ação: digite ’ g_<Ctrl>+h ’ a partir do modo Normal para inserir ou deletar texto sobre um
trecho selecionado linha a linha!
Ação: digite ’ gH ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho
selecionado por bloco!
Modo de seleção de inclusão
68
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Quem entendeu o modo visual de inclusão facilmente pode deduzir como funciona o modo de
seleção de inserção ou de substituição. Como o outro, pode ser entendido como um dos usos
possíveis do modo Normal de inclusão, visto que é acessado a partir deste. Para entrar em modo
de seleção de inclusão, primeiramente entramos no modo Normal de inclusão com ’ <Ctrl>+o ’
a partir de um dos modos de inclusão. Lá dentro então digitamos ’ gh ’ para entrar no modo
de seleção. O modo Normal de seleção nos permite passar um comando antes de voltarmos a
inserção de caracteres, no entanto, entre os comandos que podemos passar estão aqueles de
inicialização de modos, e entre estes os que fazem diferença são os comandos para entrar em
modo visual e em modo de seleção; afinal, entrar em modo de inserção ou mesmo apertar <Esc>
de dentro do modo Normal de inserção só nos fará perder tempo. Pratiquem.
Ação: digite ’ gh ’ ou ’ gH ’ ou ’ g_<Ctrl>+h ’ de dentro de um dos modos Normal de inclusão
para entrar em modo de seleção de inserção ou de substituição!
13.6 Parte 6 / 7 | Modo ex
Retomando nossa conversa sobre o modo "ex"inciado nas "Noções preliminares": —————
- O modo ex poderia ser considerado por alguns como uma variante do modo linha de comando,
visto que ele é operado de maneira praticamente idêntica. A diferença está no controle que temos
sobre a linha de comando. Enquanto em modo linha de comando se espera que realizemos uma
operação e voltemos para o modo Normal, de certa forma podemos efetuar quantos comandos
quisermos e nos manter como em linha de comando. No modo ex, portanto, não temos que
continuar digitando ": "a cada comando e a tela não é atualizada listando cada operação que
fazemos. Por este último motivo o modo ex é ideal para que configuremos o Vim em pleno uso
com um script "on-line". Para entrar em modo ex, digitamos "Q ". Também podemos iniciá-lo com
"gQ ", o que funciona de forma ligeiramente diferente. Enquanto com "Q "as linhas de comando
são manipuláveis somente com os comandos padrões de inserção de linhas, ou seja, com <bs>,
<del> e comandos como "Ctrl-u", "Ctrl-e", etc., o modo ex iniciado com "gQ "é editável com todos
os recursos do modo linha de comando, como completar automaticamente palavras por exemplo.
—————-
Não há muito o que completar aqui. Para os curiosos, ex era um editor de Unix popular do
qual o ed é sucessor. Como talvez tenham notado, em certo sentido o modo "ex"é como se fosse
o verdadeiro modo linha de comando, do qual somente saímos se pedirmos para sair. De certa
forma o modo linha de comando, frente ao modo "ex", parece uma espécie de modo Normal de
linha de comando dentro do qual após realizarmos uma operação voltamos para o modo original.
Podemos entender o modo "ex"como um ambiente de configuração, dentro do qual podemos
passar quantos comandos de linha quisermos sem sair e sem ter sempre que digitar ’ : ’. Existem
duas formas distintas de usar o modo "ex". Uma é acessada com ’ Q ’, e neste caso escrevemos
o comando como se estivéssemos escrevendo uma linha de texto, com as mesmas ferramentas
de edição, ou seja, os caracteres ASCII do teclado. A outra forma é inciada com ’ gQ ’, e neste
caso podemos editar a linha com os recursos de edição padrão de uma linha de comando do Vim,
assim como do shell. E como sair? Não saímos quando queremos, então, eu quero! Pois bem,
passe o comando "vi "após o ’ : ’ padrão do modo "ex". "vi "não vem de vi, mas sim de visual, que
nada tem a ver com o modo visual. Aliás, também voltamos ao modo normal digitando "visual
"por inteiro.
Ação: digite ’ Q ’ ou ’ gQ ’ para entrar no modo "ex"e passar diversos comandos de linha sem
voltar para o modo Normal!
69
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
13.7 Parte 7 / 7 | As ruelas e usos dos modos
Existem alguns outros segredos sobre mudar de modos de operação no Vim. Alguns só po-
dem ser desvendados descobrindo certas configurações, mas em geral não deve haver problema
no trânsito entre os modos se aprenderam bem o que foi ensinado nas últimas páginas. Portanto,
não se preocupem em entender tudo que vai ser lido no texto abaixo, pois é apenas um apanhado
sobre alguns detalhes que dizem respeito à transição entre os modos. Para todos os fins lembre
de configurar o Vim para lhe informá-lo do modo atual digitando ’ :set smd ’; Toda esta passagem
que se segue foi tirada do Manual de Referência do Vim 6.4, escrito pelo próprio criador do editor,
Bram Moolenaar.
Se por qualquer motivo o modo onde você está for desconhecido, você pode sempre voltar
para o modo Normal digitando <Esc> duas vezes. Isso não funciona para o modo "ex", entretanto,
utilize ":visual". Vocês saberão que estão de volta no modo Normal quando verem a tela piscar
ou ouvirem o bipe depois de apertar <Esc>. No entanto, quando apertado <Esc> depois de
usar <Ctrl-O> no modo de inserção também ouvimos um bipe, mas ainda estamos no modo de
inserção, digitem <Esc> novamente.
*1 Vai do modo Normal para o de inserção passando o comando "i", "I", "a", "A", "o", "O", "c",
"C", "s"ou S". *2 Vai do modo Visual para o Normal ao se passar um comando não pendente, que
faz o comando ser executado, ou digitando <Esc> "v", "V"ou "CTRL-V"(veja |v_v|), que simplis-
mente pára o modo Visual sem efeitos colaterais. *3 Vai do modo linha de comando para o modo
Normal: - Apertando <CR> ou <NL>, que faz o comando dado ser executado; - Deletando a linha
inteira (e.g., com CTRL-U) e por último um <BackSpace>. - Apertando CTRL-C ou <Esc>, que
sai da linha de comando sem executar o comando. No último caso o <Esc> pode ser o caractere
definido com a opção ’wildchar’, que neste caso iniciará a completamento de linha de comando.
Vocês podem ignorar isso e apertar <Esc> novamente. Vi: quando apertando <Esc> a linha de
70
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
comando é executada. Isto é inesperado para a maioria das pessoas; logo foi mudado no Vim.
Mas quando o <Esc> é parte de um mapeamento, a linha de comando é executada. Se vocês
quiserem o comportamento do Vi também quando apertando o <Esc>, use ":cmap ˆV<Esc> ˆV ˆM"}
*4 Vai do modo Normal para o de seleção: - Usando o mouse para selecionar o texto enquanto a
opção ’selectmode’ contiver "mouse"; - Usando um comando não imprimível para mover o cursor
enquanto mantém o <Shift> apertado e a opção ’selectmode’ contiver a opção "key"; - Usando "v",
"V"ou "CTRL-V"enquanto a opção ’selectmode’ contiver "cmd"; - Usando "gh", "gH"ou "g CTRL-H-
g_CTRL-H|; *5 Vai do modo de seleção para o Normal usando um comando não imprimível para
mover o cursor sem manter o <Shift> apertado. *6 Vai do modo de seleção para o de inserção
digitando um caráter imprimível. O que estiver selecionado é deletado e o caractere é inserido;
Se a opção ’insertmode’ estiver ligada, a edição de um arquivo começará no modo de inser-
ção.
*CTRL-_CTRL-N* *i_CTRL-_CTRL-N* *c_CTRL-_CTRL-N* *v_CTRL-_CTRL-N* O comando
CTRL-CTRL-N ou <C-><C-N> pode ser usado para ir ao modo Normal a partir de qualquer
outro modo. Isso pode ser usado para termos certeza de que o Vim está no modo Normal, sem
provocar um bipe como o <Esc> faria. No entanto, isso não funciona no modo "ex". Quando
usado depois de um comando que leva um argumento, como |f| ou |m|, o limite de tempo definido
em ’ttimeoutlen’ é aplicado.
*CTRL-_CTRL-G* *i_CTRL-_CTRL-G* *c_CTRL-_CTRL-G* *v_CTRL-_CTRL-G* O comando
CTRL-CTRL-G ou <C-><C-G> pode ser usado para ir ao modo de inserção quando ’insertmode’
está setado. Caso contrário, vai para o modo Normal. Isso pode ser usado para termos certeza
de que o Vim está no modo indicado pelo ’insertmode’, sem saber em que modo o Vim está.
71
Capítulo 14
Lição 7 - Editar o texto
14.1 Apagar o texto
Vamos iniciar nossos estudos sobre a edição propriamente dita. Até agora aprendemos os
diversos recursos necessários para que possamos consultar e percorrer arquivos de texto com o
Vim. Aprendemos o funcionamento da sintaxe de comandos em modo Normal e vários comandos
de movimentação de tela e de cursor, além de como fazer buscas no texto por quaisquer padrões
de strings.
Esta segunda seção do curso, que diz respeito à edição, é significativamente mais simples e
breve. Isto acontece porque os comandos de edição são em princípio baseados nos comandos
de movimentação do cursor. Em outras palavras, estes comandos são a base para a construção
de todos os comandos de edição, pois a movimentação do cursor é, nos comandos que agora
veremos, o que indicará os parâmetros objeto e valor numérico. Na verdade nas ações de movi-
mento de cursor o verbo do comando é indicado em geral com os direcionais. Os comandos que
agora aprenderemos simplesmente vão atrelar à ação de movimentar o cursor um outro verbo, o
de apagar, copiar e colar. É claro que podemos também construir comandos de edição simples
que possam presumir objetos e valores padrões, e vale lembrar que estamos sempre falando (a
não ser se explicitado) de comandos em modo Normal. Estes comandos que se aliam aos de
movimentação de cursor são comandos pendentes, ou seja, que esperam parâmetros. Vamos à
prática.
O comando básico de remoção é o ’ x ’, que equivale a apertar a tecla <Delete>. No entanto,
<Delete> não reconhece parâmetros senão o padrão. Logo se digitado apagará um caractere.
A deleção por ’ x ’, apesar de aceitar parâmetros, é um comando de execução imediata, e não
pendente. Logo o único parâmetro que podemos passar a ele é o numérico. Tentem digitar ’ 2 x ’
e verão dois caracteres serem removidos. O ’ x ’ é designado a apagar caracteres, e seu objeto
não é negociável por não ser um verbo pendente.
Ação: digite (n) x para apagar (n) caractere(s)!
O outro popular comando de remoção do Vim é ’ d ’. Este sim é um comando pendente.
Vejamos o que podemos fazer com ele.
Lembre dos comandos de movimentação de cursor. Se digitamos ’ 2w ’ movimentamos o
cursor por duas palavras. Experimente agora digitar o comando ’ 2wd ’: verão duas palavras
sendo deletadas! Tente também comandos mais ousados como ’ $ d ’ e ’ gg G d ’ e notarão
que o comando ’ d ’ reconhece todo tipo de comandos de cursor. Repare que caso digitemos
simplismente ’ d ’ nada acontecerá a princípio. Isto acontece justamente por ele ser um comando
pendente, e assim não será executado até que passemos algum parâmetro, nem que este seja
72
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
apontar em algum sentido com os direcionais. Neste caso ele apagará o objeto padrão que se
aponta com os direcionais, ou seja, caractere se apontarmos para os lados e linha se o fizermos
verticalmente.
Como antes dito, comandos pendentes em geral têm algum comportamento padrão que reage
a sua repetição, que no caso, é ’ dd ’. Apertar ’ dd ’ apaga a linha sobre a qual está atualmente o
cursor - que funciona como ’ D ’ maiúsculo -, o que é diferente, teste isto, de digitar ’ d ’ seguido
de um direcional vertical, pois estes apagam duas linhas, a atual e a seguinte apontada pelo
direcional.
Ação: digite um comando de cursor para designar objeto, acompanhado de um valor numé-
rico, se quiser, seguido de d para apagar o objeto designado!
Ação: digite dd ou D para apagar a linha sob a qual o cursor está atualmente!
Existem também aqueles comandos operacionais de transição de modo Normal para o modo
de inserção, que também desempenham a função de remoção. Lembrem dos ’ s ’ e ’ S ’ e dos ’ c
’ e ’ C ’.
14.2 Copiar o texto
Existe um comando principal de cópia de texto no Vim. Ele é, e precisa ser, um comando
pendente, caso contrário não seria capaz de satisfazer todas as condições de um comando ver-
dadeiramente versátil do Vim.
O comando é ’ y ’, que vem de yank. Como o comando pendente ’ d ’, podemos informá-lo de
valores e objetos particulares que satisfazem nossas necessidades. O comando de cursor, como
com ’ d ’, deve vir antes do verbo principal, pois como aprendemos a ordem sintática do comando
é n o v, ou seja, número, objeto e verbo. As mesmas possibilidades de designação de objetos
valem para este comando, ou seja, todos os movimentos de cursor são potenciais objetos dos
verbos de edição.
Já o comando duplicado ’ yy ’, como a maiúscula ’ Y ’, de forma semelhante ao ’ dd ’, copia
para o buffer padrão toda a linha atual.
Ação: digite y acompanhado de um movimento de cursor para copiar o objeto designado com
o comado de cursor para o buffer padrão!
Curiosa e inteligentemente, no Vim vários outros comandos que não o ’ y ’ também podem ser
utilizados com a finalidade secundária de copiar um trecho de texto. Na verdade, esses outros
comandos são todos aqueles de remoção ensinados (exceto a tecla <Delete>). Ou seja, quando
deletamos um objeto qualquer de texto, estamos sempre também o copiando para o buffer padrão,
logo tanto o comando ’ x ’ quanto o ’ d ’ e os outros de mudança de modo que realizam deleção
também copiam os trechos de texto removidos. Em certo sentido, existem vários comandos de
cópia de texto, dentre os quais ’ y’ é o único que preserva o texto como está, ou seja, sem
removê-lo.
Ora, mas como poderei copiar uma string e colá-la posteriormente se estou realizando diver-
sas remoções? Para isso podemos reservar buffers que não sejam o padrão. Para tanto devemos
nomeá-los. Os nomes possíveis são os seguintes: a-z A-Z 0-9 . % # : - "
Para atribuí-lo, devemos precedê-lo de uma aspas ( ") : ’ "s ’ - neste caso por exemplo,
estamos apontando para um buffer chamado ’ s ’, mas ainda não fizemos nada. Para copiar um
conteúdo para um buffer chamado ’ b ’, por exemplo, escrevemos ’ "b yy ’, e copiamos a linha atual
para ’ b ’. O último trecho de texto copiado é sempre associado também ao buffer padrão, mas
se o atribuímos a um buffer nomeado podemos sobreescrever à vontade o padrão, que quando
73
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
digitarmos ’ "b p ’, no nosso exemplo, o mesmo conteúdo antes armazenado será transcrito. Por
fim, para conferir os buffers atualmente nomeados digitamos ’ :reg ’, de registers.
Ação: digite "cy mais o objeto de texto para o copiar para um buffer com o nome do c dado!
Ação: digite :reg ou :di para ver os buffers atualmente nomeados!
14.3 Colar o texto
Para colar o trecho de texto copiado para o buffer padrão existe o comando ’ p ’, que vem de
put. Este comando não é pendente e por isso só aceita mais um parâmetro, o de quantidade.
Podemos colar n vezes o conteúdo do buffer carregado. Como outra alternativa podemos preferir
colar o texto antes da posição do cursor, para isso colamos com ’ P ’. Caso queiram sofisticar
o comando, experimentem digitar ’ gp ’ ou ’ gP ’, e o cursor terminará sempre ao final do texto
colado.
Ação: digite (n) p para colar o conteúdo do buffer n vezes após o cursor!
Ação: digite (n) P para colar o conteúdo do buffer n vezes antes do cursor!
Ação: digite (n) g p ou P para colar o conteúdo do buffer n vezes e posicionar o cursor após o
texto colado!
Como explicado, podemos definir buffers diferentes do padrão digitando aspas e o nome do
buffer, que é um caractere, seguido do comando de cópia de texto. Para colá-lo, a estrutura do
comando é a mesma: ’ "c y ’ para copiar e ’ "c p ’ para colar.
Ação: digite "c p para colar o texto armazenado no buffer de nome c!
14.4 Fazer e desfazer comandos
Outro recurso de edição é o comando equivalente ao ’ <Ctrl>+z ’. O comando de desfazer
(undo) no Vim, não somente é baseado em um histórico cujo tamanho pode ser definido, ou
seja, potencialmente interminável, como também o Vim permite que refaçamos os comandos
desfeitos. O Vim, quando se trata de voltar e avançar comandos, por compreender o arquivo
segundo seu histórico, é também versátil por permitir voltar e avançar números designáveis de
ações. O comando de desfazer é ’ u ’. Alternativamente, podemos desfazer todas as ações feitas
na linha corrente com ’ U ’. O comando de refazer comandos, por sua vez, é ’ <Ctrl>+R ’, de redo.
Tanto este quanto ’ u ’ são capazes de receber um parâmetro numérico, mas naturalmente não
esperam por ele, sendo o padrão 1.
Ação: digite (n) u para desfazer a(s) (n) última(s) ação(ões)!
Ação: digite (n) <Ctrl>+R para refazer a(s) (n) última(s) ação(ões) desfeita(s)!
Ação: digite U para desfazer todas as ações feitas na linha corrente!
14.5 Substituir ocorrências
Lembrem agora de tudo o que aprendemos sobre buscar ocorrências com ou sem expres-
sões regulares. Tudo aquilo é aplicável na tarefa de substituir ocorrências, justamente porque
aquilo que podemos substituir são ocorrências que encontrarmos com o comando de busca que
executarmos. O comando de substituição é somente um complemento possível dos comandos
de busca. Como foi dito brevemente, os comandos de busca com substituição requerem que
seja informada a região do texto cujas ocorrências encontradas deverão ser substituídas, além do
caractere ’ s ’, de substitute. Essa informação deve vir antes do comando de busca, conferindo o
74
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
formato ’ : região s/busca ’. Temos que informar a string que queremos inserir no lugar das que
encontramos, e isso é feito após o padrão procurado, separando-os por uma barra. Os comandos
completos de substituição têm a forma: ’ : região s/busca/substituto ’. Após o comando podemos
ainda passar algumas opções, sendo as mais populares delas a opção ’ g ’, de global, que manda
o comando substituir todas as ocorrências dentro da região dada e ’ c ’, de confirmation, que pede
que o Vim pergunte pelas confirmações das substituições a serem realizadas. Podemos querer
usar tambem o parâmetro ’ i ’, que faz o vim ignorar a diferença entre maiúsculas e minúsculas,
enquanto ’ I ’ o impede disto. Um comando que substitui todas as palavras ’ vi ’ por ’ Vim ’ em
todo o texto, por exemplo, poderia ser: ’ :1,$s/vi/Vim/g ’ . Como podem reparar, a região foi deli-
mitada apontando para duas posições de linhas separadas por uma vírgula, a primeira com 1 e
a última com o símbolo ’ $ ’, que significa normalmente final de linha. Também podemos passar
um símbolo único para designar o texto todo, que seria ’ % ’. Lembrem que ’ . ’ indica a linha
atual, e é um símbolo que também podemos incluir na designação de uma região. Para constar,
podemos também simplesmente não designar uma região, como com comandos de busca, no
entanto o comando só funcionará se for aplicável sobre a linha corrente, que é a região de texto
padrão considerada se faltar sua indicação.
Ação: digite : #,# s /expr1/expr2/ [opções] , sendo # um número de linha e #,# uma região do
texto, para realizar substituições sobre as ocorrências encontradas!
75
Capítulo 15
Lição 8 - Configuração do Vim e
ferramentas especiais
15.1 Configurando o Vim
Como foi explicado quando falamos sobre os modos de operação, as ferramentas de confi-
guração são todas responsabilidade do modo linha de comando. Este modo foi desenhado para
cuidar especialmente da personalização da sessão e de comandos relativos ao arquivo e à exe-
cução do programa. Como já devem ter reparado, os comandos de linha são sujeitos ao mesmo
controle que temos na linha de comando do shell, pois temos acesso a um histórico de comandos,
a ações como <Ctrl>+u, <Ctrl>+a, <Ctrl>+e e <Ctrl>+c para cancelá-la. Caso digitemos <Ctrl>+z
de fato suspendemos a execução do Vim, mas para tanto não precisamos estar em linha de co-
mando, diferentemente do <Ctrl>+c. Podemos da mesma forma, para suspender o Vim, digitar ’
:sus ’, de suspend. O modo linha de comando no Vim também possui os recursos de listagem
com <Ctrl>+d, como em FreeBSD e com <Tab> e de busca de comandos do histórico indicando o
início da linha, como se fosse um comando de shell grep. BA maioria das configurações de uma
sessão do Vim são realizadas por variáveis de ambiente do Vim. Seus valores são acessíveis e
ajustáveis pelo comando de linha set. Basta digitarmos ’ :set ’ seguido da variável e seu valor,
ou seus valores que já mostram a variável. Veremos nas ferramentas especiais de edição alguns
valores ajustáveis de configuração com o comando ’ set ’, mas existem inúmeras variáveis no
Vim, e seria impossível aprensentá-las todas aqui. Naturalmente, os comandos de configuração
executados em modo linha de comando, ou seja, de dentro de uma seção, só serão válidos para
a seção atual. Da mesma forma temporárias são as configurações realizadas na chamada do
programa, que também são possíveis. Para configurar o Vim de forma que possamos posterior-
mente chamá-lo com a manutenção das características configuradas da seção temos de preparar
um arquivo externo de configuração para ser lido na entrada do Vim, chamado ’ .vimrc ’. Podem
existir dois arquivos de configuração, um global e um pessoal. O global existe para que sejam
desenhados padrões para serem aplicados sobre todas as sessões Vim que existirem em uma
determinada máquina. Ele fica localizado na pasta do Vim no diretório etc: "/etc/vim/vimrc ". O
arquivo de configuração local do Vim também é chamado ’ .vimrc ’ e deve ser criado na pasta
pessoal de cada usuário que deseja utilizar seções personalizadas do Vim. Quando o Vim é cha-
mado, ele primeiramente aplica as configurações globais e depois personaliza a sessão lendo o
.vimrc da pasta pessoal do usuário que o chamou. Logo, caso haja configurações conflitantes,
serão as configurações pessoais que permanecerão. Experimente criar o arquivo .vimrc e editá-lo
com uma linha de configuração. Digite na linha de comando ’ vim .vimrc ’, e insira na primeira
76
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
linha ’ set number ’. Observe que no arquivo de configuração não é necessário que digitemos o
indicador de comando de linha ’ : ’, ainda que não seja proibido digitá-lo. Agora salvem e saiam
e chamem o Vim para ler qualquer arquivo e verão a sessão já ajustada com a opção de nume-
ração de linhas! Uma dica para aqueles que irão se aventurar na edição do .vimrc e começar a
brincar é o uso de comentários. Para comentar linhas no .vimrc as iniciamos com aspas duplas
( "), utilizem-as! Aproveitem também os exemplos de arquivos de configuração de sessões do
Vim que estará disponível para download. Por fim na chamada do Vim podemos passar diversas
opções. O modelo de chamada é ’ vim opções arquivos ’, fora as chamadas alternativas como ’
view ’, ’ gvim ’, ’ ex ’, ’ gview ’... Vale a pena conhecer o que as opções podem fazer por nós, mas
como este conteúdo ultrapassaria um pouco os objetivos deste curso, recomendo que consultem
o manual do Vim, que apresenta o editor como um programa e seus argumentos de linha de
comando shell.
15.2 Ferramentas de consulta
Pedindo ajuda
Como já devem ter notado, podemos consultar o manual de ajuda do Vim simplesmente digi-
tando ’ :help ’ ou ’ :h ’. Caso seja necessário consultá-lo sobre um item específico basta informá-lo
do assunto com ’ :h assunto ’.
Ação: digite :h assunto para consultar o Vim sobre o assunto dado!
Conferindo a versão do Vim
Para ver a versão do Vim basta digitar ’ :version ’.
Ação: digite :version para ver a versão corrente do editor Vim!
Informando-se sobre os caracteres
Especialmente aqueles que programam podem se interessar pelo comando ’ ga ’. Ele apre-
senta no canto inferior informações sobre o caractere sob o cursor como seu código hexa e
octadecimal e seu valor ASCII.
Ação: digite ga sobre um caractere para saber seus códigos hexa e octadecimal e seu valor
ASCII!
Marcando posições no texto
Talvez a mais importante ferramenta especial do tipo consulta é a marcação de texto. Com
ela podemos nomear quaisquer partes do texto tanto para acesso fácil mais tarde quanto para
construirmos (ou referenciarmos) novos objetos. Como podemos ver, o comando de marcação
não é um comando de movimento, mas sim de mera nomeação. O cursor não sai do lugar
marcado e aparentemente nada acontece. Para marcar um local do arquivo, digitamos ’ m ’
seguido de um caractere nomeador que pode variar de a até z e de A até Z. Para acessarmos a
posição anteriormente marcada basta digitarmos aspas simples seguida do caractere nome ( ’ c
). Para utilizar a marca como designador de objeto de texto realizamos um comando pendente
cujo objeto é diferença, ou seja, o espaço entre posição corrente do cursor e a posição da marca.
Por fim, para conferirmos as marcas do texto atual digitamos ’ :marks ’.
Ação: digite m c para nomear a posição sob o cursor de c e ’ c para acessá-la!
Ação: digite ’ c e realize um comando para executá-lo sobre todo texto que estiver entre a
posição atual do cursor e a posição marcada c!
Ação: digite : marks para ver a lista de marcas do texto atual!
Numerando as linhas
Se não for a ferramenta de marcação, certamente o comando de numeração de linhas é o
maior facilitador de leituras de arquivos de texto em geral. Com esse recurso podemos visualizar
77
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
o número das linhas de todo o texto e assim comparar, armazenar e apontar com maior facilidade.
O comando é de linha, ’ :set number ’, ou ’ :set nu ’. Esse é um dos mais importantes e merece
ser lembrado.
Ação: digite :set number para numerar todas as linhas do texto e : set nonumber para desfazê-
lo!
Mapeando a posição do cursor
Podemos também utilizar o comando ’ :set ruler ’ ou ’ :set ru ’ para que o Vim nos indique a
posição do cursor medida em coluna e linha do texto. Para desativar o mapeamento do cursor
digitamos ’ :set noruler ’.
Ação: digite :set ruler para que o Vim nos indique a posição do cursor no texto!
Monitoramento do modo
Como já dito, para facilitar o trânsito que temos de fazer entre os modos podemos solicitar
que o Vim sempre apresente no canto inferior esquerdo da tela o modo de operação em que
estamos atualmente com o comando ’ :set smd ’. Para desabilitá-lo digitamos ’ :set nosmd ’. Esta
configuração é padrão no Vim e no vi.
Ação: digite :set smd para fazer o Vim sempre nos apresentar o atual modo de operação!
Buscando imediatamente
O Vim nos permite realizar buscas em tempo real, no sentido de que a string de busca vai
sendo procurada na medida em que é digitada. Esta opção trás grandes mudanças e implicações
para os comandos de busca, mas certamente pode valer a pena. O comando é ’ :set is ’, e para
desabilitá-lo digitamos ’ :set nois ’.
Ação: digite :set is para habilitar a busca imediata da string de busca na medida em que vai
sendo digitada!
Hachurando ocorrências
Caso haja muitas aparições da expressão procurada pode ser útil colorí-las para uma me-
lhor visualização. Quando realizarmos uma nova busca serão as novas ocorrências a ficarem
hachuradas. O comando é de linha - ’ :set hls ’. Para desfazê-lo, ’ :set nohls ’.
Ação: digite :set hls para hachurar as ocorrências encontradas de cada busca!
Consultando textos silmultâneos
Não poderíamos esquecer do recurso de divisão do espaço de tela ’ : split arquivo ’. Com
este comando dividimos a tela em duas ou em mais partes para visualizar textos diferentes ou
até partes diferentes de um mesmo texto ao mesmo tempo! Caso seja preferido, podemos fazer
também uma divisão vertical da tela com ’ : vsplit arquivo ’. Para transitar entre as janelas
digitamos ’ <Ctrl>+w_w ’, mas existem diversas maneiras práticas de transitar entre inúmeras
janelas, como ’ <Ctrl>+w_b ’ ou ’ <Ctrl>+w_t ’ para alcançar a janela de baixo e a de cima,
respectivamente. Existem comandos para mudar a posição das janelas e comandos para alterar
seus tamanhos. Estes são ’ <Ctrl>+w_+ ’ para aumentar a atual, ’ <Ctrl>+w_- ’ para diminuí-la
e ’ <Ctrl>+w_= ’ para igualá-las. Vale a pena conferir a entrada de ’ :h split ’ para compreender
todas as possibilidades e seus comandos. Os comandos de edição são aplicados sobre a janela
em atuação, e a linha de comando, apesar de ser uma só, se aplica também sobre a janela atual.
Porém a seção é a mesma, então os buffers, entre outras coisas, são os mesmos, o que nos
dá a possibilidade de copiar e colar de e para textos diferentes. Caso ’ :split ’ seja chamado
desta forma, ou seja, sem argumentos, será aberto uma janela aprensentando o mesmo texto em
edição atualmente.
Ação: digite :split (arquivo) para abrir dividir a tela em janelas contendo diferentes textos
visualizáveis simultaneamente!
Abrindo mais de um texto
78
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Para abrir dois textos em uma mesma seção do Vim sem visualizá-los simultaneamente, basta
na chamada do programa invocar mais de um arquivo: ’ vim arquivo1 arquivo2 ’. Para acessá-los,
digitamos os comandos ’ :next ’ e ’ :prev ’. Estes comandos podem receber valores numéricos no
caso de haver muitos arquivos abertos.
Ação: digite vim arquivo1 arquivo2 no shell para abrir mais de um arquivo no Vim e :next e
:prev para transitar entre os arquivos!
Consultando manuais
Digitando ’ K ’ sobre uma palavra no texto em seção que corresponda a qualquer comando
existente no sistema fará o Vim procurar e tentar abrir seu manual de dentro da seção do Vim.
Quando a consulta ao manual terminar e digitarmos ’ q ’, voltamos para dentro do Vim. Essa
ferramenta é muito útil para a leitura de scripts cujos comandos desconhecemos, por exemplo.
Ação: digite K sobre uma palavra que corresponda a um comando para consultar o manual
do comando de dentro da sessão do Vim!
15.3 Ferramentas de edição
Substituindo um caractere sem mudar de modo
Um comando que pode ser eventualmente útil é o ’ r ’, que apesar de não aceitar os parâme-
tros padrões é pendente por esperar que seja informado um caractere para que ele se execute.
O ’ r ’ tem a função do ’ R ’, a de substituição, mas ao contrário deste o ele não entra em modo
de operação algum. O ’ r ’ é um comando de substituição do caractere sob o cursor, e sua forma
é ’ r c ’.
Ação: digite r sobre o caractere a ser substituído seguido do novo caractere com o qual
queremos substituí-lo!
Trocando maiúsculas por minúsculas e vice e versa
Um recurso um tanto quanto original, mas também útil, é o de trocar o valor de caixa de
um caractere. Digitando ’ ’ podemos mudar uma letra de minúscula para maiúscula e vice-e-
versa. Podemos transformar este comando em um comando personalizado digitando ’ g ’ e
completando-o com um comando de cursor.
Ação: digite ’ g ’ seguido de um comando de movimentação de cursor para trocar as letras
minúsculas por maiúsculas e vice-e-versa!
Unindo linhas
Apesar de ser uma ferramenta raramente útil senão na edição de scripts e códigos fonte,
quando dela precisamos não hesitar em reconhecer seu valor. Se digitamos ’ J ’, de join, trazemos
a linha imediatamente abaixo da linha corrente para cima, ou seja, para junto da linha corrente,
unindo-as.
Ação: digite J para juntar as linhas corrente e seguinte!
Avançando e recuando espaços
Uma alternativa a entrar em modo de inserção e pressionar <Tab> é em modo Normal utilizar
as teclas < e > para tabular as linhas. O alcance da tabulação será aquele definido pela variável
shiftwidth.
Ação: digite « e » para tabular o texto em modo Normal!
Atualizando a tela
Para limpar as mensagens que apareceram recentemente na tela do Vim podemos digitar
’ <Ctrl>+l ’. Nada acontecerá com o arquivo, somente o Vim descarregará as mensagens da
interface para acalmar os usuários sobrecarregados.
Ação: digite <Ctrl>+l para redesenhar a tela atual limpando as mensagens obsoletas!
79
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Repetindo comandos
O comando ’ . ’ (ponto) é um comando genérico de repetição de comandos de modo Normal.
Ele repete o último comando realizado, logo se ele foi a colagem de um texto, ’ . ’ irá colá-
lo novamente. Curiosamente, se a última ação que fizemos foi entrar em modo de inserção e
digitar uma frase qualquer, ao voltarmos ao modo Normal ’ . ’ irá repetir a inserção da frase que
digitamos.
Ação: digite ’ . ’ para repetir o último comando ou ação realizados!
Carregando um arquivo para dentro do texto atual
Podemos, de dentro de uma seção em que editamos um texto qualquer, inserir o conteúdo de
texto de um arquivo diferente com o comando ’ : r arquivo ’, de read. O conteúdo do arquivo lido
será inserido a partir da posição em que o cursor estava quando chamado o comando.
Ação: digite :r arquivo para inserir o conteúdo de um arquivo dentro do texto em sessão
atualmente!
Salvando parte do texto
Se quisermos podemos no lugar de gravar todo texto salvar apenas o conteúdo que estiver
dentro de uma região delimitada. Para tanto designar uma região como fazemos quando cons-
truímos um comando de substituição. O comando de gravação do arquivo tem o formato ’ região
w arquivo ’.
Ação: digite #,# w arquivo para salvar o conteúdo entre as linhas # e # no arquivo dado!
Desabilitando escrita
Para garantir que a sessão do Vim não poderá sobrescrever os arquivos abertos podemos
definí-la como somente leitura, o que é o mesmo que ter aberto o Vim com o comando ’ view ’.
Para tanto digitamos o comando de configuração ’ :set ro ’. Para voltar podemos digitar ’ :set noro
’.
Ação: digite :set ro para tornar a sessão do Vim somente leitura e proibir a escrita do arquivo!
Insensibilizando o Vim a maiúsculas e minúsculas
Para facilitar certas funções como busca e substituição podemos desabilitar a sensibilidade
que o Vim tem para diferenciar letras minúsculas de letras maiúsculas. O comando para tal é ’
:set ic ’, para voltar digitamos ’ :set noic ’.
Ação: digite :set ic para tornar o Vim insensível à diferença entre letras maiúsculas e letras
minúsculas!
Executando comandos de shell
Uma das características que tornam o Vim poderoso é a sua capacidade de interação com
o shell. O Vim é capaz tanto de inciar um shell a partir de dentro de sua seção quanto de
simplesmente executar comandos sem iniciar uma seção shell nova. A saída do comando pode,
inclusive, ser inserida dentro do arquivo texto em edição. O comando para iniciar uma nova shell
é ’ :shell ’. Quando digitarmos ’ exit ’ voltamos enfim para a sessão do Vim de onde paramos. O
comando para executar comandos de shell é ’ : ! comandodeshell ’; neste caso uma tela com
a saída do comando será aprensentada, e qualquer tecla fará o Vim retornar de onde parou.
Caso interesse, o comando ’ : ! ! comandodeshell ’ pode inserir a saída do comando no arquivo
corrente a partir da posição atual do cursor.
Ação: digite :! comando para executar um comando de shell de dentro do Vim!
Ação: digite :shell para iniciar uma nova sessão shell a partir do Vim!
Ação: digite :!! comando para inserir a saída do comando de shell dentro do arquivo texto
atual!
Criptografando o texto
O Vim oferece um recurso extremamente valioso, o da criptografia. O comando é bem simples,
’ :X ’, e o Vim pedirá por uma chave criptográfica. Pois bem, depois de informá-la basta salvar o
80
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
arquivo e quando sairmos o arquivo já estará criptografado, e sua leitura exigirá a chave, ainda
que não sua escrita. Não se iludam com o poder deste recurso no Vim, ele visa somente impedir
que se veja o conteúdo dos arquivos indiscriminadamente, mas ele jamais impedirá que pessoas
determinadas o leiam. Mas, de qualquer forma, notem que quanto maior for a chave utilizada
maior será a segurança do seu texto. Para desabilitar o pedido da chave para a próxima vez que
forem acessar o texto, digitem ’ :set key= ’ quando o texto estiver descriptografado.
Ação: digite :X e informe uma chave para criptografar o texto corrente!
Completando palavras
Para facilitar a digitação de textos, o Vim oferece o recurso de completar o início de palavras
com suas terminações prováveis, que são todas aquelas já digitadas no texto anteriormente. Ou
seja, se já havia sido escrita a palavra ’ Vim ’ no texto anteriormente, ao digitarmos ’ V ’ em modo
de inserção podemos apertar ’ <Ctrl>+n ’ e o Vim apresentará todas as opções de completamento
disponíveis até chegar à ’ Vim ’.
Ação: digite <Ctrl>+n para completar a palavra a ser digitada com alguma terminação antes
digitada no texto!
Formatando o texto
Entre os comandos de configuração ’ :set ’ existem alguns que visam formatar e organizar o
texto. Essas funções são para definir margem, quebra de linha, parágrafo, indentação etc. Eis
algumas possibilidades:
:set textwidth=80 | ajusta a quebra de linha para 80 colunas, ou caracteres; :set nowrap | ajusta
o Vim para não separar linhas que não sejam quebradas de verdade; :set wrapmargin=10 | ajusta
a margem do texto em 10; :set tabstop=4 | ajusta a tabulação para 4 espaços; :set shiftwidth=2
|ajusta o alcance dos comandos <Ctrl>+d e <Ctrl>+t (<, >) para 2 espaços; :set expandtab | <Tab>
avança na verdade espaços; :set autoindent | indenta automaticamente as linhas que quebrarem;
Um comando útil nessa hora é ’ gq ’, que ordena linhas e parágrafos. Depois de setar as
medidas de quebra de linha em um texto já em execução, experimente digitar n gq, sendo n o
número de linhas a serem ajustadas.
Ação: digite n gq para quebrar ordenadamente as n linhas seguintes!
Gravando seqüências de ações
Para evitar que tenhamos que repetir grandes conjuntos de comandos, que muitas vezes são
trabalhosos e até difíceis de se reproduzir, existe a ferramenta de gravação. Ao executá-la o Vim
imprime na tela recording, que significa gravando, e ela é iniciada digitando ’ q c ’, sendo c um
caractere qualquer que nomeará a seção de gravação, ao final digite q novamente. Para executar
os comandos gravados posteriormente basta digitarmos ’ @ c ’, sendo c o caractere escolhido.
Ação: digite qc para inicar e q para finalizar a gravação de uma determinada seqüência de
comandos, depois digite @c para executá-la nova e automaticamente!
Utilizando abreviações
Para evitar digitar palavras frequentemente utilizadas e compridas, podemos criar abreviações
com o comando ’ :abbr abreviação abreviado ’. Podemos, e até devemos, criá-las no nosso
arquivo de configuração e ao digitar a abreviação em modo de inclusão a palavra abreviada será
transformada automagicamente no que determinamos como sendo seu correspondente.
Ação: digite :abbr abreviação abreviado para poder escrever palavras abreviadas que são
convertidas automaticamente!
Para terminar o curso, responda as perguntas da última lição marcando a única alternativa
correta. Mas não se esqueçam, posteriormente, de respoder ao questionário final!
81
Capítulo 16
Exemplo de .vimrc
".vimrc, por Tomás RC; "Algumas destas linhas foram tiradas de outros arquivos de configu-
ração do Vim "e ele deve ser entendido como um arquivo sempre em expansão potencial; "Ele é
dividido em 7 âmbitos de configuração:
"1 Controle de arquivo; "2 Interface do Vim; "3 Interface do texto; "4 Formatação; "5 Edição;
"6 Comandos; "7 Programação (em geral).
"Cada um destes possuem comandos de linha atualmente operantes e outros que "deixei
para serem descomentados, se for o caso. Procurei comentar todas as "linhas do arquivo para
aqueles que tiverem interesse em bisbilhotá-lo. "Experimentem, se quiserem, ler este arquivo de
configuração já utilizando ele "na sua seção para acompanhar sua leitura com a experiência da
configuração!
"Controle de arquivo:
:set nocompatible "Pede ao Vim para não se preocupar em simular os comportamentos do
Vi!":set autowrite "Salva automaticamente antes de comandos como :next e :make":set browse-
dir=buffer "Lembra o diretório do último arquivo aberto":set history=100 "Determina o tamanho
máximo de linhas (ou de comandos, não sei) do histórico"filetype plugin indent on "Reconhece os
tipos de arquivos"
set backup "Faz backup do arquivo atual, set nowritebackup "e deleta o antigo backup poste-
riormente. "Estes dois comandos funcionam geralmente juntos, "vide ’:help backup’.
"Interface do Vim:
:set ruler "Mapeia a posição do cursor em linhas e colunas":set number "Numera as linhas":set
showcmd "Mostra os comandos de modo Normal passados":set smd "Mostra o atual modo de
operação":set laststatus=2 "Sempre exibe a barra de status"
":set statusline="Mostra o código ASCII do caractere sob o cursor e outras coisas, mas não
está funcionando bem.
"colorscheme darkblue "Esquema de cores legal ":set background=white "Fundo branco anti-
claustrofóbico ":set visualbell "Não apita, pisca ":set mousehide "Esconde o mouse
"Interface do texto:
:set showmatch "Mostra os parênteses, chaves e colchetes que abrem o trecho que com eles
fechamos :set hls "Opção maravilhosa para programadores, pois hachura todas ocorrências de
uma busca syntax enable "Faz o mesmo que ’sintax on’, mas não sobreescreve minhas configu-
rações
":set incsearch "Busca string enquanto a digitamos ":set guifont=Monospace 12 "Configura a
fonte "sintax on "Colore elementos típicos da sintaxe do texto do tipo de arquivo do texto atual
"Formatação:
82
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
:set textwidth=80 "Ajusta a quebra de linha para 80 colunas, ou caracteres; :set autoindent
"Indenta automaticamente as linhas que quebrarem; :set expandtab «Tab> avança na verdade
espaços; :set tabstop=4 "Ajusta a tabulação para 4 espaços; :set shiftwidth=2 "Ajusta o alcance
dos comandos <Ctrl>+d e <Ctrl>+t (<, >) para 2 espaços;
":set wrapmargin=10 "Ajusta a margem do texto em 10; ":set nowrap "Ajusta o Vim para não
separar linhas que não sejam quebradas de verdade; ":set formatoptions=tcqor "t=text, c=comments,
q=format with gq command, o,r=autoinsert comment leader
"Edição:
:set wildmenu "Completa linha de comando de forma melhorada
"Abreviações ortográficas
":abbr ai aí ":abbr ha há ":abbr aa à ":abbr eh é ":abbr so só ":abbr doh dó ":abbr pa pá ":abbr
ca cá ":abbr la lá ":abbr va vá ":abbr ta tá ":abbr nao não ":abbr sao são ":abbr pao pão ":abbr
tao tão ":abbr vao vão ":abbr veem vêm ":abbr teem têm ":abbr voce você ":abbr po pó ":abbr
cao cão ":abbr terca terça ":abbr sabado sábado ":abbr setima sétima ":abbr cetico cético ":abbr
magico mágico ":abbr magica mágica ":abbr icone ícone ":abbr unico único ":abbr unica única
":abbr ultimo último ":abbr ultima última ":abbr musico músico ":abbr musica música ":abbr nucleo
núcleo ":abbr ideia idéia ":abbr tambem também ":abbr proprio próprio ":abbr propria própria ":abbr
proprios próprios ":abbr proprias próprias
"Comandos: "De substituição ortográfica de texto
Programação (em geral):
:set cin "indenta códigos .c
...
...
...
83
Capítulo 17
Notas Finais
Bom, espero que tenham ganho, senão habilidades, ao menos muita familiaridade com o
Vim. Não deixe, é claro, de utilizá-lo no dia-a-dia do seu GNU/Linux e nem de procurar conhecer
mais sobre suas capacidades. Procure construir seus arquivos de configurações, baixe scripts e
plugins para suas linguagens prediletas e façam do uso Vim um estilo de vida!
O curso certamente foi bastante teórico, o que infelizmente pode ter feito faltas no aprendi-
zado prático do uso do Vim. Aproveitem o guia de comandos enquanto puderem e, se interessar,
copiem-no. Em seguida indicarei alguns endereços eletrônicos para consulta sobre o Vim, en-
tre eles os principais sites atrelados oficialmente ao editor e até páginas pessoais com dicas e
exemplos.
www.unb.ca/documentation/UNIX/tips/vim/
www.vi-improved.org/tutorial.php
http://vimdoc.sourceforge.net
www.vim.org
http://www.rayninfo.co.uk/vimtips.html
http://redvip.homelinux.net:81/aggregator/sources/45
http://www.moolenaar.net/habits.html
http://www.ukuug.org/events/linux2004/programme/paper-SMyers/Linux_2004_slides/vim_tips/
http://www.yolinux.com/TUTORIALS/LinuxTutorialAdvanced_vi.html
http://www.iccf.nl/click1.html
http://www.usinglinux.org/editors/
84

Vim

  • 1.
  • 2.
    Sumário I Sobre essaApostila 2 II Informações Básicas 4 1 O que é o Vim 9 2 Plano de ensino 10 2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3 Guia do Curso (Início da semana 1) 16 4 Guia de comandos 17 5 Sobre o Vim 25 6 Trabalhando com o Vim 29 7 Modos de operação 33 8 Lição 1 - Interagindo com o Editor 37 8.1 Entrando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 8.2 Saindo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 8.3 Escrevendo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 8.4 Saindo sem salvar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 8.5 Salvando 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 8.6 Salvando 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 8.7 Salvando e saindo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 8.8 Abrindo um arquivo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 8.9 Salvando 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 8.10 Abrindo um arquivo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 1
  • 3.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF 9 Lição 2 - Sintaxe dos comandos 41 9.1 Parte 1 / 7 | Operadores de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 9.2 Parte 2 / 7 | O paradigma Vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 9.3 Parte 3 / 7 | Objetos de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 9.4 Parte 4 / 7 | Verbos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 9.5 Parte 5 / 7 | Valores de quantidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 9.6 Parte 6 / 7 | Os direcionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 9.7 Parte 7 / 7 | Construindo comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 10 Lição 3 - Acesso ao texto: Movendo-o 45 10.1 Parte 1 / 7 | Iniciando uma sessão somente leitura . . . . . . . . . . . . . . . . . . . 45 10.2 Parte 2 / 7 | linha a linha para baixo . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 10.3 Parte 3 / 7 | linha a linha para cima . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 10.4 Parte 4 / 7 | tela a tela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 10.5 Parte 5 / 7 | linhas escolhidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 10.6 Parte 6 / 7 | posição da tela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 10.7 Parte 7 / 7 | posição da tela escolhida . . . . . . . . . . . . . . . . . . . . . . . . . . 46 11 Lição 4 - Acesso ao texto: Movendo o cursor 48 11.1 Parte 1 / 7 | direcionais e texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 11.2 Parte 2 / 7 | tela e página . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 11.3 Parte 3 / 7 | linha, parênteses e chaves . . . . . . . . . . . . . . . . . . . . . . . . . 50 11.4 Parte 4 / 7 | caractere com linha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 11.5 Parte 5 / 7 | coluna com linha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 11.6 Parte 6 / 7 | caractere com sentença e parágrafo . . . . . . . . . . . . . . . . . . . . 51 11.7 Parte 7 / 7 | palavra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 12 Lição 5 - Acesso ao texto: Buscando ocorrências (Início da semana 2) 54 12.1 Parte 1 / 7 | buscando (na linha) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 12.2 Parte 2 / 7 | buscando (na linha) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 12.3 Parte 3 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 12.4 Parte 4 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 12.5 Parte 5 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 12.6 Parte 6 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 12.7 Parte 7 / 7 | buscando (no texto) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 13 Lição 6 - Transitando entre os modos 62 13.1 Parte 1 / 7 | Entrando em modos de inclusão . . . . . . . . . . . . . . . . . . . . . . 62 13.2 Parte 2 / 7 | Os modos derivados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 13.3 Parte 3 / 7 | Modo Normal de inclusão . . . . . . . . . . . . . . . . . . . . . . . . . . 64 13.4 Parte 4 / 7 | Modos visual e visual de inclusão . . . . . . . . . . . . . . . . . . . . . . 65 13.5 Parte 5 / 7 | Modos de seleção e seleção de inclusão . . . . . . . . . . . . . . . . . 66 13.6 Parte 6 / 7 | Modo ex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 13.7 Parte 7 / 7 | As ruelas e usos dos modos . . . . . . . . . . . . . . . . . . . . . . . . 68 2
  • 4.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF 14 Lição 7 - Editar o texto 70 14.1 Apagar o texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 14.2 Copiar o texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 14.3 Colar o texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 14.4 Fazer e desfazer comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 14.5 Substituir ocorrências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 15 Lição 8 - Configuração do Vim e ferramentas especiais 74 15.1 Configurando o Vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 15.2 Ferramentas de consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 15.3 Ferramentas de edição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 16 Exemplo de .vimrc 80 17 Notas Finais 82 3
  • 5.
  • 6.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Conteúdo O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in- ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br. O formato original deste material bem como sua atualização está disponível dentro da licença GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de mesmo nome, tendo inclusive uma versão traduzida (não oficial). A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro de 2006. Críticas e sugestões construtivas são bem-vindas a qualquer tempo. Autores A autoria deste é de responsabilidade de Tomas Ribeiro Cardoso (tomas@cdtc.org.br). O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento, que vem sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software junto a outras entidades no país. Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da home page da entidade, através da URL http://www.cdtc.org.br. Garantias O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi- lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) . Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS- TILA. A copy of the license is included in the section entitled GNU Free Documentation License. 5
  • 7.
  • 8.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Sobre o CDTC Objetivo Geral O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina- ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira. Objetivo Específico Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários, criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como incentivadores e defensores de produtos de software não proprietários e código fonte aberto, ofe- recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de produtos de software não proprietários e de seu código fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro- dutos de software livre. Guia do aluno Neste guia, você terá reunidas uma série de informações importantes para que você comece seu curso. São elas: • Licenças para cópia de material disponível • Os 10 mandamentos do aluno de Educação a Distância • Como participar dos foruns e da wikipédia • Primeiros passos É muito importante que você entre em contato com TODAS estas informações, seguindo o roteiro acima. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br). 7
  • 9.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu- mentação Livre GNU". Os 10 mandamentos do aluno de educação online • 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é pré-requisito para a participação nos cursos a distância. • 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá- tica é necessário para poder executar as tarefas. • 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân- cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores. • 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo. • 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão e a sua recuperação de materiais. • 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e realizá-las em tempo real. • 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre. • 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens e descobertas. • 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é ponto - chave na comunicação pela Internet. • 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração. Como participar dos fóruns e Wikipédia Você tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso: . O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a 8
  • 10.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que interesse ao grupo, favor postá-la aqui. Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do curso. É recomendado que você faça uso do Forum de dúvidas gerais que lhe dá recursos mais efetivos para esta prática. . O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem ajudar. Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico é recomendável ver se a sua pergunta já foi feita por outro participante. A segunda forma se dá pelas Wikis: . Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par- ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé- dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em português pelos links: • Página principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo! Primeiros Passos Para uma melhor aprendizagem é recomendável que você siga os seguintes passos: • Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar; • Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas básicas do mesmo; • Entrar nas lições seguindo a seqüência descrita no Plano de Ensino; • Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais. Perfil do Tutor Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 9
  • 11.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor ou instrutor: • fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá utilizar; • gosta que lhe façam perguntas adicionais; • identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por- que motivo a classificação foi ou não foi atribuída’; • tece comentários completos e construtivos, mas de forma agradável (em contraste com um reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de ameaça e de nervossismo’) • dá uma ajuda complementar para encorajar um estudante em dificuldade; • esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente; • ajuda o estudante a alcançar os seus objetivos; • é flexível quando necessário; • mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); • escreve todas as correções de forma legível e com um nível de pormenorização adequado; • acima de tudo, devolve os trabalhos rapidamente; 10
  • 12.
    Capítulo 1 O queé o Vim O Vim é um editor de textos baseado no Vi com suporte a diversos formatos de texto e com ferramentas extensas de consulta, edição e formatação de textos. Além disso também oferece ferramentas de configuração de uso. Não somente sua licença é compatível com a GPL como também contribui socialmente, repassando o suporte financeiro voluntário que recebe para um programa social da Uganda! Ele é um editor de texto livre (e até libertário), atual e poderoso! 11
  • 13.
    Capítulo 2 Plano deensino 2.1 Objetivo O objetivo deste curso é qualificar usuários de Linux a utilizar de forma avançada o editor Vim. Isso significa que ao término deste curso você será capaz de se virar rapidamente com qualquer edição de texto, seja qual for seu tamanho. No entanto, para maior esclarecimento, vou dizer o que você não vai aprender com ele: Não espere aprender a fazer um currículo bonito ou um texto com justificação, fontes, cores e margens primorosas para sua apresentar sua tese de pós-doutorado. Para isso, você precisa usar um bom processador de textos como o OpenOffice Writer, por exemplo. O Vim não codifica seu texto, ou seja, este entra plano e sai plano: sua funcionalidade máxima se aplica à scripts, arquivos de configuração, códigos fonte e também, é claro, à textos de e-mail, lista de compras, arquivos de anotações pessoais, de trabalho ou à qualquer texto que não se pretenda parecer uma imagem, com estilizações de caracteres e de cores, com figuras, margens barrocas e etc. 2.2 Público Alvo Para novatos no Linux: • Se você está se aventurando pela linha de comando e não sabe com que escrever bem os textos, este curso pode ser do seu interesse; • Se você está estudando Linux e quer conhecer e entender de um dos editores modo texto mais consagrados (se não for o mais) do universo do software livre, este curso pode ser do seu interesse; • Se você já ouviu falar do editor vi ou da sua família de editores e é curiosa(o) por compreendê- la, este curso pode ser do seu interesse. Para usuários regulares, estudantes e programadores: • Se você utiliza um clone do vi, mas não se conforma com suas limitações ou com a sua licença, este curso pode ser do seu interesse; • Se você é um entusiasta da linha de comando e sempre quis ou tem vontade de ter controle sobre o tradicional editor vi ou de algum semelhante, este curso pode ser do seu interesse; 12
  • 14.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF • Se você frequentemente tem de editar arquivos de configuração e precisa dominar algum bom editor de texto, este curso pode ser do seu interesse; • Se você pretende estudar e entender bem de Linux, mas sempre achou o vi um editor exótico, misterioso e de difícil compreensão, este curso pode ser do seu interesse; • Se você escreve scripts em perl, bash scripts ou o que quer que seja e precisa estudar um editor modo texto rápido, leve, versátil e configurável, este curso pode ser do seu interesse; • Se você programa centenas de linhas e necessita de um editor que além de reconhecer sua sintaxe lhe auxilie na difícil organização e edição das suas várias páginas de código, este curso pode ser do seu interesse; 2.3 Pré-requisitos A resposta rápida é: o único pré-requisito, na verdade até somente preferencial, é o uso básico do linux em modo de comando. Ou seja, em princípio, todo estão. Agora a resposta longa. Eu devo admitir, usar o Vim intuitivamente não é fácil. O esforço depositado na tarefa de se familiarizar com as ferramentas e com a filosofia Vim de se editar textos pode ser comparado ao de aprender uma linguagem de programação nova. Ou seja, exige paciência com os caprichos do programa. Se você só quiser escrever um e-mail de natal para o seu tio, provavelmente as poderosas ferramentas do Vim irão parecer a você pouco mais úteis que uma pinça. Porque então aprender a usar o Vim? Não é melhor simplesmente usar o emacs para es- crever meus textos e scripts? Aprender a usar o Vim não seria como querer aprender a usar uma calculadora cujo uso é mais complicado que os próprios cálculos operados? Sim. Se você não tem sugurança ou não é convicto sobre a utilidade de saber manipular bem textos planos, provavelmente você irá se entediar e se desmotivar frente à aparente gratuidade do difícil estilo de edição do Vim. 2.4 Descrição Em princípio, nada de mal. Só que talvez você se apaixone. Pelo editor, é claro, não por mim. Aqui descreverei o programa do curso, porém, se estiver interessado somente na ementa, ou seja, a lista de passos do curso, consulte "Ementa do curso". [se estiver perdido, leia "Ambientação do Moodle".] A primeira parte Após serem apresentadas as noções preliminares, estudaremos o Vim como um programa (antes de um editor) como interagir timidamente com o editor em suas funções fundamentais de operação, como abrir um arquivo, salvá-lo e sair do Vim. Imediatamente depois, para que se possa inciar o aprendizado das ferramentas e dos comandos do Vim, serão apresentados os princípios da sintaxe Vi de comandos padrão. Enfim, para terminar a primeira parte, aprende- remos a consultar, ler e pesquisar, ou, se quiser, a navegar por um texto utilizando ferramentas específicas de movimentação de texto, de cursor e de busca de ocorrências. A segunda parte Visto o editor como um todo, sua sintaxe e suas ferramentas de visualização e de acesso ao texto, vamos estudar com detalhes como transitar entre os modos de operação e seus derivados, 13
  • 15.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF como pré-requisito para o passo seguinte. Sabendo disto tudo, estamos prontos para aprender a fazer aquilo que é mais central em qualquer editor de texto: a editar um texto. Aprenderemos a realizar no Vim (ou seja, de todas as maneiras imagináveis) os comandos básicos de edição como copiar, colar e deletar, para tanto, farei uma breve vistoria sobre como manipular comandos. Por fim, na medida do possível, os iniciarei nos bastidores do Vim, e veremos o que faz do Vim mais do que um editor de texto plano muito versátil, mas praticamente um processador de texto sem codificação. Ou seja, apresentarei os princípios da configuração do Vim e alguns recursos especiais. 2.5 Metodologia O curso está dividido da seguinte maneira: 2.6 Cronograma • Descrição das atividades • Semana 1 • Guia de comandos • Sobre o Vim • Noções preliminares • Modos de operação • Lição 1 - Interagindo com o editor • Lição 2 - Sintaxe dos comandos • Lição 3 - Acesso ao texto: Movendo-o • Lição 4 - Acesso ao texto: Movendo o cursor • Semana 2 • Lição 5 - Acesso ao texto: Buscando ocorrências • Lição 6 - Transitando entre os modos • Lição 7 - Editar o texto • Lição 8 - Configuração do Vim e ferramentas especiais • Material: Dicas de Vim • Material: Meu .vimrc • Material: Notas finais • Avaliação de aprendizagem 14
  • 16.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem ne- cessárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor do que 6.0, sugerimos que você faça novamente esta lição. Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições quanto a da avaliação serão considera- das para a nota final. Todos os módulos ficarão visíveis para que possam ser consultados durante a avaliação final. Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de Ensino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma. 2.7 Programa Noções preliminares: Portabilidade, história do editor e licença GPL; Sobre o Vim: • Como usar? • Interface. Modos de operação do Vim: • Modo de comando; • Modo de linha de comando; • Modo de inserção; • Modo de substituição; • Modo visual; • Modo de seleção; • Modo ex. Primeira parte: Interagindo com o editor (Abrir arquivos, gravar em disco e sair do Vim); Sintaxe dos comandos; Acessar um texto (e suas partes): • Mover cursor; • Mover texto; • Buscar ocorrências. Segunda parte: Editando um comando (Selecionar, desfazer, refazer e repetir); Transitando entre os modos; Editar um texto: 15
  • 17.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF • Apagar; • Copiar; • Colar; • Desfazer e refazer. Apêndices: Fundamentos de configuração do Vim: • O arquivo de configuração ?.exrc?; • Configurar inicializando; • Os comandos ?set? em modo linha de comando; Recursos e operações especiais: • . Criar marcas; • . Criar macros; • . Criar abreviações; • . Utilizar buffers; • . Indentar o texto; • . Verificar ortografia; • . Verificar completude de parênteses, de chaves e de colchetes; • . Completar palavras automaticamente; • . Selecionar região do texto. • . Registrar comandos em um histórico; • . Gravar comandos interativamente; • . Editar mais de um texto; • . Visualizar mais de um texto; • . Abrir um shell sem tirar o Vim da memória; • . Comandos de shell de dentro do editor; • . Comandos de shell para dentro do editor. Notas finais: Outros editores de texto plano; Fontes de consulta; Links. 16
  • 18.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF 2.8 Avaliação Toda a avaliação será feita on-line. Instrumentos de avaliação: • Avaliações dentro das lições; • Avaliação ao final do curso. • Para a aprovação e obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo com a fórmula abaixo: • Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições • AF = Avaliação Final 2.9 Bibliografia • Site oficial: http://www.vim.org • Site oficial (BR): http://vimdoc.sourceforge.net 17
  • 19.
    Capítulo 3 Guia doCurso (Início da semana 1) Bem vindo ao curso do editor Vim! Bom, logo no início desta primeira semana sugiro que dêem uma olhada no livro "Noções preliminares "para ganharmos alguma familiaridade com o trabalho que vamos ter nas próximas quatro semanas. O livro "Sobre o Vim "contém informações gerais sobre esse editor, sua história, portabilidade, licença... E só deve ser lido por quem real- mente tiver interesse, uma vez que não é obrigatório já que não é exigido como conhecimento nas lições. O livro Guia de comandos é um suporte para os seus estudos e não necessariamente precisa ser consultado. Ele é somente um apanhado de todas as ações sugeridas ao longo das lições e deve ser útil para aqueles que precisam lembrar de um comando específico ou que pre- cisam estudar as ferramentas do Vim de forma mais objetiva. O curso realmente acontece dentro das lições, portanto concentrem-se nelas. Lembrem-se de dar uma olhada geral nas lições antes de adiar suas leituras, já que algumas delas são um pouco extensas. As lições serão liberadas ao longo das duas semanas. Cada uma destas é bastante descritiva sobre seu conteúdo, logo pode ser interessante para alguns saltar alguns trechos de texto para não se cansarem, caso já sejam familiarizados com o assunto. Neste caso procurem ao menos acompanhar as ações propostas ao longo do texto e transcritas para o Guia de comandos, ou simplesmente respondam as pergunta das lições, o que é necessário para serem avaliados e receberem o diploma. Ao final de cada uma serão feitas algumas perguntas que deverão ser respondidas para que seja avaliado o seu aprendizado, e ao final do curso, será liberado um questionário final. A nota final será a média dos resultados que obtiverem em cada lição, que valem 70% da nota, mais a nota tirada no questionário final, que vale 30%. Caso tenham dúvidas ao longo do curso ou se quise- rem compartilhar qualquer comentário ou experiência participem do fórum do curso. Estejam à vontade. 18
  • 20.
    Capítulo 4 Guia decomandos Interagindo com o editor Entrando no Vim • Ação: digitem ’vim’ na linha de comando para entrar no Vim! • Ação: digitem ’i’ para entrar em modo de inserção de caracteres! • Ação: digitem ’vim nomedoarquivo’ para inciar o Vim já automaticamente chamando um arquivo para edição! Gravando e lendo • Ação: digitem ’:w nomedoarquivo’ para salvar o texto em um arquivo no disco! • Ação: digitem ’:w’ para salvar o arquivo cujo conteúdo está atualmente em edição! • Ação: digitem ’:w outroarquivo’ para gravar o texto atual em um outro arquivo que não aquele já chamado! • Ação: digitem ’:e’ de dentro do Vim para abrir o arquivo desejado sem ter que voltar à shell! Saindo do editor • Ação: digitem ’:q’ para sair caso não tenham efetuado nenhuma edição! • Ação: digitem ’:q!’ para sair mesmo havendo efetuado modificações! • Ação: digitem ’:wq’ para salvar e sair imediatamente! • Ação: digitem ’:wq outroarquivo’ para salvar outro arquivo e imediatamente sair do Vim! Acessando o texto Movendo o texto • Ação: Abra o Vim com o comando ’view’ para já configurar automaticamente a sessão atual como ’somente leitura’! • Ação: Segure ’<Ctrl>+e’ para mover a tela uma linha para baixo pelo texto! • Ação: Segure ’<Ctrl>+y’ para mover a tela uma linha para cima pelo texto! • Ação: Segure ’<Ctrl>+f’ para mover a tela uma página abaixo pelo texto! 19
  • 21.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF • Ação: Segure ’<Ctrl>+b’ para mover a tela uma página acima pelo texto! • Ação: Especifique um número e segure qualquer um dos comandos básicos de movimen- tarção de texto para mover um número personalizado de objetos de texto por sob a tela! • Ação: Digite ’z.’ ou ’zz’ para situar no centro da tela a linha atualmente sob o cursor! • Ação: Digite ’z+’ para situar no topo da tela a linha atualmente sob o cursor! • Ação: Digite ’z-’ para situar na base da tela a linha atualmente sob o cursor! • Ação: Determine o número da linha que deseja enquadrar e o digite seguido de uma das posições da tela! Movendo o cursor Objetos: Caractere e linha com direcionais simples: • Ação: digite ’ h ’ , ’ j ’ , ’ k ’ ou ’ l ’ para mover o cursor para a esquerda, para baixo, para cima ou para a direita, respectivamente! • Ação: digite <Space> ou < BackSpace> para mover o cursor por um caractere para frente ou para trás, respectivamente! • Ação: digite um valor numérico seguido de ’ h ’ , ’ j ’ , ’ k ’, ’ l ’, <Space> ou <BackSpace> para movimentar o cursor por um número determinado de objetos! Objeto: Texto: • Ação: digite ’ gg ’ ou ’ [[ ’ para mover o cursor de onde ele estiver até o início da primeira linha do texto! • Ação: digite ’ G ’ ou ’ ]] ’ para mover o cursor de onde ele estiver até o início da última linha do texto! • Ação: digite n % para mover o cursor à linha correspondente à posição do texto apontada em percentagem! • Ação: digite n go para mover o cursor ao enésimo byte (em geral, enésimo caractere) do texto! Objeto: Tela: • Ação: digite ’ H ’ para mover o cursor para a primeira linha visível na tela! • Ação: digite ’ L ’ para mover o cursor para a última linha visível na tela! • Ação: digite ’ M ’ para mover o cursor para a linha que está no centro da tela! Objeto: Página: • Ação: aperte ’<Ctrl>+f’ para avançar o cursor uma página abaixo! • Ação: aperte ’<Ctrl>+b’ para recuar o cursor uma página acima! • Ação: informe o número de páginas seguido do comando de avançar ou recuar o cursor pelas páginas para andar um número escolhido de páginas! 20
  • 22.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Objeto: Linha: • Ação: aperte ’<Ctrl>+u’ para subir o cursor meia página no texto! • Ação: aperte ’<Ctrl>+d’ para descer o cursor meia página no texto! • Ação: digite o número de linhas com o qual deseja mover o cursor seguido do comando de subir ou descer o cursor por • linhas para movê-lo por um número específico de linhas! • Ação: digite n gg ou n G para acessar uma linha específica do texto! • Ação: digite : n <Enter> para acessar uma linha específica do texto! Objetos: Parênteses e chaves: • Ação: digite ] ) ou ] } para procurar por um parênteses ou por uma chave que fecham sem par que estejam à frente do cursor no texto! • Ação: digite [ ( ou [ { para procurar por um parênteses ou por uma chave que abrem sem par que estejam à cima do cursor no texto! Objeto combinado: Caractere com linha: • Ação: digite ’ ˆ’ para mover o cursor para o primeiro caractere da linha corrente ou ’ _ ’ para a mesma ação desconsiderando os espaços em branco! • Ação: digite ’ $ ’ para mover o cursor para o final da linha corrente ou informe um valor a contar 1 da linha atual para inserir o cursor no final de outra linha! • Ação: digite ’<Ctrl>+m’ para mover o cursor para o primeiro caractere da linha seguinte ou ’ + ’ para a mesma ação desconsiderando os espaços em branco! • Ação: digite ’ - ’ para mover o cursor para o primeiro caractere da linha anterior sem consi- derar os espaços em branco! Objeto combinado: Coluna com linha • Ação: digite ’ n | ’ para mover o cursor para uma coluna específica da linha atual e ’ | ’ ou ’ 0 ’ simples para mover o cursor para a primeira coluna da lnha corrente! Objeto combinado: Caractere com sentença e parágrafo • Ação: digite ’ ( ’ para inserir o cursor no inicío da sentença corrente! • Ação: digite ’ ) ’ para inserir o cursor no final da sentença corrente! • Ação: digite ’ { ’ para inserir o cursor no parágrafo anterior! • Ação: digite ’ } ’ para inserir o cursor no parágrafo seguinte! • Ação: informe o número de objetos sentença ou parágrafo seguido do comando simples para mover o cursor por mais de um desses objetos! Objetos: Palavra e caractere com palavra 21
  • 23.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF • Ação: digite ’ E ’ ou ’ e ’ (considera pontuação) para avançar o cursor para o final da palavra seguinte! • Ação: digite ’ B ’ ou ’ b ’ (considera pontuação) para recuar o cursor para o inicío da palavra anterior! • Ação: digite ’ W ’ ou ’ w ’ (considera pontuação) para avançar o cursor para o primeiro caractere da palavra seguinte! • Ação: informe o número de palavras que deseja avançar ou recuar seguido dos comandos ’ E ’ ou ’ B ’! Buscando Busca nas linhas: • Ação: digite "f ’caractere’ "para mover o cursor até a primeira ocorrência do caractere espe- cificado encontrada após a posição atual do cursor! • Ação: digite "F ’caractere’ "para mover o cursor até a primeira ocorrência do caractere especificado encontrada antes da posição atual do cursor! • Ação: digite "t ’caractere’ "para mover o cursor até a posição imediatamente anterior à primeira ocorrência do caractere especificado encontrada após a posição atual do cursor! • Ação: digite "T ’caractere’ "para mover o cursor até a posição imediatamente posterior à primeira ocorrência do caractere especificado encontrada após a posição atual do cursor! • Ação: informe um valor numérico antes de um dos comandos de busca de caracteres na linha corrente para encontrar a sua enésima aparição! • Ação: digite ’ ; ’ para reaplicar a última busca realizada e sua movimentação de cursor ao próximo caractere que estiver à frente do cursor e ’ , ’ para fazer a mesma busca na linha atual para trás do cursor! Busca no texto: • Ação: digite ’/<texto>’ para encontrar a primeira ocorrência da string "texto"na linha após o cursor! • Ação: digitem /(c).(c) para buscar por uma ocorrência qualquer de um único caractere em uma determinada posição da string dada! • Ação: digite / s1 | s2 | s3 | s4 para buscar as ocorrências de todas as strings informadas! • Ação: digitem /ˆs para procurar as ocorrências da string ’ s ’ que estejam exatamente em inícios de linha! • Ação: digitem /s$ para procurar as ocorrências da string ’ s ’ que estejam exatamente em finais de linha! • Ação: digite /< s para encontrar a string em suas ocorrências que iniciem uma palavra! • Ação: digite / s> para encontrar a string em suas ocorrências que finalizem uma palavra! • Ação: digite /< s> para encontrar a string em suas ocorrências que sejam uma palavra! 22
  • 24.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF • Ação: digite / [ c c ] para buscar as ocorrências de todos os caracteres listados entre os colchetes! • Ação: digite / [ ˆc c ] para buscar as ocorrências de todos os caracteres que não estão listados entre os colchetes! • Ação: digite / [ c - c ] para buscar as ocorrências de todos os caracteres entre os colchetes que estão listados implicitamente na ordem de caracteres do escopo indicado pelo símbolo - ! • Ação: digite / [ c ]+ para buscar por uma ou mais aparições das possibilidades entre col- chetes! • Ação: digite / [ c ] * para buscar por nenhuma ou mais aparições das possibilidades entre colchetes! Transitando entre os modos Modo de inserção: • Ação: digite ’ a ’ para iniciar o modo de inserção com o cursor um caractere a frente da posição atual! • Ação: digite ’ I ’ (’ i ’ maiúsculo) para inciar o modo de inserção com o cursor no início da linha atual! • Ação: digite ’ A ’ para iniciar o modo de inserção com o cursor no final da linha atual! • Ação: digite ’ o ’ para inciar o modo de inserção com o cursor em uma nova linha imediata- mente abaixo da atual! • Ação: digite ’ O ’ para inciar o modo de inserção com o cursor em uma nova linha imediata- mente a cima da linha atual! • Ação: digite ’ s ’ para recortar o caractere sob o cursor e iniciar o modo de inserção! • Ação: digite ’ S ’ para recortar toda a linha corrente e inciar o modo de inserção no início da linha em branco! • Ação: digite ’ c ’ com um parâmetro de objeto para recortá-lo e iniciar o modo de inserção! • Ação: digite ’ C ’ para recortar todo texto que houver na linha corrente após a posição atual do cursor! • Ação: indique um valor numérico e digite quaisquer dos quatro comandos anteriores para realizar um comando personalizado! • Ação: digite <Ctrl>+R a partir do modo Normal para iniciar o modo de substituição! Modo de substituição: • Ação: digite <Ctrl>+R para iniciar o modo de substituição! Modo Normal de inserção/substituição: • Ação: digite <Ctrl>+o em modo de inserção ou em modo de substituição para, em modo Normal de inclusão, passar um comando de modo Normal e voltar a digitar! 23
  • 25.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Modo visual: • Ação: digite ’ v ’ em modo Normal para entrar em modo visual e grifar exatamente o trecho de texto que deseja editar! • Ação: digite ’ V ’ a partir do modo Normal para entrar em modo visual do tipo linha e hachurar o trecho de texto a se editar por linhas! • Ação: digite ’ <Ctrl>+v ’ a partir do modo Normal para entrar em modo visual do tipo bloco e hachurar o trecho de texto a se editar por blocos e colunas! Modo visual de inserção/substituição: • Ação: digite ’ v ’ ou ’ V ’ ou ’ <Ctrl>+v ’ a partir do modo Normal de inclusão para acessar o modo visual de inclusão e seus tipos! Modo de seleção: • Ação: digite ’ gh ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho selecionado! • Ação: digite ’ g_<Ctrl>+h ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho selecionado linha a linha! • Ação: digite ’ gH ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho selecionado por bloco! Modo de seleção de inserção/substituição: • Ação: digite ’ gh ’ ou ’ gH ’ ou ’ g_<Ctrl>+h ’ de dentro de um dos modos Normal de inclusão para entrar em modo de seleção de inserção ou de substituição! Modo "ex": • Ação: digite ’ Q ’ ou ’ gQ ’ para entrar no modo "ex"e passar diversos comandos de linha sem voltar para o modo Normal! Editando o texto Apagando o texto • Ação: digite (n) x para apagar (n) caractere(s)! • Ação: digite um comando de cursor para designar objeto, acompanhado de um valor numé- rico, se quiser, seguido de d para apagar o objeto designado! • Ação: digite dd ou D para apagar a linha sob a qual o cursor está atualmente! Copiando o texto • Ação: digite y acompanhado de um movimento de cursor para copiar o objeto designado com o comado de cursor para o buffer padrão! • Ação: digite "cy mais o objeto de texto para o copiar para um buffer com o nome do c dado! • Ação: digite :reg ou :di para ver os buffers atualmente nomeados! 24
  • 26.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Colando o texto • Ação: digite (n) p para colar o conteúdo do buffer n vezes após o cursor! • Ação: digite (n) P para colar o conteúdo do buffer n vezes antes do cursor! • Ação: digite (n) g p ou P para colar o conteúdo do buffer n vezes e posicionar o cursor após o texto colado! • Ação: digite "c p para colar o texto armazenado no buffer de nome c! Desfazendo e refazendo comandos • Ação: digite (n) u para desfazer a(s) (n) última(s) ação(ões)! • Ação: digite (n) <Ctrl>+R para refazer a(s) (n) última(s) ação(ões) desfeita(s)! • Ação: digite U para desfazer todas as ações feitas na linha corrente! Substituindo ocorrências • Ação: digite : #,# s /expr1/expr2/ [opções] , sendo # um número de linha e #,# uma região do texto, para realizar substituições sobre as ocorrências encontradas! Ferramentans especiais Ferramentas de consulta • Ação: digite :h assunto para consultar o Vim sobre o assunto dado! • Ação: digite :version para ver a versão corrente do editor Vim! • Ação: digite ga sobre um caractere para saber seus códigos hexa e octadecimal e seu valor ASCII! • Ação: digite m c nomear a posição sob o cursor de c e ’ c para acessá-la! • Ação: digite ’ c e realize um comando para executá-lo sobre todo texto que estiver entre a posição atual do cursor e a posição marcada c! • Ação: digite : marks para ver a lista de marcas do texto atual! • Ação: digite :set number para numerar todas as linhas do texto e : set nonumber para desfazê-lo! • Ação: digite :set ruler para que o Vim nos indique a posição do cursor no texto! • Ação: digite :set smd para fazer o Vim sempre nos apresentar o atual modo de operação! • Ação: digite :set is para habilitar a busca imediata da string de busca na medida em que vai sendo digitada! • Ação: digite :set hls para hachurar as ocorrências encontradas de cada busca! • Ação: digite :split (arquivo) para abrir dividir a tela em janelas contendo diferentes textos visualizáveis simultaneamente! • Ação: digite vim arquivo1 arquivo2 no shell para abrir mais de um arquivo no Vim e :next e :prev para transitar entre os arquivos! 25
  • 27.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF • Ação: digite K sobre uma palavra que corresponda a um comando para consultar o manual do comando de dentro da sessão do Vim! Ferramentas de edição • Ação: digite r sobre o caractere a ser substituído seguido do novo caractere com o qual queremos substituí-lo! • Ação: digite ’ g ’ seguido de um comando de movimentação de cursor para trocar as letras minúsculas por maiúsculas e vice e versa! • Ação: digite J para juntar as linhas corrente e seguinte! • Ação: digite « e » para tabular o texto em modo Normal! • Ação: digite <Ctrl>+l para redesenhar a tela atual limpando as mensagens obsoletas! • Ação: digite . para repetir o último comando ou ação realizados! • Ação: digite :r arquivo para inserir o conteúdo de um arquivo dentro do texto em sessão atualmente! • Ação: digite #,# w arquivo para salvar o conteúdo entre as linhas # e # no arquivo dado! • Ação: digite :set ro para tornar a sessão do Vim somente leitura e proibir a escrita do arquivo! • Ação: digite :set ic para tornar o Vim insensível à diferença entre letras maiúsculas e letras minúsculas! • Ação: digite :! comando para executar um comando de shell de dentro do Vim! • Ação: digite :shell para inicar uma nova sessão shell a partir do Vim! • Ação: digite :!! comando para inserir a saída do comando de shell dentro do arquivo texto atual! • Ação: digite :X e informe uma chave para criptografar o texto corrente! • Ação: digite <Ctrl>+n para completar a palavra a ser digitada com alguma terminação antes digitada no texto! • Ação: digite n gq para quebrar ordenadamente as n linhas seguintes! • Ação: digite qc para inicar e q para finalizar a gravação de uma determinada seqüência de comandos, depois digite @c para executá-la nova e automaticamente! • Ação: digite :abbr abreviação abreviado para poder escrever palavras abreviadas que são convertidas automaticamente! 26
  • 28.
    Capítulo 5 Sobre oVim Portabilidade • O Vim é portável para diversas plataformas, entre elas estão: • MS-DOS; • SGI; • Archimedes; • AmigaOS; • Atari; • MiNT; • BeOS; • MacOS; • MachTen; • OS/2; • RiscOS; • VMS; • Windows; • A/UX; • AIX; • BSDI; • Convex; • DYNIX/ptx; • DG/UX; 27
  • 29.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF • DEC Unix; • FreeBSD; • HPUX; • Irix; • MacOSX; • NetBSD; • NEXTS TEP; • OpenBSD; • OSF; • QNXS; • SCO; • Sinix; • Solaris; • SunOS; • SUPER-UX; • Ultrix; • Unixware; • Unisys. Suporte a linguagens Além de texto plano ASCII, o Vim tem suporte para textos em UTF- 8 ou em Unicode. Ou seja, suporte para alfabetos cujos caracteres são representados por mais de um byte, como os ideogramas do Chinês, do Japonês e do Coreano. O Vim suporta edição da direita-para-esquerda para línguas como Farsi e Hebreu. O Vim possui mais de duzentos arquivos de reconhecimento de sintaxe para a coloração de texto cuja extensão identifique uma linguagem ou formato de texto. Entre os formatos reconheci- dos estão: Linguagens: Ada, C, C++, Eiffel, Fortran, Haskell, Java, Lisp, Modula, Pascal, Prolog, Python, Scheme, Smalltalk, SQL, Verilog, VisualBasic; Programas matemáticos: Maple, Matlab, Mathematica, SAS; Texto de marcação: DocBook, HTML, LaTeX, PostScript, SGML-LinuxDoc, TeX, WML, XML; Saída de programa: diff, man; Arquivos de configuração: 4DOS, Apache, autoconfig, BibTeX, CSS, CVS, elm, IDL, LILO, pine, procmail, samba, slrn; Shell scripts e configuração: Shells: sh, bash, csh, ksh, zsh; Linguagens de script: awk, Perl, sed, yacc. Arquivos de sistema: printcap, .Xdefaults; 28
  • 30.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Códigos Especiais: O Vim tem integração opcional com Perl, Tcl e Python; O Vim pode atuar como um servidor de automatização OLE sob o Windows; O Vim pode também ser instalado com código para X-Windows, adicionando menus configuráveis e suporte para o mouse. Licensa Ao contrário do Vi, o Vim é um editor gratuito e compatível com a lincensa GPL, General Public License da GNU. A GPL é a licensa de sofware livre mais difundida e usada no mundo, o que torna o Vim uma opção acessível a sistemas operacionais como o BeOS e os BSD e a distribuições linux como o Debian, que somente inclui em seu banco de pacotes oficiais códigos compatíveis com a GPL. Muitas vezes quando digitamos Vi no console estamos na verdade chamando o Vim ou um outro clone através de um alias. O criador Bram Moolenaar faz algumas pequenas resalvas a utilização do seu editor em sua licença. Para lê-la digite ":help license"em modo linha de comando. Um texto resumido em inglês escrito por ele próprio descreve essas resalvas: ————————————————————————- Vim is Charityware. You can use and copy it as much as you like, but you are encouraged to make a donation to orphans in Uganda. See |iccf| below. If you include Vim on a CD-ROM, I would like to receive a copy. Just so I know which Vim distributions exists in the world (and to show off to my friends sorriso). DETAILS There are no restrictions on distributing an unmodified copy of Vim. Parts of Vim may also be distributed, but this text must always be included. You are allowed to include executables that you made from the unmodified Vim sources, your own usage examples and Vim scripts. If you distribute a modified version of Vim, you are encouraged to send the maintainer a copy, including the source code. Or make it available to the maintainer through ftp; let him know where it can be found. If the number of changes is small (e.g., a modified Makefile) e-mailing the diffs will do. When the maintainer asks for it (in any way) you must make your changes, including source code, available to him. The maintainer reserves the right to include any changes in the official version of Vim. This is negotiable. You are not allowed to distribute a modified version of Vim when you are not willing to make the source code available to the maintainer. The current maintainer is Bram Moolenaar . If this changes, it will be announced in appropriate places (most likely www.vim.org and comp.editors). When it is completely impossible to contact the maintainer, the obligation to send him modified source code is dropped. It is not allowed to remove these restrictions from the distribution of the Vim sources or parts of it. These restrictions may also be used for previous Vim releases instead of the text that was included with it. ————————— ———————————————- O Vim, mais que gratuito, é um Charityware. A idéia de um Charityware é que os usuários que se sintam interessados e habilitados a coloborar de alguma forma (em geral financeiramente) com o software invistam não nele, mas no programa de caridade a ele associado, que é determinado pelo criador. Obviamente, os Charitywares são mantidos por indivíduos que preferem que se invista em caridade do que neles mesmos e logo, são voluntários. O editor Vim é um desses. Ele está associado a um programa holandês de suporte às crianças da Uganda. Para conhecer mais: http://iccf-holland.org. O texto abaixo, escrito pelo criador Bram Moolenaar, descreve um pouco o que ele pensa de Charityware e do programa associado ao Vim: Since Vim is open-source and freely distributable, users don’t have to pay to use it. Even so quite a few people who use Vim regularly expressed to me that they wanted to reward me for my work in some way. I didn’t really need extra money myself and didn’t like the idea of some people giving me money for a program that is free. That’s when I thought of the Charityware concept. The basic idea is that everybody who uses Vim is asked to donate to a charity. Thus the use of Vim is free, but if you think it’s worth something, give that money to a good cause. How did I chose the charity? Well, I have worked for a year as a volunteer with a project in the south of Uganda. This is an area that has been struck hard by AIDS. Estimates are that 10 to 30% of the adults are infected by HIV. Many parents die, leaving their children behind. The project helps these needy children in several ways. We find a new home for the child. We make sure the child can go to school, gets medical 29
  • 31.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF attention and care made to measure. After I returned from Uganda, my heart was still there. I decided the least I could do was to keep supporting the project by raising money for them. The connection to Vim was a very logical one. Thus now I’m asking Vim users to consider donating for the orphans in Uganda. I have also setup an adoption program. You can financially adopt a child, which means that the child gets long-lasting help, which is best for the child. Since we work only with volunteers and the money is directly sent to the project, almost all the money is really used in Uganda. História O editor Vim foi desenvolvido por Bram Moolenaar, um usuário do tradicional editor Vi. Suas origens remontam ao antigo e original editor do Unix, o Ed. Este, como os outros primeiros editores, rodava em terminais frequentemente sem monitores de vídeo como teletipos ou terminais lentos do tipo hardcopy. Portanto, para visualizar o texto normalmente era necessário imprimir suas linhas. O Vi começou a ser desenvolvido nesse contexto, por volta de 1976, a partir do ex, que era um editor orientado à linha baseado no ed. O conceptor do Vi, Bill Joy, um granduando da Universidade da California em Berkeley que depois veio a participar da fundação da Sun Microsystems, desenvolveu o Vi com o intuito de ser uma interface visual para o ex. Ao contrário deste, o Vi seria capaz de dispor de todo texto apresentado no monitor para edição, e não uma linha somente, e por isso seu nome: (V)isual (I)nterface. Um dia Bram Moolenaar adquiriu um Amigo, era o computador que veio ao mercado em 1985 e que era bem visto por seu poder de som e de vídeo e por seu sistema operacional multi-tarefa AmigaOS. Como este não era compatível com o editor Vi nem Moolenaar se satisfez com os clones que encontrou, ele pegou o que julgou ser o melhor, o Stevie, e começou a melhorá-lo com o intuito de torná-lo capaz de todos recursos de que o Vi dispunha. Em 2 de novembro de 1991, assim que seu editor passou a funcionar razoavelmente bem, na versão 1.14, ele o chamou de Vim, significando Vi IMitation, e o lançou em um domínio público do Amigo. Assim outros programadores passaram a o enviar patches e ajudaram a portá-lo para outras plataformas, como para o MS-DOS e para o Unix. Com o tempo o Vi IMitation, que era derivado do núcleo de um clone do Vi, havia sido tantas vezes reformulado e extendido com novas implementações que Bram Moolenaar sentiu-se no direito de chamá-lo de Vim, agora denotando Vi IMproved. Pequena linha do tempo do editor Vim até a versão 6.0 (O editor está hoje em sua versão 6.4.006) 1988 - Vim 1.00: Ainda Vi IMitation, nunca lançado publicamente; 1991 02 Nov - Vim 1.14: Primeira publicação (no Fred Fish disk #591); 1992 - Vim 1.22: Portado para o Unix. Agora Vi IMproved e compete com o Vi; 1994 12 Ago - Vim 3.00: Suporte para várias janelas e buffers; 1996 29 Mai - Vim 4.00: Graphical User Interface (por Robert Webb), mais tarde, Gvim; 1998 19 Fev - Vim 5.00: Coloração de sintaxe; 2001 26 Set - Vim 6.00: Folding, plugins, divisão vertical de telas, suporte a línguas; 30
  • 32.
    Capítulo 6 Trabalhando como Vim Apesar de suas poderosas ferramentas de edição, o Vim foi designado para trabalhar com textos planos, ao contrário, por exemplo, de um processador de texto como o Open Office Writer. Suas funções mais importantes são, portanto, operações de edição básica de texto, como aces- sar, mover, visualizar, organizar, copiar, colar, apagar e inserir caracteres. Justamente por serem operações tão fundamentais é que suas ferramentas são tão versáteis. Como o editor foi conce- bido segundo os princípios econômicos e versáteis do Vi, o Vim não trabalha, em princípio, como um editor simplista. Os editores do tipo Vi são editores modais, ou seja, trabalham com modos. De certa forma, a maioria dos editores são modais em algum sentido, especialmente os gráficos (que não necessariamente precisa funcionar dentro de um gerenciandor de janelas), visto que além do cursor de inserção, também dispõe de menus estáticos e dinâmicos, como as barras de ferramentas e os menus de mouse. Podemos considerar comandos com as teclas de controle ou meta também usos de um modo de controle do editor, como ferramentas de manipulação de texto que não seja a inserção direta de caracteres no texto. O Vim, no entanto, é modal por excelência. Ele possui diversos ambientes a partir dos quais podemos editar. São oficialmente seis diferentes formas de acessar o texto, chamadas modos de operação, que oferecem diferentes ferramentas cada qual segundo seu contexto de edição, sendo tudo ergonomicamente acessível a partir do teclado. Nisto consiste o poder e a expansibilidade dos editores da família Vi. Como pôde ser notado no programa do curso, separado em duas partes, o trabaho no Vim (como provavelmente em quase todos os editores) pode ser dividido em dois grandes tipos de tarefas. O primeiro tipo de tarefa é o trabalho de acessar as diferentes partes do texto, tanto com a visualização que se obtem com a movimentação da tela sobre o texto quanto com a movimentação do cursor e com as buscas de ocorrências e marcações de texto, este tipo de tarefa não envolve ferramentas quem afetem o texto acessado, por serem apenas comandos de consulta. O segundo tipo é o trabalho de edição propriamente dito, ou seja, aquele que visa modificar um arquivo segundo nossas in- teresses. Este trabalho inclui saber tanto os comandos básicos de edição quanto as ferramentas especiais que facilitam a edição, o que tipicamente é alcançado com uma boa configuração. Esse é o modelo de possibilidades de uso de um editor de texto, mas para que saibamos fazê-lo no Vim, deveremos conhecer alguns de seus segredos, como os papéis dos modos de operação e sua sintaxe de comandos padrão, entre outros. Em seguida descrevo todo o programa do curso, que por motivos técnicos foi dividido em duas partes, mas enfatizo que essa divisão do programa não tem base nas semanas do curso nem baseia um cronograma. Para saber a divisão semanal do curso procure a seção "Plano de curso". A primeira parte Após serem apresentadas estas preliminares, estudaremos o Vim como um programa (antes 31
  • 33.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF de um editor) como interagir timidamente com o editor em suas funções fundamentais de ope- ração, como abrir um arquivo, salvá-lo e sair do Vim. Imediatamente depois, para que se possa inciar o aprendizado das ferramentas e dos comandos do Vim, serão apresentados os princípios da sintaxe Vi de comandos padrão. Enfim, para terminar a primeira parte, aprenderemos a con- sultar, ler e pesquisar, ou, se quiser, a navegar por um texto utilizando ferramentas específicas de movimentação de texto, de cursor e de busca de ocorrências. A segunda parte Visto o editor como um todo, sua sintaxe e suas ferramentas de visualização e de acesso ao texto como um todo, vamos estudar com detalhes como transitar entre os modos de operação e seus derivados, como prerequisito para o passo seguinte. Sabendo disto tudo, estamos prontos para aprender a fazer aquilo que é mais central em qualquer editor de texto: a editar um texto. Aprenderemos a realizar no Vim (ou seja, de todas as maneirs imagináveis) os comandos básicos de edição como copiar, colar e deletar, para tanto, farei uma breve vistoria sobre como manipular comandos. Por fim, na medida do possível, iniciar-los-ei nos bastidores do Vim, e veremos o que faz do Vim mais do que um editor de texto plano muito versátil, mas praticamente um processador de texto sem codificação. Ou seja, apresentarei os princípios da configuração do Vim e alguns recursos especiais. Convencionando Como estudaremos tantas ferramentas juntos e certamente nos depa- raremos com dificuldades pessoais diferenciadas assim como tanto com previstas quanto com inusitadas complicações com respeito a construção de comandos, penso ser sensato determinar certas ditas convenções, que de convencionado mesmo não têm nada, já que infelizmente fui somente eu que as decidi. Enquanto nas ações propostas durante as lições, listadas no livro de consulta Guia de comandos, apresentarei os comandos literalmente, sempre que eu escrever um comando dentro de um texto o colocarei entre aspas, sugerindo que aquele trecho do texto deve ser entendido em uma meta-linguagem, em outro contexto, ou seja, que para a oração atual ele será sempre só um substantivo. Pelo mesmo motivo apresentarei caracteres em aspas simples quando em uma frase de texto e os caracteres que devam ser interpretados como letras entre as- pas duplas. Vale notar que eventualmente alguns trechos podem estar despadronizados apesar das revisões, neste caso, estarei sempre disponível para esclarecimentos. Os termos em inglês que aparecerão ao longo do curso estarão todos em itálico e serão esclarecidos, caso contrário, o que também vale para termos técnicos em português, um link nos levará facilmente à entrada do texto no glossário Wiki. Na apresentação dos comandos, vez ou outra me referirei a teclas presentes nos teclados em geral, e apresentarei elas no formato <Esc>, <Enter>, <Shift>, etc. Quando o pressionar de um tecla se seguir do dígito de um caractere, representarei o comando ligando as duas partes com o símbolo ’ _ ’ , como em "g_<Ctrl> ", o que significa simplismente que primeiro digitamos uma vez ’ g ’ e depois apertamos uma vez <Ctrl>. Obviamente, algumas teclas não operam por conta própria, como no exemplo. Nestes casos o formato da representação será como em "g_<Ctrl>+h ", que significa que se deve apertar uma vez ’ g ’ e depois digitar ’ h ’ enquanto se segura a tecla <Ctrl>. Não farei isso com a tecla <Shift> em todos os casos, pois ao me referir às letras maiúsculas em comandos simplismente as escreverei em maiúsculas. Por fim, mais a frente no curso aprenderemos sobre a estrutura sintática dos comandos do Vim e suas partes, e além de as nomearmos as associaremos a letras que serão usadas na apresentação de comandos ou, no caso, de projetos ou formatos de comandos. Quando me referir com as letras a essas entidades, no entanto, as escreverei em itálico para evitar que as confundemos com dígitos de comandos reais. Não se preocupem, tudo isso ficará claro. Por enquanto farei apenas algu- mas associações importantes para a leitura de algumas partes do curso: c = caractere - significa um caractere qualquer; s = string - significa uma string qualquer, ou seja, um trecho de texto ou um conjunto qualquer de caracteres concatenados. 32
  • 34.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF A interface do Vim Mas como será a cara do Vim? Pois bem, mais uma vez, não vou mentir. É importante que reconheçam anteriormente algumas das indiossincrasias exóticas do Vim para que não se atrapalhem posteriormente com seu uso. O Vim, no lugar de linhas vazias, tem tils ’ ’. O Vim, quando no modo padrão de operação, não imprime os comandos digitados, fazendo parecer que nada está acontecendo. O cursor do Vim não se mete entre os caracteres, ele os sobrepõe. O cursor, além disto, não tem independência da tela, e se movermos a tela sobre o texto, o cursor nos acompanhará, saindo da posição em que o deixamos. Se "mal"configurado, o editor pode sequer nos informar o modo de trabalho em que nos encontramos e o mouse não funcionará. Não existem, senão na versão gráfica Gvim, nem botões nem quaisquer tipos de menu acessáveis. É claro, dependendo da configuração de cores do terminal, seu editor texto será uma simpática tela preta. E, por fim (?), não há nenhum "X "para se clicar quando se quer sair. Acreditem, todas essas características são, na verdade, admiráveis. Com o uso vamos todos aprendendo a extrair as virtudes de toda essa versatilidade pitoresca. O Vim, por trabalhar com texto plano, tem privilégio em trabalhar facilmente com textos enquanto quadros. Os caracteres são posicionados cuidadosamente uns sobre os outros, permitindo-nos utilizar um conjunto todo de comandos que se aplicam ao texto como a uma tabela. Devemos pensar que no Vim, portanto, existem linhas e colunas dentros das quais os caracteres podem se posicionar. Porém não deixem de compreender que no Vim nem sempre o primeiro caractere da linha estará na primeira coluna do texto, pois as linhas podem ser iniciadas por espaços e tabulações. Dêem uma olhada na apresentação do Vim. Observe como o cursor está na primeira linha e sobre o primeiro caractere da linha, ou seja, na primeira coluna, como indicado no canto inferior direito. Vejam também como o Vim está nos informando sobre que modo de operação o Vim se 33
  • 35.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF encontra, no caso o modo de inserção, em inglês insert mode. Em baixo disto, o Vim reserva um espaço para interagir conosco nos informando sobre as nossas ações e sobre as dele. 34
  • 36.
    Capítulo 7 Modos deoperação Os modos de operação são simplesmente formas de se trabalhar o texto, ou seja, maneiras diferentes de que dispomos para acessá-lo. É nos modos de operação que consiste a estratégia inteligente de trabalho que o Vim propõe: "Você quer editar um texto? Escolha um caminho."Nos manuais oficiais do Vim, escritos pelo próprio Bram Moolenaar, assim como em boa parte dos livros e tutorias, diz-se existirem seis modos básicos de operação e cinco modos derivados que resultam de algumas possíveis combinações entre os modos básicos ou de recursos especiais de um modo. Porquanto ". "designa o modos básicos e - "seus modos derivados, a lista oficial dos modos de operação é: . Modo Normal (padrão); - Modo pendente; - Modo Normal de inserção; . Modo de inserção; - Modo de substituição; . Modo de seleção; - Modo de seleção de inserção; . Modo visual; - Modo visual de inserção; . Modo linha de comando; . Modo ex. No entanto, nas páginas de ajuda oficiais do Vim, acessíveis com "help"em modo linha de comando (ou seja, digintando ":help"em modo Normal, o padrão de entrada) também escritas pelo criador, não vemos nenhuma lista de modos de operação, mas somente links na primeira página para três ambientes que ele chama de modos, nesta ordem: . O modo Normal; . O modo visual; . O modo de inserção. Isso se deve provavelmente a uma escolha de cunho didático, visto ser um manual de ajuda e que, ao longo das páginas, podemos encontrar referências a outros modos. Caso tenham inte- resse, pode-se encontrar os manuais em modelo formal de todas as versões da 5.0 à 6.4 assim como os manuais de ajuda e links para outros tutoriais e FAQs em "http://vimdoc.sourceforge.net". Também existem manuais e tutoriais que consideram haver somente dois grandes modos, o Nor- mal, às vezes chamado de modo aberto, e o modo de inserção, sendo todos os outros derivados destes, se forem considerados modos. Eu, entre outros, gosto de pensar que são na prática sete modos básicos de operação, visto que o modo variante de substituição pode ser considerado um modo a parte. Considerarei haver, portanto, sete modos básicos de operação na prática. O modo pendente, por sua vez, não necessariamente precisa ser considerado um modo distinto, visto ser uma propriedade do modo Normal. Logo, a lista na prática será: . Modo Normal (padrão); - Modo Normal de inserção/substituição; . Modo de inserção; . Modo de substituição; . Modo de seleção; - Modo de seleção de inserção/substituição; . Modo visual; - Modo visual de inserção/substituição; . Modo linha de comando; . Modo ex. Esta lista é de longe mais razoável para nós, usuários, visto que para entender os modos derivados basta reconhecermos que existem três modos que trabalham em conjunto com os dois modos de inclusão de caracteres (inserção e substituição): o modo Normal, o visual e o de seleção. A princípio, se iniciarmos o Vim normalmente, entramos sempre no modo Normal (ou modo de comando). Podemos, no entanto, passarmos parâmetros para ele na sua chamada na 35
  • 37.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF linha de comando, ordenando-o a, entre outras coisas, iniciar um determinado modo. Veremos isso na segunda lição. De dentro do modo Normal, temos acesso a todos os outros modos, podendo chamá-los através do teclado com comandos reservados simples. Veremos agora uma descrição da função de cada modo de operação, seguida do comando básico através do qual podemos iniciá-los. 1 Modo Normal O modo Normal, também chamado de modo de comando, é o modo padrão do Vim, não somente com o qual o editor abre em uma inicialização usual, mas é o modo mais fundamental, a partir do qual se tem acesso à todos os outros. Ele é capaz de realizar todas as operações básicas da edição de texto e de controle de comando e de janelas, além de chamar os outros modos e de oferecer recursos especiais que aprenderemos mais tarde, como criar marcas e outras ações simples. Este modo é acessado a qualquer momento de qualquer modo com o simples apertar de tecla de controle "esc". Caso seu teclado não possua a tecla "esc", pode ser tentado ˆ[ ou ˆ3 , ou ainda alguma tecla <meta> que o teclado venha a possuir. De dentro do modo Normal são realizados comandos sem a espera da tecla de retorno, o "Enter". Os comandos digitados são ou processados imediatamente após sua digitação, que é realizada com um ou com poucos caracteres simples ou com combinações da tecla "Ctrl", ou esperam alguma espécie de parâmetro. O parâmetro algumas vezes é necessário após habilitarmos, com uma combinação de "Ctrl", certo tipo de controle e enfim passamos o comando de fato, e em outros casos o editor espera mudarmos de modo de operação para que o comando digitado seja aplicado. Ou seja, quando digitamos alguma coisa no modo Normal, ou o comando não é reconhecido (o que é informado, caso configurado adequadamente), ou ele entra em um outro modo, ou ele processa uma operação de edição, ou ele espera entrarmos em um dos dois modo de inclusão de caracteres para realizar uma ação especial (veremos em breve) ou ele espera um parâmetro simples para indicar o uso e completar o comando. Esta última situação é o que oficialmente é o variante modo pendente. O (outro) modo derivado do modo Normal é o modo Normal de inserção, que é acessado com o comando "Ctrl-o"em modo de inserção. Ele funciona como o modo Normal, mas só nos permite fazer uma operação e ele volta automaticamente para o modo de inserção. 2 Modo linha de comando O modo linha de comando se destina ao que podemos chamar de meta-comandos, que dizem respeito ao controle do próprio programa e dos arquivos. Ele é o ambiente de onde configuramos a sessão de edição, de onde acessamos salvamos e fechamos arquivos de texto e de onde saimos do Vim. É esperado de nós a tecla de retorno, ou "Enter", para o processamento do comando, e por isso sua analogia à linha de comando. Todas essas operações são anunciadas ao Vim por meio do caractere ": ", que o informa a presença do que chamei de meta-comando. Este modo também realiza outro tipo de operação, que diz respeito ao acesso às partes do texto. Com o caractere "/ ", amplamente convencionado em ambientes linux, podemos fazer buscas por ocorrências altamente especificáveis de expressões e manipulá-las, deletando-as, substituindo- as, etc. Existe uma sintaxe particular para a busca por ocorrências de texto, o que será explicado ainda na primeira semana. Com o caractere "? "fazemos buscas para cima do cursor, e com "! "filtramos comandos para, por exemplo, realizarmos um comando de Shell de dentro do Vim. Todo este modo é altamente editável, ou seja, existem várias ferramentas exclusivas para facilitar a elaboração de comandos neste modo. Estudaremos elas ainda na primeira semana. Acessamos o modo linha de comando, enfim, inciando nosso comando com algum destes caracteres ": / ? ! "a partir do modo Normal, mas, em princípio, sempre que me referir ao modo linha de comando, ou à linha de comando do Vim, estarei falando de comandos inciados com dois-pontos, ": ". Nos casos em que me referir aos outros usos deste modo tornarei claro se trato de uma busca, para 36
  • 38.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF frente ou para trás, ou de um comando filtrado. 3 Modo "ex" O modo ex poderia ser, e inclusive é, considerado por alguns como uma variante do modo linha de comando, visto que nele se opera de maneira praticamente idêntica. A diferença está no controle que temos sobre a linha de comando. Enquanto em linha de comando se espera que realizemos uma operação e voltemos para o modo Normal, em modo podemos efetuar quantos comandos quisermos e nos manter como em linha de comando. No modo ex, portanto, não temos que continuar digitando ": "a cada comando e a tela não é atualizada listando cada operação que fazemos. Por este último motivo o modo ex é ideal para que configuremos o Vim em pleno uso com um script "on-line". Para entrar em modo ex, digitamos "Q ". Também podemos iniciá-lo com "gQ ", o que, é claro, funciona de forma ligeiramente diferente. Enquanto com "Q "as linhas de comando são manipuláveis somente com os comandos padrões de inserção de linhas, ou seja, com <bs>, <del> e comandos como "Ctrl-u", "Ctrl-e", etc., o modo ex iniciado com "gQ "é editável com todos os recursos do modo linha de comando, como completar automaticamente palavras, por exemplo. 4 Modo de inserção Este modo funciona como um editor normal, que dispõe um cursor e espera a entrada de caracteres a serem incluídos diretamente no texto. Entramos em modo de inserção com o co- mando simples "i ", a partir do modo Normal, mas existem diversas outras maneiras de acessá-lo, como "I ", "a ", "A ", "o ", "O ", "c ", "C ", "s "e "S ". Podemos utilizar o modo de inserção assim como o modo de substituição (ou seja, os modos de inclusão de caracteres, como estou cha- mando) também em combinação com os modos Normal, visual e de seleção o que é explicado nas respectivas seções. 5 Modo de substituição Este modo é um modo variante do modo de inserção segundo a lista oficial de modos mas po- demos considerá-lo um modo básico dado que ambos desempenham os mesmos papéis apesar de dispor de menos alternativas de ativação. O modo de substituição é utilizado como o modo de inserção, mas sobrepõe, ou ainda melhor, substitui caracteres do texto com os caracteres di- gitados ao invés de inseri-los ao lado. É o recurso "Insert"que a maioria dos teclados possui e que todos editores de hoje reconhecem. Inclusive, a tecla "Insert"é uma das maneiras de entrar em modo de substituição. Outra, a que recomendo, é apertando "R "em modo Normal. Podemos utilizar o modo de substituição, assim como o modo de inserção (ou seja, os modos de inclusão de caracteres, como estou chamando), também em combinação com os modos Normal, visual e de seleção, o que é explicado nas respectivas seções. 6 Modo visual O modo visual pode ser visto como uma extensão útil do modo Normal, visto que temos acesso às mesmas operações de edição. Este modo é destinado à seleção de um trecho de texto com a movimentação dos cursores, que formam como uma hachura sobre as linhas a se- rem selecionadas. Passamos comandos então como em modo Normal para manipular o trecho marcado. Ele funciona como qualquer editor visual com suporte a mouse, e inclusive pode-se configurar o próprio Vim para suportar a utilização do mouse. Este modo é acessado com o ca- ractere "v "em modo Normal. Existe um recurso do modo visual que praticamente poderia ser considerado um modo derivado, que é o bloco visual, ou visual block. Ele é acessado com "Ctrl- v"a partir do modo Normal. Com ele podemos selecionar blocos quadrangulares de texto, como se ele fosse uma tabela ou um quadro de caracteres sem linha, nos permitindo selecionar, por exemplo, somente uma coluna de texto para manipulação. Semelhante a este recurso é o visual line, acessível com "Shift-v"a partir do modo Normal. 7 Modo de seleção 37
  • 39.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF O modo de seleção é semelhante ao modo visual, mas ele não trabalha em cooperação com o modo Normal, ou seja, o modo de seleção não aceita comandos como o visual. Ao contrário, caso seja digitado qualquer caractere imprimível entra-se em modo de inserção, ou seja, sua utilização é análoga a de um editor de texto visual simplista. Este modo é acessado através do comando "gh", de dentro do modo Normal. "Ctrl-g", a partir do modo visual, é uma das outras alternativas que serão apresentadas mais tarde. Existem também os recursos de selection block e selection line no modo de seleção, ativados com "gH"e com "g_Ctrl-h"respectivamente. 38
  • 40.
    Capítulo 8 Lição 1- Interagindo com o Editor 8.1 Entrando Agora já conhecemos o que é o Vim e temos uma boa noção das suas características, das suas peculiaridades operacionais e da sua história. Então, estamos prontos para aprender a editar de fato? Nossa primeira dificuldade técnica a ser enfrentada é abrir o editor de texto. Estejam com seus terminais de linha de comando preparados para evocar o grande editor. Agora digitem a palavra ’vim’. Pronto, primeira fase concluída! Ação: digitem ’vim’ na linha de comando para entrar no Vim! 8.2 Saindo 39
  • 41.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Nessa tela podemos ver uma introdução simples e simpática ao ambiente de edição que nos informa o nome do programa, VIM - Vi IMproved, o número da sua versão do programa (que caso seja anterior à 5.0, é aconselhável uma atualização), o nome do principal criador, Bram Moolenaar, e o aviso orgulhoso de que o código do Vim é aberto e de que sua distribuição é gratuita. Em seguida ele apresenta uma frase aleatória que pode ser um convite para que nos registremos, um pedido para que demos alguma contribuição com o programa de ajuda das crianças da Uganda ou qualquer outra. Em seguida ele nos informa sobre dois comandos vitais no uso do Vim: ’:help’ e ’:q’. Com o ’:help’ a partir do modo Normal podemos consultar o manual completo de ajuda de comandos de edição, de modos de operação e de controle do programa em geral além de outros textos relativos ao Vim, cuja importância não diz respeito exclusivamente à sua operacionalidade. Entre esses arquivos de textos estão a licença, o texto de registro descrevendo as alterações da versão e um texto mostrando as diferenças entre o Vim e o Vi. Com o ’:q’ a partir do modo Normal, ou seja, no modo padrão de entrada também acessível com ’Esc’ a partir dos outros modos, saímos do Vim caso não tenhamos realizado nenhuma tarefa de edição. Vamos testar: digitem ’:q’ (sem os apóstrofes, é claro). ’ q’, em inglês, é quit o que também funciona se digitado. Ação: digitem ’:q’ para sair caso não tenham efetuado nenhuma edição! 8.3 Escrevendo Agora retornem para o Vim digitando ’vim’ na linha de comando novamente. Nós conseguimos sair mas também não fizemos nada! Isso não adiantou em muita coisa. Vamos iniciar uma edição então digitem alguma coisa como "text". Parabéns, não apareceu nada! Isto aconteceu porque estamos em princípio no modo Normal e a partir dele não podemos inserir caracteres novos. Portanto, como aprendemos, digitem ’i’ a partir da tela inicial do Vim. Porém se você fez como foi dito provavelmente terá que digitá-lo duas vezes. Pronto! Como aprendemos, ’i’ inicia o modo de inserção. Ação: digitem ’i’ para entrar em modo de inserção de caracteres! 8.4 Saindo sem salvar Enfim, escrevam! Neste modo qualquer um sabe se virar, pois o modo de inserção se com- porta como um editor simples. Enquanto escrevemos, o texto que editamos está em um buffer reservado pelo Vim na memória, que ainda não o associa a arquivo nenhum. Para sairmos do Vim agora não basta digitar ’:q’, inclusive porque estamos em modo de inserção, portanto, voltem para o modo Normal apertando ’Esc’ e em seguida tente sair com ’:q’. O Vim nos informa de que não salvamos o texto desde sua última modificação, ou seja, ele está dizendo que o texto que está atualmente na memória não foi escrito no disco rígido para que seu acesso seja pos- sível posteriormente. Sim - dizemos - nós sabemos que ele não foi salvo, agora nos deixe sair! Pois bem, como o Vim (ainda!) não consegue nos ouvir, precisamos informá-lo de que estamos conscientes do fato de não havermos salvado o texto e que ainda assim queremos sair. Fazemos isso com o caractere ’!’ após o comando (de modo linha de comando). Esse caractere significa alguma coisa como "Faça isso e não me pergunte nada!", ou "Sim, eu sei o que eu estou fazendo, 40
  • 42.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF acredite em mim!". Seu funcionamento lembra o parâmetro ’-f’ presente em muitos comandos Unix. Digite, portanto, ’:q!’. Pronto, de volta ao terminal. Ação: digitem ’:q!’ para sair mesmo havendo efetuado modificações! 8.5 Salvando 1 Grande coisa, não?! Conseguimos entrar em um editor de textos, escrever e sair sem sal- var! De que isso adianta? Nada! Entre no Vim novamente (’vim’). Entre no modo de inserção novamente (’i’)’. Digite um texto novamente e retorne para o modo Normal (’Esc’). Agora vamos salvar o texto antes de sair. Digite ’:w’ para salvá-lo. ’ w ’ vem de write, do inglês, e o comando nesse formato também é reconhecido. Infelizmente, o Vim não sabe com que nome ele deve escrever seu texto em disco. Portanto, informe o nome do arquivo após o comando desta forma: ’:w nomedoarquivo’. Pronto! salvamos o texto no disco! Ação: digitem ’:w nomedoarquivo’ para salvar o texto em um arquivo no disco! 8.6 Salvando 2 O lugar onde o texto foi guardado é por padrão o diretório a partir do qual chamamos o Vim da linha de comando, ou seja, justamente onde iremos quando saímos dele. Vamos ver? Digite ’:q’, que agora funcionará já que não há uma modificação sequer que não tenha sido salva. Com o comando Unix ’ls’ listamos parte do conteúdo do diretório atual. Entre os arquivos listados devemos encontrar aquele que criamos. Para lê-lo podemos digitar, por exemplo, ’cat nomedoarquivo’ e conferir se esse tal de Vim funciona mesmo. Voltemos ao Vim. Agora queremos realizar uma última edição do nosso texto, então digite ’vim’ novamente para entrar no editor. Ora, mas onde está meu texto? Será que eu só posso editar textos novos!? Imagina! Vamos chamar o texto de dentro do Vim. Digite o comando de linha de comando ’:e nomedoarquivo’. Olha ele aí! Que beleza esse Vim. Façam suas modificações a partir do modo de inserção (’i’) e retornem depois para o modo Normal (’Esc’). Percebam que agora o Vim sabe a que arquivo o texto em edição está associado, logo não é mais necessário informar o nome do arquivo para salvá-lo, podendo o comando ser simplesmente ’:w’. Ação: digitem ’:w’ para salvar o arquivo cujo conteúdo está atualmente em edição! 8.7 Salvando e saindo Queremos agora salvar e sair ao mesmo tempo, afinal o que o Vim teria de rápido e eficiente se ele fosse todo burocrático? Digite ’:wq’. Perceba que concatenando dois comandos eles funcionam perfeitamente! Outros comandos existem para realizar a mesma operação: ’:ZZ’ e ’:x’ Ação: digitem ’:wq’ para salvar e sair imediatamente! 8.8 Abrindo um arquivo 1 Apesar dos comandos no formato ’quit’ e ’write’ serem reconhecidos, os comandos concate- nados devem ser abreviados. Para conferir o conteúdo do arquivo a partir do Vim digite na linha de comando do seu Linux ’vim nomedoarquivo’. O arquivo será aberto em modo de edição. 41
  • 43.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Ação: digitem ’vim nomedoarquivo’ para inciar o Vim já automaticamente chamando um ar- quivo para edição! 8.9 Salvando 3 Podemos chamar inclusive mais de um arquivo para a sessão do Vim simultaneamente com o mesmo comando no formato: ’vim arq1 arq2 arq3 (...)’. Veja como ele reconhece o seu comando e informa na parte inferior o nome do arquivo e a quantidade de linhas e de caracteres existentes no texto. Caso queiram gravar esse texto em outro arquivo, já sabem, não é mesmo? Digite ’:w outroarquivo’ e continue editando o texto, pois o Vim continuará o associando ao arquivo original, diferentemente de outros editores de texto. Esse comando funciona como um "salvar como". Ação: digitem ’:w outroarquivo’ para gravar o texto atual em um outro arquivo que não seja aquele já chamado! 8.10 Abrindo um arquivo 2 Logicamente, podemos portanto salvar nosso texto com outro nome de arquivo e também sair imediatamente! Basta digitarmos ’:wq outroarquivo’. Ação: digitem ’:wq outroarquivo’ para salvar outro arquivo e imediatamente sair do Vim! Para terminar vamos aprender uma alternativa para o problema de querermos abrir um ou mais arquivos já de dentro do Vim. O comando edit (do inlgês), que também funciona, tem sua versão abreviada ’:e’. Com ’:e nomedoarquivo’ abrimos um arquivo de dentro do Vim. Se quiser, tente! Ação: digitem ’:e’ de dentro do Vim para abrir o arquivo desejado sem ter que voltar ao shell! 42
  • 44.
    Capítulo 9 Lição 2- Sintaxe dos comandos 9.1 Parte 1 / 7 | Operadores de controle Atenção: esta lição não tem questão ao final. Seu objetivo é que a passagem de comandos seja facilitada, mas caso se sinta seguro quanto a sintaxe de comandos (de modo Normal) do vim ela é dispensável. O que aqui chamamos de operadores de controle não são exatamente as famosas teclas de controle, como <Ctrl>, <Shift>, etc. No Vim, os operadores de controle são todas as teclas e caracteres que não realizam uma ação propriamente dita nem imprimem texto (mesmo que seja de um comando). Eles habilitam outros comandos (tipicamente <Ctrl>, mas não somente), como na função típica das teclas de controle. Além disso manipulam a ambientação e o uso do Vim, como os caracteres de transição de modos e a tecla <Esc>. 9.2 Parte 2 / 7 | O paradigma Vi O chamado paradigma Vi envolve três variáveis cujas combinações quando executadas reali- zam diferentes tarefas de edição: verbo, número e objeto. Esses três argumentos juntos compõe uma ação e estão presentes, ainda que ocultos, em todos os comandos de edição em modo Normal. A lógica é: faça isto nesta quantidade de objetos. Não obstante o verbo ser certamente o parâmetro fundamental, cada uma das variáveis podem ser ocultadas em determinadas situa- ções. Neste caso, a quantidade padrão é 1 (um) e o verbo padrão é mover o cursor. Em geral, os caracteres são o objeto padrão, sendo as linhas o objeto secundário. O objeto, caso seja oculto, é inferido a partir da direção (e não do sentido) para a qual apontamos; apontar horizontalmente implica que o objeto é um caractere e apontar verticalmente implica que o objeto em questão é uma linha. 9.3 Parte 3 / 7 | Objetos de texto Pode ser dito que o Vim é um editor orientado a objetos. Como assim? Isso quer dizer que o Vim possui a capacidade de reconhecer objetos de texto como caracteres, linhas e parágrafos, sobre os quais podemos realizar tarefas. Para o Vim, nem que seja implicitamente, realizamos edições sempre sobre um determinado objeto ou sobre um conjunto de objetos especificáveis. Estes objetos podem ser: 43
  • 45.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF . Caracteres; . Palavras; . Sentenças; . Linhas; . Parágrafos; . Todo o texto; . A string de uma busca; . Posição de Parênteses e de todo tipo de delimitadores (até comentários em C!). Como eles são de espécies diferentes, algumas utilizações também serão diferentes. Há de notar que existem ações que dizem respeito a um objeto inteiro ele mesmo e ações que usam o objeto como medida para selecionar uma região de ação no texto. O uso de todos objetos, porém, é relativo à posição do cursor, mesmo quando a ação é mover o próprio cursor para um determinado objeto (ou por um determinado objeto, no caso de uma ação que usa o objeto como medida de região de texto). Neste caso, em que a ação é o simples mover do cursor, existe a exceção de querermos mover o cursor segundo um objeto absoluto, como é qualquer um que diz respeito ao texto como um todo, como o ’início do texto’ ou o ’final do texto’. Somente neste caso o uso do objeto não é relativo ao cursor, pois mesmo quando sabemos que o uso do objeto não será outro (como cópia, colagem e deleção), mas será para o simples movimento do cursor, temos de saber também a posição desse cursor para identificarmos sua ação específica. 9.4 Parte 4 / 7 | Verbos Basicamente, exitem dois tipos de verbos: os simples, cujo objeto são sempre caracteres, e os verbos pendentes, que esperam a entrada do parâmetro ’objeto’ para executarem uma ação. Ou seja, o primeiro tipo de verbo pode receber somente um parâmetro numérico, que caso seja omitido será tido como sendo o valor ’1’. Já os verbos compostos recebem além do parâmetro numérico um que indica sobre qual objeto o verbo deve realizar a sua ação. Esse objeto, por sua vez, pode ser indicado de diversas maneiras distintas caso seja utilizado no seu lugar um operador de controle ou um caractere direcional. Um caso extremamente interessante de pendência de verbo é o de comandos que utilizam uma string inserida no texto em uma sessão de modo de inclusão como objeto de sua ação. Isso significa que entrar em modo de inserção, por exemplo, pode ser parte de um comando de edição, e a string inserida o objeto de ação. Alguns dos verbos básicos são: . Mover cursor; . Deletar; . Copiar; . Colar; . Recortar; . Buscar ocorrências; . Desfazer; . Refazer. Só existe uma ação que suporta a omissão do verbo: a movimentação do cursor. Podemos montar um comando para mover o cursor com a indicação de um número e de um objeto, ou seja, com a indicação de por quantos objetos de texto de um certo tipo o cursor andará e apontar a direção da ação com o uso de um dos direcionais. Como essa é uma ação que permite a omissão tanto do valor numérico quanto do objeto, se omitimos o verbo realizamos o único comando completamente omisso. Em outras palavras, mover o cursor é ação padrão que é realizada automaticamente com o uso dos direcionais. 9.5 Parte 5 / 7 | Valores de quantidade Um dos parâmetros que podemos passar para comandos é o parâmetro numérico. Este, em geral, refere-se ao número de objetos do tipo designado que serão incluídos da solução do comando. Por exemplo, podemos querer remover as duas, quatro, oito ou todas as próximas palavras. Outros verbos, no entanto, reagem de forma ligeiramente diferente ao parâmetro nu- mérico, lendo o valor como uma descrição objetiva de algum tipo de objeto numerável, ou seja, indentificável numericamente, como, por exemplo, as linhas. 44
  • 46.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF 9.6 Parte 6 / 7 | Os direcionais Os editores da família Vi disponibilizam quatro caracteres que têm a função tanto de suprir a ausência das teclas de setas direcionais em certos teclados quanto também oferecer uma dis- posição espacial das teclas de controle que seja ergonômica e eficaz. São, portanto, caracteres cujas teclas fazem parte do centro da região direita do teclado. As teclas são ’h’, ’j’, ’k’ e ’l’. Elas desempenham em modo Normal, respectivamente, as funções das setas para a esquerda, para baixo, para cima e para a direita. Os caracteres direcionais, assim como as setas, não devem ser entendidos como comandos simples, como seria natural visto que em modo Normal existem diversos comandos de um dígito que realizam ações. Os direcionais não são meros verbos de movimento, apesar de poderem constituir ações espaciais como o mover dos cursores sem a explicitação do verbo. Na verdade, os direcionais não devem ser vistos sequer como verbos, mas sim como as realizações de um parâmetro para verbos cujo objeto seja indeterminado. 9.7 Parte 7 / 7 | Construindo comandos Vimos que o paradigma de edição da família Vi assume que toda ação possui os três parâme- tros respectivamente: valor numérico, doravante "n", verbo de edição, "v", e objeto de texto, "o". É esta exatamente a ordem sintática com que os parâmetros devem ser concatenados no comando. Portanto, um esquema bastante simples que pode ser apresentado de como é a sintaxe básica dos comandos de edição é, em geral: n v o. Uma alternativa a esta estrutura é v n o, que também funciona igualmente. Como cada um destes pode ser eventualmente omitido (o verbo somente em um caso), a aparência dos comandos pode e será diferente em muitos casos. Como ainda não conhecemos os comandos de edição, utilizaremos como exemplo os dois comandos de remoção de caracteres, o ’x’ e o ’d’ e outros que serão apresentados nos momentos oportunos. Para nosso experimento, siga estritamente as seguintes instruções: abra o Vim com o comando ’vim’, insira com ’i’ o texto "O Vim Salva "(repare no espaço) e aperte <Esc>. Em nosso primeiro comando, vamos instruir o Vim a copiar as três últimas palavras, para tanto, vamos informá-lo da quantidade de objetos, que é três (’3’), do objeto, que é palavra atrás do cursor (’b’) e do verbo, que é copiar (’y’, de yank). Logo, o comando é: "3yb". Ao digitar os caracteres, notaram que eles parecem não ser reconhecidos pelo editor pois não não são impressos na tela, o que é uma característica dos comandos em modo Normal, mas ele está os armazenando enquanto espera a sintaxe do comando se completar para então executá-lo. Se realizamos corretamente o comando, o cursor deve estar sobre o primeiro caractere da linha, a letra ’O’. Vamos agora ao nosso segundo comando. Apagaremos três palavras a partir do cursor. Informaremos o Vim do número de objetos, que é novamente três (’3’), do objeto, que é palavra a partir do cursor (’w’, de word) e do verbo, que é apagar (’d’, de delete). O comando portanto será: "3dw". Os curiosos podem tentar apagar duas palavras e depois a última, para ver outras combinações do mesmo comando. Para tanto, aperte ’(1)u’ (de undo), sendo o número opcional, já que 1 é o padrão, para desfazer o último comando e digite "2dw"e enfim "(1)dw". Tentem também, apertando ’u’, digitar três vezes "dw", apagando palavra por palavra. Porém, para o nosso propósito neste caso, é necessário que seja refeita a remoção da frase com o "3dw". Agora, com o texto vazio, digitem ’5p’. ’p’, que vem de paste, cola o último pedaço de texto armazenado no buffer padrão (veremos mais sobre os buffers mais tarde). Observe também que os objetos tanto do comando ’u’ quanto do ’p’ são objetos implícitos especiais, no caso a última ação e o último pedaço de texto armazenado, respectivamente. "5p"tem de ter impresso no texto cinco vezes a expressão religiosa "O Vim Salva ". Veja como a colagem foi feita sobre uma mesma linha, e experimente 45
  • 47.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF agora digitar ’(1)dd’. A repetição do verbo e a omissão do número indica que o Vim deve remover a linha toda, e somente uma linha, linha aqui é o objeto implícito a essa ação. O verbo ’d’, além de remover, também copia o objeto removido, ou seja, ’d’ mais do que remover ou copiar, recorta. Sabendo disso e tendo recortado a linha, vamos colá-la diversas vezes com o comando "200p". Ah, agora sim! Praticamente um salmo! 46
  • 48.
    Capítulo 10 Lição 3- Acesso ao texto: Movendo-o 10.1 Parte 1 / 7 | Iniciando uma sessão somente leitura Provavelmente a função mais básica de um editor de texto tela cheia é permitir que se percorra todas as linhas do texto. Em muitos casos não queremos editar nem escrever, mas simplesmente consultar um arquivo ou ler um pouco. Antes de mais nada é conveniente que aprendamos a ope- rar o Vim para essa específica finalidade. Podemos, para isso, abrir qualquer arquivo de texto, plano ou não. O importante é que tenhamos bastante linhas para procurar e percorrer. Para chamar um texto basta digitar "vim caminho/do/arquivo". Como o texto não vai ser editado e pos- sivelmente estaremos consultando um arquivo que não queremos modificar, abram o Vim com o comando "view caminho/do/arquivo". Abrir o Vim com ’view’ é mesmo que abrir o Vim e configu- rar a sessão como "somente leitura", ou "read only"com o comando ’:set ro’. "View"significa ’ver’, é uma maneira simples de permitir que se utilize o Vim de uma forma segura contra alterações indesejadas. Ação: Abra o Vim com o comando ’view’ para já configurar automaticamente a sessão atual como ’somente leitura’! 10.2 Parte 2 / 7 | linha a linha para baixo Com o Vim aberto e um arquivo grande em sessão, independente da forma, vamos conhecer mais algumas ferramentas. A movimentação do texto pela tela não depende da posição do cursor, ainda que a posição deste dependa da movimentação da tela. Existem duas formas básicas de se percorrer o texto. Uma é linha a linha, outra é página a página, como se apertássemos <page up> ou <page down>. Para caminhar linha a linha para baixo, apertamos ’<Ctrl>+e’ para cada linha andada. Podemos manter o <Ctrl> segurado e controlar o andamento das linhas com o caractere ’e’. Ação: Segure ’<Ctrl>+e’ para mover a tela uma linha para baixo pelo texto! 10.3 Parte 3 / 7 | linha a linha para cima Igualmente, para seguir para a linha anterior, apertamos ’<Ctrl>+y’ . Da mesma forma pode- mos manter o <Ctrl> pressionado para facilitar o controle da movimentação do texto pela tela, permitindo-nos apertar uma vez ’y’ para cada linha que queremos andar. Ação: Segure ’<Ctrl>+y’ para mover a tela uma linha para cima pelo texto! 47
  • 49.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF 10.4 Parte 4 / 7 | tela a tela A outra maneira típica de se movimentar o texto é andando página a página. Podemos andar uma página para baixo digitando ’<Ctrl>+f’ (sendo ’f’ "forward") para cada página movida. Para andar uma página para cima no texto, digitamos ’<Ctrl>+b’ (sendo ’b’ "backward") para cada página percorrida. Vale o mesmo sobre o dito controle da movimentação mantendo o <Ctrl> apertado. Ação: Segure ’<Ctrl>+f’ para mover a tela uma página a baixo pelo texto! Ação: Segure ’<Ctrl>+b’ para mover a tela uma página a cima pelo texto! 10.5 Parte 5 / 7 | linhas escolhidas Por serem comandos de modo Normal, vale a sintaxe de comandos estudada. Ou seja, pode- mos informar ao Vim em quantos objetos queremos realizar nossa ação, que no caso é mover o texto pela tela. Experimentem digitar o comando ’5_<Ctrl>+e’. Este comando fará a tela descer 5 linhas! Como o número estava sendo omitido, andávamos sempre por somente um objeto (linha ou página), mas podemos construir os comandos de movimentação do texto como construímos qualquer comando de edição em modo Normal! Note que no caso de querermos especificar um número não podemos manter o <Ctrl> apertado. Ação: Especifique um número e segure qualquer um dos comandos básicos de movimentar- ção de texto para mover um número personalizado de objetos de texto pela tela! 10.6 Parte 6 / 7 | posição da tela Existe no Vim, assim como no Vi, outra uma maneira de acessar uma região do texto que não é um destes recursos tradicionais de movimentação. Podemos decidir em que lugar da tela desejamos que fique uma determinada parte (na verdade, linha) do texto. Podemos, por exemplo, querer que uma determinada linha fique no topo da tela, no centro ou o na sua base. A linha em questão pode ser tanto a linha atual, ou seja, a linha sobre a qual o cursor está, e neste caso sua posição é irrelevante para o comando, ou a linha em questão pode ser uma linha especificada com o parâmetro numérico dos comandos de modo Normal. Para situar a linha atualmente sob o cursor no centro da tela digitem ’z.’ (’z’ e ’ponto’). Este comando também pode ser realizado com ’zz’. Para situar a linha sob o cursor no topo da tela digitem ’z+’ (’z’ e ’+’) e para situá-la sob o cursor na base da tela digitem ’z-’ (’z’ e ’-’). Ação: Digite ’z.’ ou ’zz’ para situar no centro da tela a linha atualmente sob o cursor! Ação: Digite ’z+’ para situar no topo da tela a linha atualmente sob o cursor! Ação: Digite ’z-’ para situar na base da tela a linha atualmente sob o cursor! 10.7 Parte 7 / 7 | posição da tela escolhida Se quisermos determinar uma linha para ser situada em uma das três posições informamos ao Vim o parâmetro numérico no início do comando. Para a linha 30 ficar no centro da tela, por exemplo, escrevemos ’30z.’ ou ’30zz’. Observe, como este é um caso em que o valor nu- mérico não indica uma quantidade de objetos, mas identifica um objeto segundo uma das suas características, no caso, a posição do objeto linha. 48
  • 50.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Ação: Determine o número da linha que deseja enquadrar e o digite seguido de uma das posições da tela! Note que no Vim o cursor nunca fica perdido pelo texto, ou seja, ele estará sempre visível mesmo que o texto seja movido (com as comandos básicos) sem levá-lo em considerção. Quando descemos pelo texto, o cursor fica no topo da tela, e quando subimos pelo texto ele fica na sua base, sempre acompanhando nosso movimento. Em um editor normal essa característica poderia ser uma desvantagem visto que estaríamos sempre perdendo a posição do cursor. No Vim, no entanto, pressupõe-se que existem recursos suficientes para movermos com facilidade o cursor para diferentes regiões do texto. Veremos a movimentação do cursor na próxima página da lição. 49
  • 51.
    Capítulo 11 Lição 4- Acesso ao texto: Movendo o cursor 11.1 Parte 1 / 7 | direcionais e texto Esta lição é certamente fundamental. Claro que não espero que se decore todos os comandos simplesmente pela leitura, mas prestem atenção nos comandos em geral pois a movimentação do cursor futuramente será nosso parâmetro de objeto para outras ações. Ou seja, serão estes mesmos comandos os utilizados futuramente para para apagar, copiar, colar e etc. Assim como na página "Movendo o texto", precisamos ter em mãos um texto de preferência extenso para praticar os comandos, afinal, não podemos mover texto nem cursor por linhas de texto que não existem, indicadas por ’ ’ tanto no Vim quanto no Vi. Portanto, abra um arquivo com a chamada ’vim arquivo’ ou ’view arquivo’, caso queira configurar a sessão como ’somente leitura’. Objetos: Caractere e linha com direcionais simples Antes de mais nada, lembremos dos direcionais ’ h ’ , ’ j ’ , ’ k ’ e ’ l ’ , funcionando em modo Normal como as setas para a esquerda, para baixo, para cima e para a direita, respectivamente. Como vimos no material "Sintaxe dos comandos", os direcionais são especiais por funcionarem de forma semelhante a uma operação de controle, no sentido de não serem uma ação, mas podem eventualmente evocar uma enquanto apontam para algum parâmetro. É exatamente isso que acontece quando apertamos um dos controles direcionais. O verbo mover cursor é chamado implicitamente a agir em uma determinada direção, movendo-se pelo objeto implícito caracteres, no caso do ’ h ’ e do ’ l ’ ou pelo objeto implícito linha, no caso do ’ j ’ e do ’ k ’. Lembre, no entanto, que o Vim, ao contrário do Vi, reconhece as setas padrão do teclado. Não vamos utilizá-las, porém, para aprendermos a usar o Vim em sua forma mais otimizada. Ação: digite ’ h ’ , ’ j ’ , ’ k ’ ou ’ l ’ para mover o cursor para a esquerda, para baixo, para cima ou para a direita, respectivamente! Além das setas, existe outra alternativa aos direcionais controlados por caracteres. Em modo Normal, podemos movimentar o cursor para frente ou para trás com as teclas de <Space> e de <BackSpace>, respectivamente, ou seja, o botão de espaço pode mover o cursor um caractere para frente assim como o botão de <BackSpace> pode movê-lo um para trás. Ação: digite <Space> ou < BackSpace> para mover o cursor por um caractere para frente ou para trás, respectivamente! Caso um parâmetro numérico seja passado, por uma vez podemos mover o cursor por um número determinado de caracteres. Ação: digite um valor numérico seguido de ’ h ’ , ’ j ’ , ’ k ’, ’ l ’, <Space> ou <BackSpace> para 50
  • 52.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF movimentar o cursor por um número determinado de objetos! Com a tecla <Enter>, ou <Return>, fazemos quase o mesmo que digitando ’ j ’, ou seja, movemos o cursor para a linha de baixo, inclusive sendo possível passar parâmetro numérico com validade de um movimento, voltando depois ao padrão de um. A diferença é que <Enter> levará o cursor para o início da linha inferior. Objeto: Texto Se precisarmos, e isso acontece com certa freqüência, existem comandos que podem mover o cursor para as extremidades do texto, seu final e seu começo. Com ’ G ’ podemos alcançar o início da última linha do texto a partir de qualquer lugar. Com ’ gg ’ levamos o cursor até o seu começo, o início da primeira linha. Os mesmos resultados são alcançados, porém de forma mais fácil, com os duplos colchetes: ’ [ [ ’ para o início do texto e ’ ] ] ’ para sua última linha. Opcionalmente, pode-se passar um parâmetro numérico para os comandos ’ g ’ e ’ G ’ equivalente à linha que desejamos acessar com o cursor. Podemos também, caso saibamos nos orientar, levar o cursor à uma determinada ou posição do texto referenciada por um valor em percentagem. Podemos digitar, por exemplo, ’ 50% ’ para levar o cursor ao meio do texto. Outra ferramenta curiosa é a de mover o cursor para um determinado caractere do texto referenciado pelo número de bytes que o antecedem. Em outras palavras, se estivermos trabalhando com caracteres ASCII, podemos mover o cursor para o enésimo caractere do texto. O comando é ’ n go ’. Ação: digite ’ gg ’ ou ’ [[ ’ para mover o cursor de onde ele estiver até o início da primeira linha do texto! Ação: digite ’ G ’ ou ’ ]] ’ para mover o cursor de onde ele estiver até o início da última linha do texto! Ação: digite n % para mover o cursor à linha correspondente à posição do texto apontada em percentagem! Ação: digite n go para mover o cursor ao enésimo byte (em geral, enésimo caractere) do texto! 11.2 Parte 2 / 7 | tela e página Objeto: Tela De forma semelhante aos comandos de reposição da tela em uma determinada posição do texto, considerando as três posições visíveis do texto na tela, topo, centro e base, existem três comandos de movimentação do cursor que nos permitem movê-lo para as mesmas três posi- ções da tela. Se quisermos mover o cursor para a primeira linha visível na tela, digitamos ’ H ’ (provavelmente High em inglês); se quisermos movê-lo para a última linha visível na tela, digita- mos ’ L ’ (provavelmente Low em inglês); e se quisermos levá-lo ao meio da tela digitamos ’ M ’ (provavelmente Middle ou Medium em inglês). Ação: digite ’ H ’ para mover o cursor para a primeira linha visível na tela! Ação: digite ’ L ’ para mover o cursor para a última linha visível na tela! Ação: digite ’ M ’ para mover o cursor para a linha que está no centro da tela! Objeto: Página Podemos também movimentar o cursor uma página inteira. Como foi dito, no entanto, quando movemos o texto por sua tela o cursor sempre se mantém a nossa mostra, e se movemos o texto uma página, o cursor também deve se mover uma página. Ou seja, na prática existe somente um comando tanto para mover o texto uma página quanto para mover o cursor por uma página. Logo, o comando de descer o cursor por uma página do texto é o mesmo que o de mover a tela por uma página para baixo. De forma semelhante, o comando de subir o cursor por uma página do texto é o mesmo que o de mover a tela por uma página para cima. Experimentem apontar 51
  • 53.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF verticalmente com os direcionais enquanto seguram a tecla <Shift>, seja com as letras ou com as setas, e chegarão aos mesmos resultados. Como vimos, podemos informar um valor numérico antes do comando para determinar quantas páginas o cursor andará. Ação: aperte ’<Ctrl>+f’ ou <Shift>+j para avançar o cursor uma página abaixo! Ação: aperte ’<Ctrl>+b’ ou <Shift>+k para recuar o cursor uma página a cima! Ação: informe o número de páginas seguido do comando de avançar ou recuar o cursor pelas páginas para andar um número escolhido de páginas! 11.3 Parte 3 / 7 | linha, parênteses e chaves Objeto: Linha Como deveria ser esperado, existem também dois comandos que nos permitem avançar um número determinado de linhas ou para cima ou para baixo. Se não informamos nenhum valor númerico, o Vim assume que queremos avançar ou recuar o cursor meia página de texto. Para mover o cursor meia página para cima digitamos ’<Ctrl>+u’, sendo ’u’ up em inglês. Para mover o cursor meia página para baixo digitamos ’<Ctrl>+d’, sendo ’d’ down em inglês. Para mover o cursor um número desejado de linhas digitamos o valor numérico seguido do comando apropri- ado: ’n_<Ctrl>+d’, para descer e ’n_<Ctrl>+u’, para subir. Depois que um número de linhas foi determinado toda vez que movemos o cursor com um desses dois comandos ele é movido pelo mesmo número de linhas até que outro valor seja atribuído. Ação: aperte ’<Ctrl>+u’ para subir o cursor meia página no texto! Ação: aperte ’<Ctrl>+d’ para descer o cursor meia página no texto! Ação: digite o número de linhas com o qual deseja mover o cursor seguido do comando de subir ou descer o cursor por linhas para movê-lo por um número específico de linhas! Obviamente existem ferramentas para movermos o cursor diretamente para a linha desejada. Além dos comandos ’ gg ’ e ’ G ’ após o valor numérico da linha, existe um outro comando de fácil execução, sendo este provavelmente o mais conveniente, que tem como objeivo mover o cursor para uma linha determinada. Tente digitar ’ : n ’ , um comando de linha, ou seja, seguido de <Enter>, para acessar a linha apontada por ’ n ’. Ação: digite n gg ou n G para acessar uma linha específica do texto! Ação: digite : n <Enter> para acessar uma linha específica do texto! Objetos: Parênteses e chaves O Vim possui um recurso muito precioso aos programadores. Ele é capaz de procurar por parênteses e chaves que estejam sem par, ou seja, incompletos. Muitas vezes é importante para averiguar se sobrou um símbolo qualquer naquelas funções ou em cálculos aritméticos. Para tanto devemos nos posicionar no local do símbolo que suspeitamos faltar, e caso o outro símbolo esteja à frente no texto, digitamos ’ ] ) ’, para parênteses, ou ’ ] } ’ para chaves. Caso o símbolo esteja a cima, digite ’ [ ( ’ ou ’ [ { ’. Observe que se o parâmetro passado for a repetição do colchete ’ ] ] ’ ou ’ [ [ ’ levamos o cursor para o final ou para o começo do texto, respectivamente. Ação: digite ] ) ou ] } para procurar por um parênteses ou por uma chave que fecham sem par que estejam à frente do cursor no texto! Ação: digite [ ( ou [ para procurar por um parênteses ou por uma chave que abrem sem par que estejam à cima do cursor no texto! 52
  • 54.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF 11.4 Parte 4 / 7 | caractere com linha Objeto combinado: Caractere com linha Até então vimos comandos que movem o cursor com referência aos objetos caractere, linha e página. Agora vamos conhecer comandos de movimentação do cursor que levam em conside- ração outros objetos como palavras, sentenças, parágrafos e combinações entre objetos, como primeiro caractere da linha seguinte e começo e final de linha, por exemplo. Podemos mover o cursor para o primeiro caractere da linha atual com o comando simples ’ ˆ’. Porém, como usamos em geral teclados configurados segundo a ABNT2, temos de digitar ’ ˆ’ duas vezes para que seja efetuada a ação. O comando ’ _ ’ faz a mesma coisa, desconsiderando os espaços em branco. Logicamente, podemos também mover o cursor para o final da linha atual, simplesmente digitando ’ $ ’. Este comando permite que informemos que linha após a corrente cujo final o cursor estará. Como quando nenhum valor é informado o cursor vai ao final da linha atual, então significa que a linha atual corresponde ao valor padrão 1. Logo, se queremos mover o cursor para o final da linha seguinte temos de digitar ’ 2$ ’. Ação: digite ’ ˆ’ para mover o cursor para o primeiro caractere da linha corrente ou ’ _ ’ para a mesma ação desconsiderando os espaços em branco! Ação: digite ’ $ ’ para mover o cursor para o final da linha corrente ou informe um valor a contar da linha atual para inserir o cursor no final de outra linha! Podemos mover o cursor para o primeiro caractere de linha seguinte com o comando ’<Ctrl>+m’ como se digitássemos ’ j ’, só que movendo-o para o início da linha. Podemos fazer o mesmo desconsiderando os espaços em branco com ’ + ’. Se quisermos movê-lo para o primeiro carac- tere da linha anterior, ao invés da seguinte, desconsiderando os espaços em branco, digitamos ’ - ’. Ação: digite ’<Ctrl>+m’ para mover o cursor para o primeiro caractere da linha seguinte ou ’ + ’ para a mesma ação desconsiderando os espaços em branco! Ação: digite ’ - ’ para mover o cursor para o primeiro caractere da linha anterior sem considerar os espaços em branco! 11.5 Parte 5 / 7 | coluna com linha Objeto combinado: Coluna com linha O ’ 0 ’ move o cursor para a primeira coluna da linha atual, que tipicamente corresponde ao primeiro caractere, exceto nos casos de haver espaços na linha antes do primeiro caractere. Podemos querer mover o cursor para uma coluna específica da linha atual e não para o início ou para o final, neste caso podemos especificar um valor correspondente à coluna da linha corrente com o comando ’ n | ’. Como o valor padrão é sempre 1, se digitamos pipe, ’ | ’, sem parâmetro numérico movemos o cursor para a coluna 1 da linha, ou seja, para a primeira coluna. Logo, o comando simples ’ | ’ equivale ao comando simples ’ 0 ’. Ação: digite ’ n | ’ para mover o cursor para uma coluna específica da linha atual e ’ | ’ ou ’ 0 ’ simples para mover o cursor para a primeira coluna da linha corrente! 11.6 Parte 6 / 7 | caractere com sentença e parágrafo Objeto combinado: Caractere com sentença e parágrafo 53
  • 55.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Se quisermos inserir o cursor no início da sentença atual, digitamos ’ ( ’, se quisermos que ele seja inserido no final, digitamos ’ ) ’. Para reconhecer uma sentença o Vim procura por padrões, que nem sempre correspondem ao que esperamos. Possíveis exemplos seriam a presença de um ponto seguido de um espaço ’Texto. ’, de uma tabulação e de uma linha em branco. Podemos também mover o cursor por parágrafos com ’ { ’ para o parágrafo anterior e ’ } ’ para o parágrafo seguinte. O Vim identifica parágrafos basicamente pela a presença de linhas em branco, ou seja, através de um padrão que não nos satisfará sempre. Note que tanto para os comandos de movimentação de cursor pelas sentenças quanto para os de movimentação por parágrafos podemos informar o número de objetos que queremos contar para a movimentação do cursor. Ou seja, podemos montar comandos como ’n(’ , ’n)’ , ’n{’ e ’n}’ . Ação: digite ’ ( ’ para inserir o cursor no início da sentença corrente! Ação: digite ’ ) ’ para inserir o cursor no final da sentença corrente! Ação: digite ’ { ’ para inserir o cursor no parágrafo anterior! Ação: digite ’ } ’ para inserir o cursor no parágrafo seguinte! Ação: informe o número de objetos sentença ou parágrafo seguido do comando simples para mover o cursor por mais de um desses objetos! 11.7 Parte 7 / 7 | palavra Objetos: Palavra e caractere com palavra Um dos objetos mais úteis pelos quais podemos movimentar o cursor é a palavra. O Vim é capaz de reconhecer início e final de palavras considerando ou não as pontuações. A seguir vamos aprender a mover o cursor pelas palavras. Para movê-lo uma palavra a frente posicionando o cursor no final da palavra digite ’ E ’, sendo ’ E ’ End em inglês. Caso o cursor esteja no meio de uma palavra ele vai parar no final desta. O mesmo vale para ’ B ’, Begin em inglês, mas este move o cursor para o início da palavra atual e depois recua palavra por palavra. Estes comandos não levam em consideração as pontuações das palavras, ou seja, ignora saltando-as. Se quisermos realizar os mesmos comandos mas levando a pontuação a sério, digitamos os mesmos comandos simples em caixa baixa, com os caracteres minúsculos: ’e’ e ’b’. Se preferirmos, podemos mover o cursor para o primeiro caractere da palavra seguinte com ’ W ’ para não respeitar a pontuação ou com ’ w ’ para respeitá-la. Os mesmos comportamentos que ’ w ’ e ’ b ’ podem ser provocados com ’ <Shift>+l ’ e ’ <Shift>+h ’ respectivamente, assim como com ’ <Ctrl>+l ’ e com ’ <Ctrl>+h ’, como acontece em vários programas e editores. Também podemos informar um valor numérico para determinar quantas palavras queremos avançar ou recuar com todos esses comandos. Ação: digite ’ E ’ ou ’ e ’ (considera pontuação) para avançar o cursor para o final da palavra seguinte! Ação: digite ’ B ’ ou ’ b ’ (considera pontuação) para recuar o cursor para o início da palavra anterior! Ação: digite ’ W ’ ou ’ w ’ (considera pontuação) para avançar o cursor para o primeiro carac- tere da palavra seguinte! Ação: informe o número de palavras que deseja avançar ou recuar seguido dos comandos ’ E ’ ou ’ B ’! Na verdade, existem outras maneiras que aprenderemos de mudar a posição do cursor, mas estas fazem parte das diferentes formas de entrar em modo de inserção. Por esse motivo, são ações que implicam em mais que a movimentação do cursor, e que por isso não satisfaria aqueles 54
  • 56.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF que querem mover o cursor em modo Normal. Veremos estas operações em breve na lição "Transitando entre os modos". 55
  • 57.
    Capítulo 12 Lição 5- Acesso ao texto: Buscando ocorrências (Início da semana 2) 12.1 Parte 1 / 7 | buscando (na linha) Os comandos de busca e de substituição são possivelmente os mais difíceis e elaborados do Vim. Suas combinações sintáticas são extensas e com eles encontramos todo tipo de strings e pedaços de texto. A versatilidade, assim como a complexidade, devem-se ao uso que se pode fazer das expressões regulares, ou seja, dos padrões de texto que usamos para encontrar o exato trecho de texto que procuramos. Não será apresentada nesta página a utilização dos comandos de substituição, pois esta lição se destina à operacionalidade de leitura, consulta e análise no Vim, e não da edição. Naturalmente, também não especificarei todos os parâmetros ou opções pos- síveis que podemos passar às buscas, visto que existe uma infinidade deles. Aconselho que os interessados e necessitados busquem por conta própria os recursos de que precisam no manual de ajuda do Vim digitando ’ :help :/ ’. Aprenderemos aqui os comandos de busca mais básicos e importantes. Como alguns devem saber, a barra ’ / ’ é um comando de busca convencionado em silêncio entre os criadores de software para Linux. Digite ’ / ’ em um navegador, em um pro- cessador de texto ou em um gerenciador de pacotes e será possível realizar uma busca. No Vim não é diferente. Em modo Normal ao digitar ’ / ’ é iniciado um comando de busca em modo linha de comando, ou seja, sujeito às mesmas regras de operação que os comandos iniciados por ’ : ’. No Vim, o mesmo comando de busca pode ser realizado no sentido inverso, ou seja, a partir do cursor e para cima, digitando ’ ? ’ no lugar de ’ / ’. Porém, fora os comandos de busca no texto que suportam a sintaxe para buscarmos todo tipo de ocorrência, serão apresentados primeiramente quatro comandos simples de busca de caracteres na linha corrente. Não somente estes quatro comandos de busca de caracteres, mas todas as buscas que são realizadas movem o cursor para a posição da ocorrência encontrada. Portanto, todos os comandos de busca poderiam ser, em algum sentido, também considerados como comandos de movimentação do cursor. Ainda que eles possam e até devam ser utilizados com essa finalidade, esta não é a função mais importante de um comando de busca. Os quatro comandos que serão apresentados agora procuram um caractere especificado na linha atual do cursor e o move até a ocorrência. O comando "f ’carac- tere’ "procura a primeira aparição do caractere à frente do cursor na linha atual. Já o comando "F ’caractere’ "faz a mesma busca atrás do cursor. Este é movimentado até o caractere encontrado. Ação: digite "f ’caractere’ "para mover o cursor até a primeira ocorrência do caractere especi- ficado encontrada após a posição atual do cursor! Ação: digite "F ’caractere’ "para mover o cursor até a primeira ocorrência do caractere espe- 56
  • 58.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF cificado encontrada antes da posição atual do cursor! 12.2 Parte 2 / 7 | buscando (na linha) Os próximos dois comandos buscam caracteres somente após o caractere do cursor na linha atual. Eles se diferenciam, no entanto, por moverem o cursor para antes ou depois do caractere encontrado. "t ’caractere’ "move o cursor até a posição anterior do caractere especificado encon- trado na linha atual à frente do cursor. "T ’caractere’ "faz o mesmo, mas posiciona o cursor uma coluna após o caractere encontrado. Ação: digite "t ’caractere’ "para mover o cursor até a posição imediatamente anterior à primeira ocorrência do caractere especificado encontrada após a posição atual do cursor! Ação: digite "T ’caractere’ "para mover o cursor até a posição imediatamente posterior à primeira ocorrência do caractere especificado encontrada após a posição atual do cursor! Como podemos supor, é possível informar um valor numérico antes de todas estas buscas para encontrar a enésima ocorrência do caractere especificado. Outros dois comandos que con- vém explicar são os de repetição de buscas. ’ ; ’, após a realização de uma busca com ’ f ’, ’ F ’, ’ t ’ ou ’ T ’ realiza a última busca novamente e ’ , ’ da mesma forma a repete, mas no sentido inverso. Ação: informe um valor numérico antes de um dos comandos de busca de caracteres na linha corrente para encontrar a sua enésima aparição! Ação: digite ’ ; ’ para realizar a última busca novamente e sua movimentação de cursor ao próximo caractere que estiver à frente do cursor; digite ’ , ’ para fazer a mesma busca na linha atual para trás do cursor! 12.3 Parte 3 / 7 | buscando (no texto) Busca simples As buscas de ocorrências no texto utilizam uma pequena sintaxe necessária para que in- formemos de forma razoável todas as especificações das expressões regulares que queremos encontrar. Os comandos básicos começam todos com ’ / ’ e a mesma busca pode ser realizada no sentido inverso, ou seja, para cima, iniciando-o com ’ ? ’. Assim como as buscas de caracteres na linha atual, podemos repetir a última busca com ’ n ’ e a mesma busca no sentido inverso com ’ N ’. Apesar dessa diferenciação, se sabemos que existe somente uma ocorrência no texto do padrão que procuramos, não vai haver diferença entre procurá-lo com ’ / ’ ou com ’ ? ’, pois o Vim considera para as buscas o início do texto como uma continuação do seu final em uma busca com ’ / ’ e o final do texto como uma continuação do início em uma busca com ’ ? ’. Ou seja, o Vim dá uma volta no texto quando procura por uma ou mais ocorrências até ter vistoriado todo o texto. Ele avisa quando encontra a primeira aparição após ter dado a volta, que atingiu o topo ou a base, e prossegue a busca na outra ponta: "search hit BOTTOM, continuing at TOP", no caso do aviso de que foi realizada uma volta para cima (logo, em uma busca com ’ / ’); e "search hit TOP, continuing at BOTTOM", quando uma volta para baixo foi feita durante a busca (neste caso uma busca com ’ ? ’). Como é razoável pensar, se buscamos algo a partir do meio do texto, ou seja, com o cursor no meio do texto, seja para cima ou para baixo, o Vim dará uma volta até ler todo o texto em sua procura. Pelo mesmo motivo, se iniciamos uma busca para baixo ’ / ’ com o cursor posicionado no primeiro caractere do texto, ou na primeira coluna da primeira linha do arquivo, o Vim certamente não dará volta alguma, encontrando ou não uma aparição da objeto 57
  • 59.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF de busca. As buscas, em princípio, são case sensitive, ou melhor, são sensíveis ao tipo de ’caixa’ dos caracteres, se são caixa baixa ou caixa alta. Logo, se procurarmos a palavra ’ocorrência’, a busca não encontra a palavra "Ocorrência"ou mesmo "ocoRRência". Por outro lado, a busca simples reconhece strings que sejam, ao nossos olhos, somente parte de outra. Logo, se bus- carmos "ência", encontramos o trecho "ência"de "ocorrência"(assim como em "Ocorrência"e em "ocoRRência"). Essa característica da busca é muito natural, visto que os espaços e outras uni- dades invisíveis que identificamos entre as palavras são igualmente caracteres do ponto de vista do editor. Esta é, aliás, a mesma característica que nos permite procurar as ocorrências de uma letra dentro das palvras de uma linha, por exemplo. O comando de busca de string mais simples possível tem a forma ’ /<texto>’. Experimente. Ação: digite ’/<texto>’ para encontrar a primeira ocorrência da string "texto"na linha após o cursor! 12.4 Parte 4 / 7 | buscando (no texto) Busca completa Introdução às expressões regulares A princípio, o sistema de busca simples satisfaz aqueles que procuram uma string em um texto redigido. Na verdade, em geral os processadores de texto e até os editores oferecem somente ferramentas de busca padrão, visto terem em mente usuários que editam e consultam textos como redações e livros. Naturalmente as ferramentas do Vim são altamente capazes de atender aquelas pessoas que pretendem escrever também cartas, artigos e etc. O Vim, no entanto, é um editor especialmente desenhado para a edição de códigos, de textos técnicos e de arquivos de configuração. Nestes arquivos só procurar por uma expressão pode ser obviamente inútil, visto que muitas vezes existem palavras e strings que se repetem, como, por exemplo, em valores de colunas. Nestes casos não é suficiente buscar por uma ocorrência mesmo com a definição de valores numéricos para a busca. Precisamos, muitas vezes, procurar por uma mesma expressão repetida, mas que é cercada por características que a distingüe, como sua posição na linha e os tipos, tamanhos e quantidade de caracteres que a antecedem ou que a sucedem, por exemplo. Ou outras muitas vezes precisamos visualizar todas as expressão que não compartilham nenhum caractere idêntico, mas somente caracteres que possuam alguma espécie de familiaridade que definimos. Este uso, podemos dizer, é uma terceira função de acesso ao texto de que podemos usufruir com os recursos da ação de busca. O primeiro uso possível de uma busca é a simples movimentação do cursor. Podemos fazer uma busca não para "descobrir"uma ocorrência, mas simplesmente para movermos o cursor rapidamente para ela, como é usualmente o uso de bus- cas em linha. O segundo uso que podemos dar à busca é a típica procura por uma determinada aparição de expressão, caractere, frase ou string perdida. Normalmente é um uso precioso no caso de precisarmos encontrar uma ou mais ocorrências em um texto muito grande ou mesmo ocorrências complexas em um texto confuso ou de leitura difícil. A terceira utilidade que podemos dar à ferramenta de busca, considerando que ela seja suficientemente elaborada, é a procura por e/ou a seleção (colorir, marcar) de uma ou de mais expressões específicas entre as várias que muitas vezes são até obviamente visíveis, que possuam características singulares que as dife- renciam. Este é o uso que fazemos da busca quando queremos selecionar todas as palavras da primeira coluna de uma tabela e ignorar todas as palavras de todas as outras colunas por exem- plo, não importando os caracteres das expressões elas mesmas. Também a usamos quando precisamos de encontrar entre várias frases idênticas, as únicas que precedem um ponto final seguido de uma letra maiúscula qualquer - observe que se fosse uma letra maiúscula específica, 58
  • 60.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF seria possível incluí-la na string de busca! Todos esses recursos que completam a ferramenta de busca do Vim são realizados através da inclusão das chamadas expressões regulares no comando de busca. Porém se vamos incluir caracteres dentro do comando de busca que não de- verão ser interpretados como sendo literais, mas sim como de controle, certamente teremos de respeitar uma sintaxe que permite o Vim entender o comando. Os comandos de busca possuem uma sintaxe não somente elaborada, mas especial se comparada à dos outros comandos do Vim em geral. Além do verbo de busca, do objeto procurado e do seu valor numérico, existe um outro parâmetro que determina a realização da ação de busca. O Vim precisa saber em que região do texto a busca será realizada. Em uma busca precisamos dizer onde pretendemos procurar a ocorrência. Esta região pode ser especificada de diversas maneiras inteligentes, mas caso ne- nhuma região seja informada, assume-se por padrão que se procura o objeto da busca na linha em que o cursor se encontra atualmente. Como informá-lo sobre a região da busca? Devemos especificar um trecho do texto apontando para objetos que marcam seu início e seu fim. Ou seja, selecionar a região apontando os seus objetos limites. Este é o formato típico do parâmetro região dos comandos de busca, mas podemos também informar um parâmetro simples, com apenas um valor, para apontar a regiões descritíveis com um só objeto em casos especiais como no caso do objeto ser o texto todo, representado pelo caractere ’ Este parâmetro de região de texto somente se mostra necessário nos usos da busca aliados à ferramenta de substituição de ocorrências, que veremos quando estudarmos a lição de texto, na segunda parte do curso. A sintaxe dessa ferramenta de substituição de texto respeita a sintaxe de busca simples e completa, sendo aquela somente um apêndice a esta. Deve-se, portanto, atentar ao máximo à sintaxe das buscas, que provavelmente é uma das ferramentas mais difíceis do Vim. 12.5 Parte 5 / 7 | buscando (no texto) Como foi dito, certamente vai haver caracteres que não serão interpretados literalmente - me- tacaracteres - se quisermos especificar características gerais a partir de dentro do comando de busca. Esses caracteres de controle podem especificar uma busca por ocorrências de expres- sões que estejam no início da linha ou no final, expressões com caracteres únicos e quaisquer indeterminados, expressões ou parte de expressões que estejam especificamente no início ou no final de outras palavras, ou até strings cujos caracteres sejam quaisquer dentro de um con- junto de caracteres de determinado tipo. Existem ferramentas também para o armazenamento dos padrões encontrados em buffers e ferramentas para a repetição da última especificação de expressão regular em uma nova busca. Provavelmente a função mais básica de todas as expres- sões regulares seja a representação de um caractere qualquer. Como o asterisco em sistemas Unix e sistemas baseados no DOS ( como o FreeDOS) o símbolo ’ . ’ representa a aparição de um caractere único qualquer, simples assim. Um comando de busca completo que utilize ’ . ’ em uma sintaxe simples tem o formato "/(s).(s) ". Foi escrito assim pois o símbolo ’ . ’ pode ou não aparecer junto de uma string, o que foi indicado com os parênteses, que indicam um uso optativo. Façam seus testes! Ação: digitem /(c).(c) para buscar por uma ocorrência qualquer de um único caractere em uma determinada posição da string dada! Entretanto, construir um comando do tipo "/. "resulta na busca por qualquer caractere possí- vel, ou seja, encontraríamos todos os caracteres e o cursor andaria, em um texto normal, pratica- mente casa por casa. Vale notar que os caracteres invisíveis ou fantasmas, espaços, tabulações, retornos de linha e outros não são possibilidades do símbolo ’ . ’, o que pode tornar o comando citado acima útil no caso de querermos manipular ou consultar um texto com raros caracteres 59
  • 61.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF vísiveis distribuídos em um vazio amplo e aleatório de caracteres fantasmas. Imagine buscar a olho nu todas as ocorrências de "x"que se siga a uma string qualquer (que neste caso são sem- pre valores binários) em um arquivo texto em proporções gigantescas de dezenas ou centenas de linhas como o do exemplo abaixo: _________________________ x 1110zy x e x x 2sd 1 x web ge 01100 p 5y x 01010 001x 011 x 3 73 x x 11 x 10101 2f x 1010x :%s/M$/#2&!%@arg/g 0101 010 0001 e e9 x x x 1011100 x 6.4vim 0111 x 10101x 2e1001x 10100011 A2F0 x x x _________________________ Seria possível achar aqui o que precisamos com um padrão de busca que utilize o símbolo ’ . ’ com o comando "/.x ". Porém essa é uma de algumas possíveis soluções ao nosso problema. Nosso senso e capacidade de solução se aperfeiçoará na medida em que aprendermos a montar mais expressões regulares. Mas e se eu quiser buscar as ocorrências do ponto final? O Vim procurará por qualquer ca- ractere? Como o símbolo ’ . ’ é por padrão interpretado como um metacaractere, caso queiramos procurar pelo caractere ponto ele mesmo devemos inserir o símbolo que indica literalidade ’’ an- tes do nosso metacaractere a ser interpretado literalmente. Ou seja, se quisermos procurar pela string "fim."devemos digitar "/fi", pois se digitarmos "/fim."vamos encontrar além da string que procurávamos expressões como "fim!"ou "fim?",o seja , "fim"com qualquer caractere em seguida. Alternativamente a construir uma busca para cada padrão que procuramos, o que daria bas- tante trabalho se precisarmos fazer de forma intercalada e mais de uma vez em buscas com- plexas, podemos construir um comando de busca duplo. Nele informamos mais de um padrão que queremos encontrar, e buscaremos as aparições de cada expressão indicada, ou seja, o comando encontrará na ordem do texto cada ocorrência de cada padrão indicado. O símbolo responsável por essa estrutura é o pipe: ’ | ’. Como queremos que seja interpretado como um meta-caractere e por padrão não era para o ser, devemos antecedê-lo com a barra invertida, ou seja, acompanhá-lo desta forma ’|’. Logo, um comando desses teria o formato "/ s1 | s2 ". Ou seja, procure pela string um e pela string dois. Se quisermos procurar por mais de dois padrões simplesmente concatenamos as expressões com o símbolo ’ | ’, como em "/ s1 | s2 | s3 | s4 ". Ação: digite / s1 | s2 | s3 | s4 para buscar as ocorrências de todas as strings informadas! 12.6 Parte 6 / 7 | buscando (no texto) Observem o conteúdo de um texto como este: txt txt txt txt txt txt txt txt txt txt txt txt txt txt txt txt Muitas vezes existem strings repetidas que impedem que encontremos e selecionemos o que precisamos com os recursos de uma busca simples. Pode ser o caso de precisarmos, por exemplo, de selecionar especificamente as strings repetidas que finalizam as linhas, o que na tabela equivale a todas as quatro últimas expressãos "txt": txt txt txt txt txt txt txt txt txt txt txt txt txt txt txt txt Podemos precisar também, por exemplo, encontrar em um texto somente as letras maiúsculas que iniciem linhas novas, ou exclusivamente pontos finais que as finalizem. Para satisfazer este tipo de necessidade utilizamos dois símbolos que indicam a regularidade de iniciar ou de terminar linhas procurada nas expressões. Inserir ’ ˆ’ imediatamente antes da string, ou seja, no início do comando, indica ao Vim uma busca por uma expressão que deve estar no início de uma ou de mais linhas; por outro lado, se digitarmos imediatamente após a string procurada o símbolo ’ 60
  • 62.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF $ ’, encontramos somente as ocorrências da string estipulada que estejam no final das linhas. Voltando ao nosso exemplo, o comando "/txt$ "resolve o nosso primeiro problema, das palavras da última coluna, enquanto "/ˆtxt "resolveria o problema de termos de selecionar exclusivamente as palavras da primeira coluna. Façam seus testes! Ação: digitem /ˆs para procurar as ocorrências da string ’ s ’ que estejam exatamente em inícios de linha! Ação: digitem /s$ para procurar as ocorrências da string ’ s ’ que estejam exatamente em finais de linha! Como podemos imaginar, se quisermos buscar os próprios símbolos literais ’ ˆ’ ou ’ $ ’ basta digitarmos "ˆ" ou "$ ". No entanto, note que estes são símbolos só são interpretados como metaca- racteres se estiverem em posições em que eles fariam sentido como metacaracteres! Ou seja, se buscamos pela string "R$ 1,00 ", não precisamos incluir a barra invertida no comando de busca. Mas se procuramos exclusivamente as strings "M$ "na linha "M$? Eu não apoio a M$ ", temos de informar que o cifrão deve ser lido literalmente, com "/M$ ", caso contrário a busca encontrará não apenas o último "M$ ", mas assim como o final de outras linhas que terminem com "M ". E se qui- séssemos encontrar somente a última aparição de "M$ "na linha exemplificada? Agora teríamos que buscar assim: "/M$$ ". E, por fim, para buscar somente a primeira aparição, escreveríamos "/ ˆM $ ", a não ser caso terminemos o comando com outro caractere literal, como seria em "/R$ 1,00", que se buscado no início de linha seria "/ ˆR$ 1,00"e, no final, "/R$ 1,00$". As mesmas regras valem para o símbolo ’ ˆ’, mas elas se aplicam para o início do comando construído. Também pode ser útil buscar somente as ocorrências de um determinado padrão que iniciem ou terminem palavras, em oposição a linhas. Ou seja, podemos buscar somente as aparições da letra ’ o ’ que finalizem as palavras. Neste caso o cursor marcaria somente letras ’ o ’ como em "subversão ", "anarquismo "e a segunda aparição da letra em "outro ". Para encontrar padrões no início de palavras usamos o metacaractere ’ < ’, e para encontrá-los no final usamos o ’ > ’. Como estes não são símbolos metacaracteres por padrão, devemos informar ao Vim inserindo a barra invertida ’ ’ antes deles. Logo, um comando de busca poderia ser "/ < 123 ", para encontrar a string ’ 123 ’ somente nas suas aparições no início de palavras, que poderiam ser, por exemplo, como ’ 1234567890 ’. Não encontraríamos o trecho ’ 123 ’ em uma palavra como ’ 0123456789 ’, por exemplo. Para encontrar somente os últimos caracteres de uma palavra que sejam ’ 789 ’, digitaríamos o comando de busca "/ 123 > ". Com algum raciocínio vemos que se pode usar esta ferramenta para encontrar um padrão em suas ocorrências que sempre formem uma palavra separada. Podemos querer encontrar somente as strings ’ ana ’, e não ’ analógico ’ ou mesmo ’ Poliana ’. Para tanto, podemos escrever "/ < ana > ". Como podemos imaginar, para procurar por qualquer expressão que contenha os caracteres ’ < ’ e/ou ’ > ’ basta incluí-los nas buscas sem qualquer barra, como na busca "/<Esc> ", que encontrará todas as aparicões de «Esc> "em quaisquer posições de linha e de palavra, sendo uma palavra por si só ou não! Ação: digite / < s para encontrar a string em suas ocorrências que iniciem uma palavra! Ação: digite / s > para encontrar a string em suas ocorrências que finalizem uma palavra! Ação: digite / < s > para encontrar a string em suas ocorrências que sejam uma palavra! 12.7 Parte 7 / 7 | buscando (no texto) Aprenderemos agora um conceito muito importante sobre expressões regulares. Ele será chamado de átomo. Existem alguns símbolos que podem ser incluídos em comandos de busca que só se aplicam e fazem sentido se seguirem um átomo. Átomo é a designação de um ou mais caracteres que ainda não tenham sido determinados. O átomo leva esse nome pois é uma 61
  • 63.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF estrutura que é tratada por outros símbolos como sendo uma unidade de busca. Tipicamente, designamos um átomo de busca indicando os possíveis caracteres dentro de colchetes como no comando "/ [ c c c c... c ] ". Um comando com esse formato buscará quaisquer caracteres que estão entre os listados. Podemos também buscar quaisquer caracteres que não estejam entre os listados com o símbolo ’ ˆ’. Repare com atenção que este é o mesmo símbolo que, do lado de fora dos colchetes, se colocado no início do comando, significa a busca pela expressão dada nos casos em que estejam no início das linhas. Este símbolo se opõem ao ’ $ ’, quando fora dos colchetes. Infelizmente, o acento circunflexo quando dentro dos colchetes significam a negação das possibilidades indicadas no átomo. Um comando do formato "/ [ ˆc c c c... c ] "buscará no texto quaisquer caracteres que sejam diferentes das possibilidades indicadas no átomo de busca. Para ilustrar a confusão um comando do tipo "/ ˆ[ ˆc c c c... c ] "encontrará quaisquer caracteres que não são possibilidades da lista e que estejam no início de uma ou mais linhas. Ação: digite / [ c c ] para buscar as ocorrências de todos os caracteres listados entre os colchetes! Açãos: digite / [ ˆc c ] para buscar as ocorrências de todos os caracteres que não estão listados entre os colchetes! Para evitar que tenhamos de digitar muitos caracteres possíveis que componham um átomo podemos listá-los utilizando o símbolo hífen, ’ - ’. Ele indica todos os caracteres que estão conti- dos em um escopo da ordem, por padrão ASCII, de caracteres. Por exemplo, a construção "[ a - z ] "inclui nas possibilidades de busca todas as letras minúsculas do alfabeto romano, "[ 1 - 5 ] "todos os cinco números, 1, 2, 3, 4 e 5. Um comando de busca que pretende encontrar todas aparições dos números 1, 2 ou 3 pode ser construído assim: "/ [1 - 3] ". Façam seus experimentos! Ação: digite / [ c - c ] para buscar as ocorrências de todos os caracteres entre os colchetes que estão listados implicitamente na ordem de caracteres do escopo indicado pelo símbolo - ! Para elaborar nossa expressão regular, temos a possibilidade de fazer algumas referências aos átomos que construímos. Podemos buscar não somente pelas aparições das possibilida- des de um átomo, mas inclusive buscar por nenhuma ou mais aparições consecutivas de cada possibilidade, ou mesmo buscar por ao menos uma aparição ou mais de um dos caracteres lis- tados. Determinamos a procura de uma ou mais ocorrências inserindo o símbolo ’ + ’ após o átomo formado. Um comando assim teria o formato "/ [ c ] + ". Em geral, para a maioria das finalidades, a diferença entre fazer uma busca por cada aparição singular de um caractere e fazer uma busca por uma ou mais aparições desse caractere é que ao percorrermos pelas ocorrências encontradas com os comandos ’ n ’ ou ’ N ’ o Vim saltará as aparições consecutivas do caractere buscado. Determinamos a busca por nenhuma ou mais aparições das possibilidades informadas inserindo o símbolo ’ * ’ após o átomo de busca. Um comando desse teria a forma "/ [ c ] * ". Ora, mas as buscas em que uso o asterisco encontram todos os caracteres do texto! Ela não serve pra nada! Mas observe que caso ela encontre aparições consecutivas de um dos caracteres que estava a procurar seu comportamento será como o da busca por uma ou mais ocorrências: saltará o conjunto de ocorrências seguidas. Imagine um texto em que a maioria dos caracteres sejam repetidos, e que buscamos justamente pelas diferenças! Além do mais, caso formemos no comando de busca uma expressão regular complexa, ou seja, que forme um padrão muito exi- gente, a presença do asterisco será de uma aplicação eventual, que só será testada caso outros requisitos da expressão também sejam satisfeitos. Ação: digite / [ c ] + para buscar por uma ou mais aparições das possibilidades entre colche- tes! Ação: digite / [ c ] * para buscar por nenhuma das possibilidades entre colchetes! Apesar de ter apresentado cada recurso das expressões regulares do Vim separadamente, os comandos de busca pelo texto serão em geral formados com combinações de todas essas 62
  • 64.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF ferramentas. Experimente conjugá-las na construção de comandos cada vez mais específicos de busca! 63
  • 65.
    Capítulo 13 Lição 6- Transitando entre os modos 13.1 Parte 1 / 7 | Entrando em modos de inclusão Normalmente um editor de textos sempre nos dispõe um cursor para a inserção de caracteres ou nos permite inseri-los após um ou dois clics de um mouse. A verdade é que o Vim é funda- mentalmente um editor que trabalha em modo texto e a partir da linha de comando. Existe, para quem preferir, uma versão do Vim destinada ao modo gráfico, o chamado Gvim. Existe também um tipo de Vim que se pretende funcionar como um editor simplista: o Easy Vim - Evim. No Vim, no entanto, precisamos para escrever habilitar um modo de operação específico, e então nele operamos praticamente como em um editor simples até querermos gravar e sair. O Vim é assim porque se acredita que vai ser exigido muito dele. Quando falamos em "modos de inclu- são"nos referimos aos modos de inserção e de substituição, que para quase todos os fins são análogos. Já conhecemos um comando simples que nos permite entrar em modo de inserção a partir do modo Normal, o ’ i ’ de insert. Quando apertamos ’ i ’ o cursor mantém-se para inserção exatamente na posição em que estava em modo Normal, e nada mais acontece. Ou seja, esta provavelmente é a maneira mais básica de se transitar para o modo de inserção. Existem pelo menos doze outras. Vocês estão analisando e editando o texto em modo Normal e percebem que querem começar a escrever a partir do caractere que se segue imediatamente após a posição atual do cursor. Não é suficientemente simples andar uma casa para a direita com ’ l ’ e apertar ’ i ’ ? Pois é, a verdade é que podemos fazer isso com um único comando (ao invés de dois) com ’ a ’. Experimente. Ação: digite ’ a ’ para iniciar o modo de inserção com o cursor um caractere a frente da posição atual! Se quisermos começar a escrever imediatamente no final da linha corrente podemos digitar ’ A ’. Mais ou menos analogamente ’ I ’ (’ i ’ maiúsculo) inicia o modo de inserção com o cursor no início da linha corrente. Se quisermos começar a escrever no início da linha onde atualmente está o cursor digitamos ’ I ’ e já podemos escrever. Ação: digite ’ I ’ (’ i ’ maiúsculo) para iniciar o modo de inserção com o cursor no início da linha atual! Ação: digite ’ A ’ para iniciar o modo de inserção com o cursor no final da linha atual! Estes dois comandos mudam a posição do cursor ao longo da linha atual. Existem outros dois comandos que nos permitem iniciar a inserção de texto a partir de uma nova linha que pode ser criada tanto acima quanto abaixo da linha corrente. O comando ’ o ’, cria uma linha após a atual em modo de inserção. Ele é usado para quando vamos continuar o texto com um novo parágrafo ou linha, se for um script, por exemplo. Já o comando ’ O ’ abre uma nova linha entre a corrente 64
  • 66.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF e a linha imediatamente acima desta. Ação: digite ’ o ’ para iniciar o modo de inserção com o cursor em uma nova linha imediata- mente abaixo da atual! Ação: digite ’ O ’ para iniciar o modo de inserção com o cursor em uma nova linha imediata- mente acima da linha atual! Como visto em "Sintaxe dos comandos", existem dois tipos de verbos, os simples e o verbos pendentes. Existem duas duplas de comandos de controle para iniciar o modo de inserção que se distingüem em nada se não em suas categorias de verbos. As duas duplas de comandos compartilham a caraterística de recortar um objeto de texto antes de iniciar o modo de inserção. Aquela com verbos simples é ’ s ’ e ’ S ’. O comando ’ s ’ recorta o caractere sob o cursor em modo Normal e entra em modo de inserção com o cursor exatamente na mesma posição (considerando o recuo de um caractere que a linha faz), tudo com somente o dígito ’ s ’, ou seja, com somente um parâmetro aparente. Já o comando ’ S ’ recorta toda a linha corrente antes de entrar em modo de inserção, e o cursor permanece pronto para a inserir texto a partir do início da linha em branco. Teste este dois comandos para compará-los com os comandos de verbos pendentes. Ação: digite ’ s ’ para recortar o caractere sob o cursor e iniciar o modo de inserção! Ação: digite ’ S ’ para recortar toda a linha corrente e iniciar o modo de inserção no início da linha em branco! A outra dupla de comandos também recorta o texto antes de nos permitir incluir novos dados. Porém, um desses comandos espera um segundo parâmetro explícito para a determinação do objeto da ação. Esse parâmetro pode ser dado com um direcional, mas como vimos, verbos como esse comportam diversos tipos de objeto, como palavra, linha, parágrafo, texto e inclusive objetos combinados, exatamente como vimos na lição "Acessar o texto"na página "Movendo o cursor". O comando ’ c ’ espera a indicação do objeto para recortá-lo e iniciar o modo de inserção. Se apontamos horizontalmente, para as colunas, ele recorta um caractere somente. Apontando para a direita após ’ c ’, o comando se comporta exatamente como quando digitamos ’ s ’. Apontando para a esquerda o caractere anterior ao que está sob o cursor é recortado e o cursor recua uma coluna juntamente com toda a linha. Ou seja, ’ c ’ apontado para a esquerda é o mesmo que mover o cursor uma casa para a esquerda e digitar ’ s ’. Podemos também apontar verticalmente, e neste caso ’ c ’ recortará duas linhas inteiras, iniciando o modo de inserção com o cursor em uma linha em branco. O objeto também pode ser indicado digitando novamente ’ c ’, repetindo o comando simples, parâmetro que é um tipo de padrão no Vim para a execução de verbos pendentes. Já digitando ’cc’ recorta toda a linha, mas somente a linha atual, deixando o cursor no início de uma linha em branco. Como disse, é claro, podemos indicar qualquer outro objeto a ser recortado, experimentem digitar ’3wc’, por exemplo. Digitando ’ C ’, por sua vez, pode também recortar toda uma linha, mas só se o cursor estiver anteriormente posicionado no início dessa. Seu funcionamento é recortar todo o texto existente na linha a partir da atual posição do cursor, ou melhor, seu objeto é "o texto da linha após o cursor". Esse comando não é realizado com um verbo pendente, mas sim simples. É importante dizer que todos esses quatro comandos, ’ s ’, ’ S ’, ’ c ’ e ’ C ’ comportam um parâmetro numérico para contar os objetos sobre os quais agir. Como sabemos, para isso devemos inserir o valor numérico antes do restante do comando, como ’2s’ que recorta dois caracteres. Ação: digite ’ c ’ com um parâmetro de objeto para recortá-lo e iniciar o modo de inserção! Ação: digite ’ C ’ para recortar todo texto existente na linha corrente após a posição atual do cursor! Ação: indique um valor numérico e digite quaisquer dos quatro comandos anteriores para realizar um comando personalizado! Como já foi explicado o modo de substituição é normalmente entendido como um sub-modo 65
  • 67.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF derivado do modo de inserção, visto que desempenha um papel semelhante e que não possui as mesmas alternativas de inicialização. O modo de substituição, ao contrário, possui apenas uma maneira de ser iniciado a partir do modo Normal: ’ <Ctrl>+R ’, ou melhor, ’ <Ctrl>+<Shift>+r ’, onde ’ R ’ tem como origem Replace em inglês, que é substituir. Outra maneira de iniciá-lo é com o botão ’ <Insert> ’. Podemos considerar este modo como um modo independente do de inserção, uma vez que ele apresenta as mesmas relações que este com o outros modos, como veremos em tópicos futuros dessa lição. Ação: digite <Ctrl>+R para iniciar o modo de substituição! 13.2 Parte 2 / 7 | Os modos derivados Como já foi explicado, existem modos derivados resultantes de combinações entre os modos básicos. Caso estejem inseguros sobre o que são, quais são ou para que servem os modos de operação, é aconselhável que reler a seção "Modos de operação"do livro introdutório deste curso "Noções preliminares". Um exemplo de interação entre o modo Normal e o de inserção poderia ser quando o objeto da ação de um comando em modo normal é o texto que digitamos em modo de inserção. Fazemos isso passando um comando da forma "n ’ i ’ "entrando em modo de inserção no momento de passar o parâmetro de objeto. O parâmetro de verbo foi desconsiderado pois neste caso será por padrão a repetição do objeto "texto digitado". Depois da sessão em modo de inserção apertamos <Esc> e voltamos para o modo Normal e o comando é completado e executado. Esse parece de fato ser um exemplo de interação entre dois modos, mas considerado uma sessão de um modo derivado a parte ele não é. Basicamente, existem três modos derivados. Todos são combinações realizadas entre os modos inserção/substituição e um dos três modos Normal, Visual e de Seleção. Tanto o modo de inserção quanto o modo de substituição podem derivar um modo novo com cada um desses três modos básicos. Vamos considerar que existem três, pois os modos de inclusão de caracteres, ou seja, os modos de inserção e de substituição, serão tratados como duas variações de um mesmo modo, que são chamados aqui de modos de inserção/substituição ou de modos de inclusão. Dessa forma existem seis modos derivados possíveis, que são: Modo de inserção com : > Modo Normal = modo normal de inserção; > Modo visual = modo visual de inserção; > Modo de seleção = modo de seleção de inserção; Modo de substituição com: > Modo Normal = modo normal de substituição; > Modo visual = modo visual de substituição; > Modo de seleção = modo de seleção de substituição; 13.3 Parte 3 / 7 | Modo Normal de inclusão O primeiro modo derivado que veremos é o modo normal de inserção, que normalmente não é o mais utilizado. Sua utilidade pode ser ofuscada pelo uso especial que se faz em geral do modo visual de inserção/substituição. Apesar disso, o uso do modos Normal de inclusão pode virar parte constante do trabalho de edição. Os modos Normais de inclusão têm como função permitir um trânsito acessível entre os modos Normal e de inserção, e entre os modos Normal e de substituição. Sua utilidade pode acabar sendo esquecida visto ser antes uma facilitação e não uma ferramenta indispensável. Vale a pena praticar seu uso para que se torne um movimento natural de acesso e retorno automático aos dois (ou três, com o de substituição) importantes modos. Ele só pode ser iniciado de dentro dos modos de inclusão, e o comando possível é apenas esse: ’ <Ctrl>+o ’. Se de dentro do modo de inserção digitamos ’ <Ctrl>+o ’, entramos em 66
  • 68.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF modo Normal de inserção. Caso o fizermos a partir do modo de substituição entramos no modo Normal de substituição. Experimentem. Podemos notar que ao digitar ’ <Ctrl>+o ’, o nome do modo no canto inferior esquerdo irá mudar a sua apresentação, colocando-se entre parênteses e trocando suas letras para minúsculas. Estamos em modo Normal de inserção ou de substituição. E agora? Posso desenhar uma margem no meu texto? Não podemos fazer nada de especial senão passar um único comando de modo Normal. O Vim em modo Normal de inclusão espera a execução de um comando de edição e retorna ao modo de inclusão original após sua realização. Útil não é mesmo? Uma maneira prática de digitar <Esc>, um comando e novamente ’ i ’ ou ’ R ’, afinal, às vezes acontece de precisarmos fazer uma simples ação de edição para poder continuar a escrever, e pode acabar sendo perda de tempo ficar passeando lentamente entre esses modos de operação. Naturalmente, podemos apertar <Esc> para sair deste modo direto para o modo Normal completo. Podemos também retornar manualmente ao modo de inclusão digitando novamente o comando para que ele seja iniciado, como se estivéssemos mesmo em modo Normal. Pratiquem! Ação: digite <Ctrl>+o em modo de inserção ou em modo de substituição para, em modo Normal de inclusão, passar um comando de modo Normal e voltar a digitar! 13.4 Parte 4 / 7 | Modos visual e visual de inclusão Modo visual É recomendado que façamos uma nova leitura da descrição do modo visual no livro "Noções preliminares": —————– O modo visual pode ser visto como uma extensão útil do modo Nor- mal, visto que temos acesso às mesmas operações de edição. Este modo é destinado à seleção de um trecho de texto com a movimentação dos cursores, que formam como uma hachura sobre as linhas a serem selecionadas. Passamos comandos como em modo Normal para manipular o trecho marcado. Ele funciona como qualquer editor visual com suporte a mouse e inclusive podemos configurar o próprio Vim para suportar a utilização de mouse. Este modo é acessado com o caractere "v "em modo Normal. Existe um recurso do modo visual que praticamente po- deria ser considerado um modo derivado, o bloco visual, ou visual block. Ele é acessado com "Ctrl-v"a partir do modo Normal. Com ele podemos selecionar blocos quadrangulares de texto, como se ele fosse uma tabela ou um quadro de caracteres sem linha, nos permitindo selecionar, por exemplo, somente uma coluna de texto para manipulação. Semelhante a este recurso é o visual line, acessível com "Shift-v"a partir do modo Normal. —————- O modo visual é, em uma explicação simples, o modo Normal com um diferente tratamento de objetos. Enquanto em modo Normal temos de informar um objeto durante a construção do comando para realizar a ação, no modo visual o objeto informado é selecionado manualmente, e só então passamos o verbo a ser aplicado sobre ele. O modo visual é simplesmente uma ferramenta de seleção do objeto de ação para dar suporte às operações do modo Normal, tanto que são essas que funcionam em modo visual. Ele é acessado com o comando ’ v ’. Como explicado, existem duas alternativas ao modo visual simples para grifarmos nosso objeto de texto. Podemos também marcar o texto segundo o padrão de linhas no modo visual do tipo linha, com ’ V ’ a partir do modo Normal, assim como segundo o padrão de bloco no modo visual do tipo bloco, o que significa tratar o texto como um quadro, acessado com ’ <Ctrl>+v ’ a partir do modo Normal. Ação: digite ’ v ’ em modo Normal para entrar em modo visual e grifar exatamente o trecho de texto que deseja editar! 67
  • 69.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Ação: digite ’ V ’ a partir do modo Normal para entrar em modo visual do tipo linha e hachurar o trecho de texto a se editar por linhas! Ação: digite ’ <Ctrl>+v ’ a partir do modo Normal para entrar em modo visual do tipo bloco e hachurar o trecho de texto a se editar por blocos e colunas! Modo visual de inclusão O modo visual de inclusão pode ser compreendido como um tipo possível de modo Normal de inclusão. Seu princípio é o mesmo: entrando nele podemos realizar até um comando e voltar para o modo de inclusão original. Este modo é, por isso, só uma ferramenta facilitadora do trânsito entre os modos. Seu uso é bastante razoável e compreensível: a partir do modo de inclusão digitamos ’ <Ctrl>+o ’ e em seguida ’ v ’. Ao digitar ’ <Ctrl>+o ’ entramos no modo Normal de inclusão, e até aqui o caminho é o mesmo. Em seguida passamos um comando, só que ele é de controle para entrarmos em outro modo! Entramos então no modo visual de inclusão e no canto inferior esquerdo vai aparecer: – (insert) VISUAL –, ou seja, a conjunção do modo Normal de inclusão e o modo visual. Podemos também iniciar o modo visual de tipo linha ou bloco dentro do modo Normal de inclusão, se quisermos. Ação: digite ’ v ’ ou ’ V ’ ou ’ <Ctrl>+v ’ a partir do modo Normal de inclusão para acessar o modo visual de inclusão e seus tipos! 13.5 Parte 5 / 7 | Modos de seleção e seleção de inclusão Modo de seleção Relembremos da nossa introdução ao modo de seleção: —————- O modo de seleção é semelhante ao modo visual, mas ele não trabalha em cooperação com o modo Normal, ou seja, o modo de seleção não aceita comandos como o visual. Caso seja digitado qualquer caractere que possa ser imprimido entra-se em modo de inserção, ou seja, sua utilização é análoga a de um editor de texto visual simplista. Este modo é acessado através do comando "gh", de dentro do modo Normal. O comando "Ctrl-g", a partir do modo visual, é uma das outras alternativas que serão apresentadas mais tarde. Existem também os recursos de selection block e selection line no modo de seleção, ativados com "gH"e com "g_Ctrl-h"respectivamente. —————– O modo de seleção não é análogo ao modo visual, sendo uma ferramenta do modo Normal. Ele é mais como um suporte para o modo de inserção. Seu funcionamento é semelhante à operacionalidade padrão de um editor ou processador de texto gráfico qualquer com suporte a mouse. Selecionamos um trecho do texto e podemos usar nossas teclas como em modo de inserção. Se digitarmos ’ d ’ sobre o trecho selecionado substituiremos o trecho de texto por ’ d ’, se teclarmos <Delete> com um trecho selecionado o trecho de texto é removido. O modo de seleção é provavelmente um modo bastante familiar e é iniciado a partir do modo Normal com ’ gh ’. Assim como no modo visual, existem duas formas de selecionar o texto, uma é através do modo de seleção de tipo linha (com ’ g_<Ctrl>+h ’) e modo de seleção de tipo bloco (com ’ gH ’). Ação: digite ’ gh ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho selecionado! Ação: digite ’ g_<Ctrl>+h ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho selecionado linha a linha! Ação: digite ’ gH ’ a partir do modo Normal para inserir ou deletar texto sobre um trecho selecionado por bloco! Modo de seleção de inclusão 68
  • 70.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Quem entendeu o modo visual de inclusão facilmente pode deduzir como funciona o modo de seleção de inserção ou de substituição. Como o outro, pode ser entendido como um dos usos possíveis do modo Normal de inclusão, visto que é acessado a partir deste. Para entrar em modo de seleção de inclusão, primeiramente entramos no modo Normal de inclusão com ’ <Ctrl>+o ’ a partir de um dos modos de inclusão. Lá dentro então digitamos ’ gh ’ para entrar no modo de seleção. O modo Normal de seleção nos permite passar um comando antes de voltarmos a inserção de caracteres, no entanto, entre os comandos que podemos passar estão aqueles de inicialização de modos, e entre estes os que fazem diferença são os comandos para entrar em modo visual e em modo de seleção; afinal, entrar em modo de inserção ou mesmo apertar <Esc> de dentro do modo Normal de inserção só nos fará perder tempo. Pratiquem. Ação: digite ’ gh ’ ou ’ gH ’ ou ’ g_<Ctrl>+h ’ de dentro de um dos modos Normal de inclusão para entrar em modo de seleção de inserção ou de substituição! 13.6 Parte 6 / 7 | Modo ex Retomando nossa conversa sobre o modo "ex"inciado nas "Noções preliminares": ————— - O modo ex poderia ser considerado por alguns como uma variante do modo linha de comando, visto que ele é operado de maneira praticamente idêntica. A diferença está no controle que temos sobre a linha de comando. Enquanto em modo linha de comando se espera que realizemos uma operação e voltemos para o modo Normal, de certa forma podemos efetuar quantos comandos quisermos e nos manter como em linha de comando. No modo ex, portanto, não temos que continuar digitando ": "a cada comando e a tela não é atualizada listando cada operação que fazemos. Por este último motivo o modo ex é ideal para que configuremos o Vim em pleno uso com um script "on-line". Para entrar em modo ex, digitamos "Q ". Também podemos iniciá-lo com "gQ ", o que funciona de forma ligeiramente diferente. Enquanto com "Q "as linhas de comando são manipuláveis somente com os comandos padrões de inserção de linhas, ou seja, com <bs>, <del> e comandos como "Ctrl-u", "Ctrl-e", etc., o modo ex iniciado com "gQ "é editável com todos os recursos do modo linha de comando, como completar automaticamente palavras por exemplo. —————- Não há muito o que completar aqui. Para os curiosos, ex era um editor de Unix popular do qual o ed é sucessor. Como talvez tenham notado, em certo sentido o modo "ex"é como se fosse o verdadeiro modo linha de comando, do qual somente saímos se pedirmos para sair. De certa forma o modo linha de comando, frente ao modo "ex", parece uma espécie de modo Normal de linha de comando dentro do qual após realizarmos uma operação voltamos para o modo original. Podemos entender o modo "ex"como um ambiente de configuração, dentro do qual podemos passar quantos comandos de linha quisermos sem sair e sem ter sempre que digitar ’ : ’. Existem duas formas distintas de usar o modo "ex". Uma é acessada com ’ Q ’, e neste caso escrevemos o comando como se estivéssemos escrevendo uma linha de texto, com as mesmas ferramentas de edição, ou seja, os caracteres ASCII do teclado. A outra forma é inciada com ’ gQ ’, e neste caso podemos editar a linha com os recursos de edição padrão de uma linha de comando do Vim, assim como do shell. E como sair? Não saímos quando queremos, então, eu quero! Pois bem, passe o comando "vi "após o ’ : ’ padrão do modo "ex". "vi "não vem de vi, mas sim de visual, que nada tem a ver com o modo visual. Aliás, também voltamos ao modo normal digitando "visual "por inteiro. Ação: digite ’ Q ’ ou ’ gQ ’ para entrar no modo "ex"e passar diversos comandos de linha sem voltar para o modo Normal! 69
  • 71.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF 13.7 Parte 7 / 7 | As ruelas e usos dos modos Existem alguns outros segredos sobre mudar de modos de operação no Vim. Alguns só po- dem ser desvendados descobrindo certas configurações, mas em geral não deve haver problema no trânsito entre os modos se aprenderam bem o que foi ensinado nas últimas páginas. Portanto, não se preocupem em entender tudo que vai ser lido no texto abaixo, pois é apenas um apanhado sobre alguns detalhes que dizem respeito à transição entre os modos. Para todos os fins lembre de configurar o Vim para lhe informá-lo do modo atual digitando ’ :set smd ’; Toda esta passagem que se segue foi tirada do Manual de Referência do Vim 6.4, escrito pelo próprio criador do editor, Bram Moolenaar. Se por qualquer motivo o modo onde você está for desconhecido, você pode sempre voltar para o modo Normal digitando <Esc> duas vezes. Isso não funciona para o modo "ex", entretanto, utilize ":visual". Vocês saberão que estão de volta no modo Normal quando verem a tela piscar ou ouvirem o bipe depois de apertar <Esc>. No entanto, quando apertado <Esc> depois de usar <Ctrl-O> no modo de inserção também ouvimos um bipe, mas ainda estamos no modo de inserção, digitem <Esc> novamente. *1 Vai do modo Normal para o de inserção passando o comando "i", "I", "a", "A", "o", "O", "c", "C", "s"ou S". *2 Vai do modo Visual para o Normal ao se passar um comando não pendente, que faz o comando ser executado, ou digitando <Esc> "v", "V"ou "CTRL-V"(veja |v_v|), que simplis- mente pára o modo Visual sem efeitos colaterais. *3 Vai do modo linha de comando para o modo Normal: - Apertando <CR> ou <NL>, que faz o comando dado ser executado; - Deletando a linha inteira (e.g., com CTRL-U) e por último um <BackSpace>. - Apertando CTRL-C ou <Esc>, que sai da linha de comando sem executar o comando. No último caso o <Esc> pode ser o caractere definido com a opção ’wildchar’, que neste caso iniciará a completamento de linha de comando. Vocês podem ignorar isso e apertar <Esc> novamente. Vi: quando apertando <Esc> a linha de 70
  • 72.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF comando é executada. Isto é inesperado para a maioria das pessoas; logo foi mudado no Vim. Mas quando o <Esc> é parte de um mapeamento, a linha de comando é executada. Se vocês quiserem o comportamento do Vi também quando apertando o <Esc>, use ":cmap ˆV<Esc> ˆV ˆM"} *4 Vai do modo Normal para o de seleção: - Usando o mouse para selecionar o texto enquanto a opção ’selectmode’ contiver "mouse"; - Usando um comando não imprimível para mover o cursor enquanto mantém o <Shift> apertado e a opção ’selectmode’ contiver a opção "key"; - Usando "v", "V"ou "CTRL-V"enquanto a opção ’selectmode’ contiver "cmd"; - Usando "gh", "gH"ou "g CTRL-H- g_CTRL-H|; *5 Vai do modo de seleção para o Normal usando um comando não imprimível para mover o cursor sem manter o <Shift> apertado. *6 Vai do modo de seleção para o de inserção digitando um caráter imprimível. O que estiver selecionado é deletado e o caractere é inserido; Se a opção ’insertmode’ estiver ligada, a edição de um arquivo começará no modo de inser- ção. *CTRL-_CTRL-N* *i_CTRL-_CTRL-N* *c_CTRL-_CTRL-N* *v_CTRL-_CTRL-N* O comando CTRL-CTRL-N ou <C-><C-N> pode ser usado para ir ao modo Normal a partir de qualquer outro modo. Isso pode ser usado para termos certeza de que o Vim está no modo Normal, sem provocar um bipe como o <Esc> faria. No entanto, isso não funciona no modo "ex". Quando usado depois de um comando que leva um argumento, como |f| ou |m|, o limite de tempo definido em ’ttimeoutlen’ é aplicado. *CTRL-_CTRL-G* *i_CTRL-_CTRL-G* *c_CTRL-_CTRL-G* *v_CTRL-_CTRL-G* O comando CTRL-CTRL-G ou <C-><C-G> pode ser usado para ir ao modo de inserção quando ’insertmode’ está setado. Caso contrário, vai para o modo Normal. Isso pode ser usado para termos certeza de que o Vim está no modo indicado pelo ’insertmode’, sem saber em que modo o Vim está. 71
  • 73.
    Capítulo 14 Lição 7- Editar o texto 14.1 Apagar o texto Vamos iniciar nossos estudos sobre a edição propriamente dita. Até agora aprendemos os diversos recursos necessários para que possamos consultar e percorrer arquivos de texto com o Vim. Aprendemos o funcionamento da sintaxe de comandos em modo Normal e vários comandos de movimentação de tela e de cursor, além de como fazer buscas no texto por quaisquer padrões de strings. Esta segunda seção do curso, que diz respeito à edição, é significativamente mais simples e breve. Isto acontece porque os comandos de edição são em princípio baseados nos comandos de movimentação do cursor. Em outras palavras, estes comandos são a base para a construção de todos os comandos de edição, pois a movimentação do cursor é, nos comandos que agora veremos, o que indicará os parâmetros objeto e valor numérico. Na verdade nas ações de movi- mento de cursor o verbo do comando é indicado em geral com os direcionais. Os comandos que agora aprenderemos simplesmente vão atrelar à ação de movimentar o cursor um outro verbo, o de apagar, copiar e colar. É claro que podemos também construir comandos de edição simples que possam presumir objetos e valores padrões, e vale lembrar que estamos sempre falando (a não ser se explicitado) de comandos em modo Normal. Estes comandos que se aliam aos de movimentação de cursor são comandos pendentes, ou seja, que esperam parâmetros. Vamos à prática. O comando básico de remoção é o ’ x ’, que equivale a apertar a tecla <Delete>. No entanto, <Delete> não reconhece parâmetros senão o padrão. Logo se digitado apagará um caractere. A deleção por ’ x ’, apesar de aceitar parâmetros, é um comando de execução imediata, e não pendente. Logo o único parâmetro que podemos passar a ele é o numérico. Tentem digitar ’ 2 x ’ e verão dois caracteres serem removidos. O ’ x ’ é designado a apagar caracteres, e seu objeto não é negociável por não ser um verbo pendente. Ação: digite (n) x para apagar (n) caractere(s)! O outro popular comando de remoção do Vim é ’ d ’. Este sim é um comando pendente. Vejamos o que podemos fazer com ele. Lembre dos comandos de movimentação de cursor. Se digitamos ’ 2w ’ movimentamos o cursor por duas palavras. Experimente agora digitar o comando ’ 2wd ’: verão duas palavras sendo deletadas! Tente também comandos mais ousados como ’ $ d ’ e ’ gg G d ’ e notarão que o comando ’ d ’ reconhece todo tipo de comandos de cursor. Repare que caso digitemos simplismente ’ d ’ nada acontecerá a princípio. Isto acontece justamente por ele ser um comando pendente, e assim não será executado até que passemos algum parâmetro, nem que este seja 72
  • 74.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF apontar em algum sentido com os direcionais. Neste caso ele apagará o objeto padrão que se aponta com os direcionais, ou seja, caractere se apontarmos para os lados e linha se o fizermos verticalmente. Como antes dito, comandos pendentes em geral têm algum comportamento padrão que reage a sua repetição, que no caso, é ’ dd ’. Apertar ’ dd ’ apaga a linha sobre a qual está atualmente o cursor - que funciona como ’ D ’ maiúsculo -, o que é diferente, teste isto, de digitar ’ d ’ seguido de um direcional vertical, pois estes apagam duas linhas, a atual e a seguinte apontada pelo direcional. Ação: digite um comando de cursor para designar objeto, acompanhado de um valor numé- rico, se quiser, seguido de d para apagar o objeto designado! Ação: digite dd ou D para apagar a linha sob a qual o cursor está atualmente! Existem também aqueles comandos operacionais de transição de modo Normal para o modo de inserção, que também desempenham a função de remoção. Lembrem dos ’ s ’ e ’ S ’ e dos ’ c ’ e ’ C ’. 14.2 Copiar o texto Existe um comando principal de cópia de texto no Vim. Ele é, e precisa ser, um comando pendente, caso contrário não seria capaz de satisfazer todas as condições de um comando ver- dadeiramente versátil do Vim. O comando é ’ y ’, que vem de yank. Como o comando pendente ’ d ’, podemos informá-lo de valores e objetos particulares que satisfazem nossas necessidades. O comando de cursor, como com ’ d ’, deve vir antes do verbo principal, pois como aprendemos a ordem sintática do comando é n o v, ou seja, número, objeto e verbo. As mesmas possibilidades de designação de objetos valem para este comando, ou seja, todos os movimentos de cursor são potenciais objetos dos verbos de edição. Já o comando duplicado ’ yy ’, como a maiúscula ’ Y ’, de forma semelhante ao ’ dd ’, copia para o buffer padrão toda a linha atual. Ação: digite y acompanhado de um movimento de cursor para copiar o objeto designado com o comado de cursor para o buffer padrão! Curiosa e inteligentemente, no Vim vários outros comandos que não o ’ y ’ também podem ser utilizados com a finalidade secundária de copiar um trecho de texto. Na verdade, esses outros comandos são todos aqueles de remoção ensinados (exceto a tecla <Delete>). Ou seja, quando deletamos um objeto qualquer de texto, estamos sempre também o copiando para o buffer padrão, logo tanto o comando ’ x ’ quanto o ’ d ’ e os outros de mudança de modo que realizam deleção também copiam os trechos de texto removidos. Em certo sentido, existem vários comandos de cópia de texto, dentre os quais ’ y’ é o único que preserva o texto como está, ou seja, sem removê-lo. Ora, mas como poderei copiar uma string e colá-la posteriormente se estou realizando diver- sas remoções? Para isso podemos reservar buffers que não sejam o padrão. Para tanto devemos nomeá-los. Os nomes possíveis são os seguintes: a-z A-Z 0-9 . % # : - " Para atribuí-lo, devemos precedê-lo de uma aspas ( ") : ’ "s ’ - neste caso por exemplo, estamos apontando para um buffer chamado ’ s ’, mas ainda não fizemos nada. Para copiar um conteúdo para um buffer chamado ’ b ’, por exemplo, escrevemos ’ "b yy ’, e copiamos a linha atual para ’ b ’. O último trecho de texto copiado é sempre associado também ao buffer padrão, mas se o atribuímos a um buffer nomeado podemos sobreescrever à vontade o padrão, que quando 73
  • 75.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF digitarmos ’ "b p ’, no nosso exemplo, o mesmo conteúdo antes armazenado será transcrito. Por fim, para conferir os buffers atualmente nomeados digitamos ’ :reg ’, de registers. Ação: digite "cy mais o objeto de texto para o copiar para um buffer com o nome do c dado! Ação: digite :reg ou :di para ver os buffers atualmente nomeados! 14.3 Colar o texto Para colar o trecho de texto copiado para o buffer padrão existe o comando ’ p ’, que vem de put. Este comando não é pendente e por isso só aceita mais um parâmetro, o de quantidade. Podemos colar n vezes o conteúdo do buffer carregado. Como outra alternativa podemos preferir colar o texto antes da posição do cursor, para isso colamos com ’ P ’. Caso queiram sofisticar o comando, experimentem digitar ’ gp ’ ou ’ gP ’, e o cursor terminará sempre ao final do texto colado. Ação: digite (n) p para colar o conteúdo do buffer n vezes após o cursor! Ação: digite (n) P para colar o conteúdo do buffer n vezes antes do cursor! Ação: digite (n) g p ou P para colar o conteúdo do buffer n vezes e posicionar o cursor após o texto colado! Como explicado, podemos definir buffers diferentes do padrão digitando aspas e o nome do buffer, que é um caractere, seguido do comando de cópia de texto. Para colá-lo, a estrutura do comando é a mesma: ’ "c y ’ para copiar e ’ "c p ’ para colar. Ação: digite "c p para colar o texto armazenado no buffer de nome c! 14.4 Fazer e desfazer comandos Outro recurso de edição é o comando equivalente ao ’ <Ctrl>+z ’. O comando de desfazer (undo) no Vim, não somente é baseado em um histórico cujo tamanho pode ser definido, ou seja, potencialmente interminável, como também o Vim permite que refaçamos os comandos desfeitos. O Vim, quando se trata de voltar e avançar comandos, por compreender o arquivo segundo seu histórico, é também versátil por permitir voltar e avançar números designáveis de ações. O comando de desfazer é ’ u ’. Alternativamente, podemos desfazer todas as ações feitas na linha corrente com ’ U ’. O comando de refazer comandos, por sua vez, é ’ <Ctrl>+R ’, de redo. Tanto este quanto ’ u ’ são capazes de receber um parâmetro numérico, mas naturalmente não esperam por ele, sendo o padrão 1. Ação: digite (n) u para desfazer a(s) (n) última(s) ação(ões)! Ação: digite (n) <Ctrl>+R para refazer a(s) (n) última(s) ação(ões) desfeita(s)! Ação: digite U para desfazer todas as ações feitas na linha corrente! 14.5 Substituir ocorrências Lembrem agora de tudo o que aprendemos sobre buscar ocorrências com ou sem expres- sões regulares. Tudo aquilo é aplicável na tarefa de substituir ocorrências, justamente porque aquilo que podemos substituir são ocorrências que encontrarmos com o comando de busca que executarmos. O comando de substituição é somente um complemento possível dos comandos de busca. Como foi dito brevemente, os comandos de busca com substituição requerem que seja informada a região do texto cujas ocorrências encontradas deverão ser substituídas, além do caractere ’ s ’, de substitute. Essa informação deve vir antes do comando de busca, conferindo o 74
  • 76.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF formato ’ : região s/busca ’. Temos que informar a string que queremos inserir no lugar das que encontramos, e isso é feito após o padrão procurado, separando-os por uma barra. Os comandos completos de substituição têm a forma: ’ : região s/busca/substituto ’. Após o comando podemos ainda passar algumas opções, sendo as mais populares delas a opção ’ g ’, de global, que manda o comando substituir todas as ocorrências dentro da região dada e ’ c ’, de confirmation, que pede que o Vim pergunte pelas confirmações das substituições a serem realizadas. Podemos querer usar tambem o parâmetro ’ i ’, que faz o vim ignorar a diferença entre maiúsculas e minúsculas, enquanto ’ I ’ o impede disto. Um comando que substitui todas as palavras ’ vi ’ por ’ Vim ’ em todo o texto, por exemplo, poderia ser: ’ :1,$s/vi/Vim/g ’ . Como podem reparar, a região foi deli- mitada apontando para duas posições de linhas separadas por uma vírgula, a primeira com 1 e a última com o símbolo ’ $ ’, que significa normalmente final de linha. Também podemos passar um símbolo único para designar o texto todo, que seria ’ % ’. Lembrem que ’ . ’ indica a linha atual, e é um símbolo que também podemos incluir na designação de uma região. Para constar, podemos também simplesmente não designar uma região, como com comandos de busca, no entanto o comando só funcionará se for aplicável sobre a linha corrente, que é a região de texto padrão considerada se faltar sua indicação. Ação: digite : #,# s /expr1/expr2/ [opções] , sendo # um número de linha e #,# uma região do texto, para realizar substituições sobre as ocorrências encontradas! 75
  • 77.
    Capítulo 15 Lição 8- Configuração do Vim e ferramentas especiais 15.1 Configurando o Vim Como foi explicado quando falamos sobre os modos de operação, as ferramentas de confi- guração são todas responsabilidade do modo linha de comando. Este modo foi desenhado para cuidar especialmente da personalização da sessão e de comandos relativos ao arquivo e à exe- cução do programa. Como já devem ter reparado, os comandos de linha são sujeitos ao mesmo controle que temos na linha de comando do shell, pois temos acesso a um histórico de comandos, a ações como <Ctrl>+u, <Ctrl>+a, <Ctrl>+e e <Ctrl>+c para cancelá-la. Caso digitemos <Ctrl>+z de fato suspendemos a execução do Vim, mas para tanto não precisamos estar em linha de co- mando, diferentemente do <Ctrl>+c. Podemos da mesma forma, para suspender o Vim, digitar ’ :sus ’, de suspend. O modo linha de comando no Vim também possui os recursos de listagem com <Ctrl>+d, como em FreeBSD e com <Tab> e de busca de comandos do histórico indicando o início da linha, como se fosse um comando de shell grep. BA maioria das configurações de uma sessão do Vim são realizadas por variáveis de ambiente do Vim. Seus valores são acessíveis e ajustáveis pelo comando de linha set. Basta digitarmos ’ :set ’ seguido da variável e seu valor, ou seus valores que já mostram a variável. Veremos nas ferramentas especiais de edição alguns valores ajustáveis de configuração com o comando ’ set ’, mas existem inúmeras variáveis no Vim, e seria impossível aprensentá-las todas aqui. Naturalmente, os comandos de configuração executados em modo linha de comando, ou seja, de dentro de uma seção, só serão válidos para a seção atual. Da mesma forma temporárias são as configurações realizadas na chamada do programa, que também são possíveis. Para configurar o Vim de forma que possamos posterior- mente chamá-lo com a manutenção das características configuradas da seção temos de preparar um arquivo externo de configuração para ser lido na entrada do Vim, chamado ’ .vimrc ’. Podem existir dois arquivos de configuração, um global e um pessoal. O global existe para que sejam desenhados padrões para serem aplicados sobre todas as sessões Vim que existirem em uma determinada máquina. Ele fica localizado na pasta do Vim no diretório etc: "/etc/vim/vimrc ". O arquivo de configuração local do Vim também é chamado ’ .vimrc ’ e deve ser criado na pasta pessoal de cada usuário que deseja utilizar seções personalizadas do Vim. Quando o Vim é cha- mado, ele primeiramente aplica as configurações globais e depois personaliza a sessão lendo o .vimrc da pasta pessoal do usuário que o chamou. Logo, caso haja configurações conflitantes, serão as configurações pessoais que permanecerão. Experimente criar o arquivo .vimrc e editá-lo com uma linha de configuração. Digite na linha de comando ’ vim .vimrc ’, e insira na primeira 76
  • 78.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF linha ’ set number ’. Observe que no arquivo de configuração não é necessário que digitemos o indicador de comando de linha ’ : ’, ainda que não seja proibido digitá-lo. Agora salvem e saiam e chamem o Vim para ler qualquer arquivo e verão a sessão já ajustada com a opção de nume- ração de linhas! Uma dica para aqueles que irão se aventurar na edição do .vimrc e começar a brincar é o uso de comentários. Para comentar linhas no .vimrc as iniciamos com aspas duplas ( "), utilizem-as! Aproveitem também os exemplos de arquivos de configuração de sessões do Vim que estará disponível para download. Por fim na chamada do Vim podemos passar diversas opções. O modelo de chamada é ’ vim opções arquivos ’, fora as chamadas alternativas como ’ view ’, ’ gvim ’, ’ ex ’, ’ gview ’... Vale a pena conhecer o que as opções podem fazer por nós, mas como este conteúdo ultrapassaria um pouco os objetivos deste curso, recomendo que consultem o manual do Vim, que apresenta o editor como um programa e seus argumentos de linha de comando shell. 15.2 Ferramentas de consulta Pedindo ajuda Como já devem ter notado, podemos consultar o manual de ajuda do Vim simplesmente digi- tando ’ :help ’ ou ’ :h ’. Caso seja necessário consultá-lo sobre um item específico basta informá-lo do assunto com ’ :h assunto ’. Ação: digite :h assunto para consultar o Vim sobre o assunto dado! Conferindo a versão do Vim Para ver a versão do Vim basta digitar ’ :version ’. Ação: digite :version para ver a versão corrente do editor Vim! Informando-se sobre os caracteres Especialmente aqueles que programam podem se interessar pelo comando ’ ga ’. Ele apre- senta no canto inferior informações sobre o caractere sob o cursor como seu código hexa e octadecimal e seu valor ASCII. Ação: digite ga sobre um caractere para saber seus códigos hexa e octadecimal e seu valor ASCII! Marcando posições no texto Talvez a mais importante ferramenta especial do tipo consulta é a marcação de texto. Com ela podemos nomear quaisquer partes do texto tanto para acesso fácil mais tarde quanto para construirmos (ou referenciarmos) novos objetos. Como podemos ver, o comando de marcação não é um comando de movimento, mas sim de mera nomeação. O cursor não sai do lugar marcado e aparentemente nada acontece. Para marcar um local do arquivo, digitamos ’ m ’ seguido de um caractere nomeador que pode variar de a até z e de A até Z. Para acessarmos a posição anteriormente marcada basta digitarmos aspas simples seguida do caractere nome ( ’ c ). Para utilizar a marca como designador de objeto de texto realizamos um comando pendente cujo objeto é diferença, ou seja, o espaço entre posição corrente do cursor e a posição da marca. Por fim, para conferirmos as marcas do texto atual digitamos ’ :marks ’. Ação: digite m c para nomear a posição sob o cursor de c e ’ c para acessá-la! Ação: digite ’ c e realize um comando para executá-lo sobre todo texto que estiver entre a posição atual do cursor e a posição marcada c! Ação: digite : marks para ver a lista de marcas do texto atual! Numerando as linhas Se não for a ferramenta de marcação, certamente o comando de numeração de linhas é o maior facilitador de leituras de arquivos de texto em geral. Com esse recurso podemos visualizar 77
  • 79.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF o número das linhas de todo o texto e assim comparar, armazenar e apontar com maior facilidade. O comando é de linha, ’ :set number ’, ou ’ :set nu ’. Esse é um dos mais importantes e merece ser lembrado. Ação: digite :set number para numerar todas as linhas do texto e : set nonumber para desfazê- lo! Mapeando a posição do cursor Podemos também utilizar o comando ’ :set ruler ’ ou ’ :set ru ’ para que o Vim nos indique a posição do cursor medida em coluna e linha do texto. Para desativar o mapeamento do cursor digitamos ’ :set noruler ’. Ação: digite :set ruler para que o Vim nos indique a posição do cursor no texto! Monitoramento do modo Como já dito, para facilitar o trânsito que temos de fazer entre os modos podemos solicitar que o Vim sempre apresente no canto inferior esquerdo da tela o modo de operação em que estamos atualmente com o comando ’ :set smd ’. Para desabilitá-lo digitamos ’ :set nosmd ’. Esta configuração é padrão no Vim e no vi. Ação: digite :set smd para fazer o Vim sempre nos apresentar o atual modo de operação! Buscando imediatamente O Vim nos permite realizar buscas em tempo real, no sentido de que a string de busca vai sendo procurada na medida em que é digitada. Esta opção trás grandes mudanças e implicações para os comandos de busca, mas certamente pode valer a pena. O comando é ’ :set is ’, e para desabilitá-lo digitamos ’ :set nois ’. Ação: digite :set is para habilitar a busca imediata da string de busca na medida em que vai sendo digitada! Hachurando ocorrências Caso haja muitas aparições da expressão procurada pode ser útil colorí-las para uma me- lhor visualização. Quando realizarmos uma nova busca serão as novas ocorrências a ficarem hachuradas. O comando é de linha - ’ :set hls ’. Para desfazê-lo, ’ :set nohls ’. Ação: digite :set hls para hachurar as ocorrências encontradas de cada busca! Consultando textos silmultâneos Não poderíamos esquecer do recurso de divisão do espaço de tela ’ : split arquivo ’. Com este comando dividimos a tela em duas ou em mais partes para visualizar textos diferentes ou até partes diferentes de um mesmo texto ao mesmo tempo! Caso seja preferido, podemos fazer também uma divisão vertical da tela com ’ : vsplit arquivo ’. Para transitar entre as janelas digitamos ’ <Ctrl>+w_w ’, mas existem diversas maneiras práticas de transitar entre inúmeras janelas, como ’ <Ctrl>+w_b ’ ou ’ <Ctrl>+w_t ’ para alcançar a janela de baixo e a de cima, respectivamente. Existem comandos para mudar a posição das janelas e comandos para alterar seus tamanhos. Estes são ’ <Ctrl>+w_+ ’ para aumentar a atual, ’ <Ctrl>+w_- ’ para diminuí-la e ’ <Ctrl>+w_= ’ para igualá-las. Vale a pena conferir a entrada de ’ :h split ’ para compreender todas as possibilidades e seus comandos. Os comandos de edição são aplicados sobre a janela em atuação, e a linha de comando, apesar de ser uma só, se aplica também sobre a janela atual. Porém a seção é a mesma, então os buffers, entre outras coisas, são os mesmos, o que nos dá a possibilidade de copiar e colar de e para textos diferentes. Caso ’ :split ’ seja chamado desta forma, ou seja, sem argumentos, será aberto uma janela aprensentando o mesmo texto em edição atualmente. Ação: digite :split (arquivo) para abrir dividir a tela em janelas contendo diferentes textos visualizáveis simultaneamente! Abrindo mais de um texto 78
  • 80.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Para abrir dois textos em uma mesma seção do Vim sem visualizá-los simultaneamente, basta na chamada do programa invocar mais de um arquivo: ’ vim arquivo1 arquivo2 ’. Para acessá-los, digitamos os comandos ’ :next ’ e ’ :prev ’. Estes comandos podem receber valores numéricos no caso de haver muitos arquivos abertos. Ação: digite vim arquivo1 arquivo2 no shell para abrir mais de um arquivo no Vim e :next e :prev para transitar entre os arquivos! Consultando manuais Digitando ’ K ’ sobre uma palavra no texto em seção que corresponda a qualquer comando existente no sistema fará o Vim procurar e tentar abrir seu manual de dentro da seção do Vim. Quando a consulta ao manual terminar e digitarmos ’ q ’, voltamos para dentro do Vim. Essa ferramenta é muito útil para a leitura de scripts cujos comandos desconhecemos, por exemplo. Ação: digite K sobre uma palavra que corresponda a um comando para consultar o manual do comando de dentro da sessão do Vim! 15.3 Ferramentas de edição Substituindo um caractere sem mudar de modo Um comando que pode ser eventualmente útil é o ’ r ’, que apesar de não aceitar os parâme- tros padrões é pendente por esperar que seja informado um caractere para que ele se execute. O ’ r ’ tem a função do ’ R ’, a de substituição, mas ao contrário deste o ele não entra em modo de operação algum. O ’ r ’ é um comando de substituição do caractere sob o cursor, e sua forma é ’ r c ’. Ação: digite r sobre o caractere a ser substituído seguido do novo caractere com o qual queremos substituí-lo! Trocando maiúsculas por minúsculas e vice e versa Um recurso um tanto quanto original, mas também útil, é o de trocar o valor de caixa de um caractere. Digitando ’ ’ podemos mudar uma letra de minúscula para maiúscula e vice-e- versa. Podemos transformar este comando em um comando personalizado digitando ’ g ’ e completando-o com um comando de cursor. Ação: digite ’ g ’ seguido de um comando de movimentação de cursor para trocar as letras minúsculas por maiúsculas e vice-e-versa! Unindo linhas Apesar de ser uma ferramenta raramente útil senão na edição de scripts e códigos fonte, quando dela precisamos não hesitar em reconhecer seu valor. Se digitamos ’ J ’, de join, trazemos a linha imediatamente abaixo da linha corrente para cima, ou seja, para junto da linha corrente, unindo-as. Ação: digite J para juntar as linhas corrente e seguinte! Avançando e recuando espaços Uma alternativa a entrar em modo de inserção e pressionar <Tab> é em modo Normal utilizar as teclas < e > para tabular as linhas. O alcance da tabulação será aquele definido pela variável shiftwidth. Ação: digite « e » para tabular o texto em modo Normal! Atualizando a tela Para limpar as mensagens que apareceram recentemente na tela do Vim podemos digitar ’ <Ctrl>+l ’. Nada acontecerá com o arquivo, somente o Vim descarregará as mensagens da interface para acalmar os usuários sobrecarregados. Ação: digite <Ctrl>+l para redesenhar a tela atual limpando as mensagens obsoletas! 79
  • 81.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF Repetindo comandos O comando ’ . ’ (ponto) é um comando genérico de repetição de comandos de modo Normal. Ele repete o último comando realizado, logo se ele foi a colagem de um texto, ’ . ’ irá colá- lo novamente. Curiosamente, se a última ação que fizemos foi entrar em modo de inserção e digitar uma frase qualquer, ao voltarmos ao modo Normal ’ . ’ irá repetir a inserção da frase que digitamos. Ação: digite ’ . ’ para repetir o último comando ou ação realizados! Carregando um arquivo para dentro do texto atual Podemos, de dentro de uma seção em que editamos um texto qualquer, inserir o conteúdo de texto de um arquivo diferente com o comando ’ : r arquivo ’, de read. O conteúdo do arquivo lido será inserido a partir da posição em que o cursor estava quando chamado o comando. Ação: digite :r arquivo para inserir o conteúdo de um arquivo dentro do texto em sessão atualmente! Salvando parte do texto Se quisermos podemos no lugar de gravar todo texto salvar apenas o conteúdo que estiver dentro de uma região delimitada. Para tanto designar uma região como fazemos quando cons- truímos um comando de substituição. O comando de gravação do arquivo tem o formato ’ região w arquivo ’. Ação: digite #,# w arquivo para salvar o conteúdo entre as linhas # e # no arquivo dado! Desabilitando escrita Para garantir que a sessão do Vim não poderá sobrescrever os arquivos abertos podemos definí-la como somente leitura, o que é o mesmo que ter aberto o Vim com o comando ’ view ’. Para tanto digitamos o comando de configuração ’ :set ro ’. Para voltar podemos digitar ’ :set noro ’. Ação: digite :set ro para tornar a sessão do Vim somente leitura e proibir a escrita do arquivo! Insensibilizando o Vim a maiúsculas e minúsculas Para facilitar certas funções como busca e substituição podemos desabilitar a sensibilidade que o Vim tem para diferenciar letras minúsculas de letras maiúsculas. O comando para tal é ’ :set ic ’, para voltar digitamos ’ :set noic ’. Ação: digite :set ic para tornar o Vim insensível à diferença entre letras maiúsculas e letras minúsculas! Executando comandos de shell Uma das características que tornam o Vim poderoso é a sua capacidade de interação com o shell. O Vim é capaz tanto de inciar um shell a partir de dentro de sua seção quanto de simplesmente executar comandos sem iniciar uma seção shell nova. A saída do comando pode, inclusive, ser inserida dentro do arquivo texto em edição. O comando para iniciar uma nova shell é ’ :shell ’. Quando digitarmos ’ exit ’ voltamos enfim para a sessão do Vim de onde paramos. O comando para executar comandos de shell é ’ : ! comandodeshell ’; neste caso uma tela com a saída do comando será aprensentada, e qualquer tecla fará o Vim retornar de onde parou. Caso interesse, o comando ’ : ! ! comandodeshell ’ pode inserir a saída do comando no arquivo corrente a partir da posição atual do cursor. Ação: digite :! comando para executar um comando de shell de dentro do Vim! Ação: digite :shell para iniciar uma nova sessão shell a partir do Vim! Ação: digite :!! comando para inserir a saída do comando de shell dentro do arquivo texto atual! Criptografando o texto O Vim oferece um recurso extremamente valioso, o da criptografia. O comando é bem simples, ’ :X ’, e o Vim pedirá por uma chave criptográfica. Pois bem, depois de informá-la basta salvar o 80
  • 82.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF arquivo e quando sairmos o arquivo já estará criptografado, e sua leitura exigirá a chave, ainda que não sua escrita. Não se iludam com o poder deste recurso no Vim, ele visa somente impedir que se veja o conteúdo dos arquivos indiscriminadamente, mas ele jamais impedirá que pessoas determinadas o leiam. Mas, de qualquer forma, notem que quanto maior for a chave utilizada maior será a segurança do seu texto. Para desabilitar o pedido da chave para a próxima vez que forem acessar o texto, digitem ’ :set key= ’ quando o texto estiver descriptografado. Ação: digite :X e informe uma chave para criptografar o texto corrente! Completando palavras Para facilitar a digitação de textos, o Vim oferece o recurso de completar o início de palavras com suas terminações prováveis, que são todas aquelas já digitadas no texto anteriormente. Ou seja, se já havia sido escrita a palavra ’ Vim ’ no texto anteriormente, ao digitarmos ’ V ’ em modo de inserção podemos apertar ’ <Ctrl>+n ’ e o Vim apresentará todas as opções de completamento disponíveis até chegar à ’ Vim ’. Ação: digite <Ctrl>+n para completar a palavra a ser digitada com alguma terminação antes digitada no texto! Formatando o texto Entre os comandos de configuração ’ :set ’ existem alguns que visam formatar e organizar o texto. Essas funções são para definir margem, quebra de linha, parágrafo, indentação etc. Eis algumas possibilidades: :set textwidth=80 | ajusta a quebra de linha para 80 colunas, ou caracteres; :set nowrap | ajusta o Vim para não separar linhas que não sejam quebradas de verdade; :set wrapmargin=10 | ajusta a margem do texto em 10; :set tabstop=4 | ajusta a tabulação para 4 espaços; :set shiftwidth=2 |ajusta o alcance dos comandos <Ctrl>+d e <Ctrl>+t (<, >) para 2 espaços; :set expandtab | <Tab> avança na verdade espaços; :set autoindent | indenta automaticamente as linhas que quebrarem; Um comando útil nessa hora é ’ gq ’, que ordena linhas e parágrafos. Depois de setar as medidas de quebra de linha em um texto já em execução, experimente digitar n gq, sendo n o número de linhas a serem ajustadas. Ação: digite n gq para quebrar ordenadamente as n linhas seguintes! Gravando seqüências de ações Para evitar que tenhamos que repetir grandes conjuntos de comandos, que muitas vezes são trabalhosos e até difíceis de se reproduzir, existe a ferramenta de gravação. Ao executá-la o Vim imprime na tela recording, que significa gravando, e ela é iniciada digitando ’ q c ’, sendo c um caractere qualquer que nomeará a seção de gravação, ao final digite q novamente. Para executar os comandos gravados posteriormente basta digitarmos ’ @ c ’, sendo c o caractere escolhido. Ação: digite qc para inicar e q para finalizar a gravação de uma determinada seqüência de comandos, depois digite @c para executá-la nova e automaticamente! Utilizando abreviações Para evitar digitar palavras frequentemente utilizadas e compridas, podemos criar abreviações com o comando ’ :abbr abreviação abreviado ’. Podemos, e até devemos, criá-las no nosso arquivo de configuração e ao digitar a abreviação em modo de inclusão a palavra abreviada será transformada automagicamente no que determinamos como sendo seu correspondente. Ação: digite :abbr abreviação abreviado para poder escrever palavras abreviadas que são convertidas automaticamente! Para terminar o curso, responda as perguntas da última lição marcando a única alternativa correta. Mas não se esqueçam, posteriormente, de respoder ao questionário final! 81
  • 83.
    Capítulo 16 Exemplo de.vimrc ".vimrc, por Tomás RC; "Algumas destas linhas foram tiradas de outros arquivos de configu- ração do Vim "e ele deve ser entendido como um arquivo sempre em expansão potencial; "Ele é dividido em 7 âmbitos de configuração: "1 Controle de arquivo; "2 Interface do Vim; "3 Interface do texto; "4 Formatação; "5 Edição; "6 Comandos; "7 Programação (em geral). "Cada um destes possuem comandos de linha atualmente operantes e outros que "deixei para serem descomentados, se for o caso. Procurei comentar todas as "linhas do arquivo para aqueles que tiverem interesse em bisbilhotá-lo. "Experimentem, se quiserem, ler este arquivo de configuração já utilizando ele "na sua seção para acompanhar sua leitura com a experiência da configuração! "Controle de arquivo: :set nocompatible "Pede ao Vim para não se preocupar em simular os comportamentos do Vi!":set autowrite "Salva automaticamente antes de comandos como :next e :make":set browse- dir=buffer "Lembra o diretório do último arquivo aberto":set history=100 "Determina o tamanho máximo de linhas (ou de comandos, não sei) do histórico"filetype plugin indent on "Reconhece os tipos de arquivos" set backup "Faz backup do arquivo atual, set nowritebackup "e deleta o antigo backup poste- riormente. "Estes dois comandos funcionam geralmente juntos, "vide ’:help backup’. "Interface do Vim: :set ruler "Mapeia a posição do cursor em linhas e colunas":set number "Numera as linhas":set showcmd "Mostra os comandos de modo Normal passados":set smd "Mostra o atual modo de operação":set laststatus=2 "Sempre exibe a barra de status" ":set statusline="Mostra o código ASCII do caractere sob o cursor e outras coisas, mas não está funcionando bem. "colorscheme darkblue "Esquema de cores legal ":set background=white "Fundo branco anti- claustrofóbico ":set visualbell "Não apita, pisca ":set mousehide "Esconde o mouse "Interface do texto: :set showmatch "Mostra os parênteses, chaves e colchetes que abrem o trecho que com eles fechamos :set hls "Opção maravilhosa para programadores, pois hachura todas ocorrências de uma busca syntax enable "Faz o mesmo que ’sintax on’, mas não sobreescreve minhas configu- rações ":set incsearch "Busca string enquanto a digitamos ":set guifont=Monospace 12 "Configura a fonte "sintax on "Colore elementos típicos da sintaxe do texto do tipo de arquivo do texto atual "Formatação: 82
  • 84.
    CDTC Centro deDifusão de Tecnologia e Conhecimento Brasil/DF :set textwidth=80 "Ajusta a quebra de linha para 80 colunas, ou caracteres; :set autoindent "Indenta automaticamente as linhas que quebrarem; :set expandtab «Tab> avança na verdade espaços; :set tabstop=4 "Ajusta a tabulação para 4 espaços; :set shiftwidth=2 "Ajusta o alcance dos comandos <Ctrl>+d e <Ctrl>+t (<, >) para 2 espaços; ":set wrapmargin=10 "Ajusta a margem do texto em 10; ":set nowrap "Ajusta o Vim para não separar linhas que não sejam quebradas de verdade; ":set formatoptions=tcqor "t=text, c=comments, q=format with gq command, o,r=autoinsert comment leader "Edição: :set wildmenu "Completa linha de comando de forma melhorada "Abreviações ortográficas ":abbr ai aí ":abbr ha há ":abbr aa à ":abbr eh é ":abbr so só ":abbr doh dó ":abbr pa pá ":abbr ca cá ":abbr la lá ":abbr va vá ":abbr ta tá ":abbr nao não ":abbr sao são ":abbr pao pão ":abbr tao tão ":abbr vao vão ":abbr veem vêm ":abbr teem têm ":abbr voce você ":abbr po pó ":abbr cao cão ":abbr terca terça ":abbr sabado sábado ":abbr setima sétima ":abbr cetico cético ":abbr magico mágico ":abbr magica mágica ":abbr icone ícone ":abbr unico único ":abbr unica única ":abbr ultimo último ":abbr ultima última ":abbr musico músico ":abbr musica música ":abbr nucleo núcleo ":abbr ideia idéia ":abbr tambem também ":abbr proprio próprio ":abbr propria própria ":abbr proprios próprios ":abbr proprias próprias "Comandos: "De substituição ortográfica de texto Programação (em geral): :set cin "indenta códigos .c ... ... ... 83
  • 85.
    Capítulo 17 Notas Finais Bom,espero que tenham ganho, senão habilidades, ao menos muita familiaridade com o Vim. Não deixe, é claro, de utilizá-lo no dia-a-dia do seu GNU/Linux e nem de procurar conhecer mais sobre suas capacidades. Procure construir seus arquivos de configurações, baixe scripts e plugins para suas linguagens prediletas e façam do uso Vim um estilo de vida! O curso certamente foi bastante teórico, o que infelizmente pode ter feito faltas no aprendi- zado prático do uso do Vim. Aproveitem o guia de comandos enquanto puderem e, se interessar, copiem-no. Em seguida indicarei alguns endereços eletrônicos para consulta sobre o Vim, en- tre eles os principais sites atrelados oficialmente ao editor e até páginas pessoais com dicas e exemplos. www.unb.ca/documentation/UNIX/tips/vim/ www.vi-improved.org/tutorial.php http://vimdoc.sourceforge.net www.vim.org http://www.rayninfo.co.uk/vimtips.html http://redvip.homelinux.net:81/aggregator/sources/45 http://www.moolenaar.net/habits.html http://www.ukuug.org/events/linux2004/programme/paper-SMyers/Linux_2004_slides/vim_tips/ http://www.yolinux.com/TUTORIALS/LinuxTutorialAdvanced_vi.html http://www.iccf.nl/click1.html http://www.usinglinux.org/editors/ 84