2. Vi: o ancestral

Resumo

O Vi foi o primeiro editor em tela cheia criado. É um dos principais alvos daqueles que não gostam do UNIX®, mas também é um dos melhores argumentos dos que defendem o sistema: apesar de ser complicado para aprender, ele é uma ferramenta extremamente poderosa uma vez que você adquira o hábito de utilizá-lo. Com pouco uso do teclado um usuário do Vi pode mover montanhas, e pouquíssimos editores, com exceção do Emacs, podem alegar fazer o mesmo.

Na verdade a versão oferecida com o Mandriva Linux é o Vim, que significa VI iMproved (VI melhorado), mas nós iremos nos referir a ele como Vi ao longo deste capítulo.

Se você quiser aprender mais sobre o Vi, você pode dar uma olhada no Hands-On Introduction to the Vi Editorou na página do Vim.

2.1. Modo de Inserção, Modo de Comando, Modo de Execução...

Para começar a utilizar o Vi nós utilizamos uma linha de comando semelhante aquela do Emacs. Então vamos voltar aos nossos dois arquivos e digitar:

$ vi arquivo1 arquivo2

Neste ponto, você vai estar olhando para uma janela parecida com esta:

Figura 8.4. Posição de início do VIM

Posição de início do VIM

Agora você está no modo de comando em frente do primeiro arquivo aberto. Neste modo você não pode inserir um texto em um arquivo. Para isto você precisa mudar para o modo de inserção.

Aqui estão alguns atalhos para a inserção de texto:

[Nota]Nota

Por favor, note que a combinação de teclas deve ser digitada exatamente como indicada neste capítulo, o Vi distingue letras maúsculas de letras minúsculas e, então, o comando a não é o mesmo que o comando A.

  • a e i: para inserir texto depois e antes do cursor (A e I insere texto no final e no início da linha atual);

  • o e O: para inserir texto acima e abaixo da linha atual.

No modo de inserção você verá a string --INSERT-- aparecer na parte de baixo da tela (então você pode saber em que modo está). Este é o único modo em que você pode inserir texto. Para retornar ao modo de comando, pressione a tecla Esc.

No modo de inserção você pode utilizar as teclas Backspace e Del para apagar texto. As setas direcionais irão permitir que você se movimente no texto, tanto no Modo de Comando como no Modo de Inserção. No modo de comando temos também outra combinação de teclas que nós iremos ver mais tarde.

O modo de execução é acessado pressionando a tecla : no modo de comando. Um : irá aparecer no lado esquerdo da parte de baixo da tela com o cursor posicionado após ele. O Vi irá considerar tudo o que você digitar até pressionar Enter como um comando. Se você apagar tudo, incluindo o :, você irá retornar ao modo de comando e o cursor irá retornar à sua posição original no texto.

[Dica]Dica

Você pode utilizar a completação de comandos no modo de execução, digite as primeiras letras do comando e pressione a tecla Tab para completá-lo.

Para salvar as alterações de um arquivo digite :w no modo de comando. Se você quiser salvar o conteúdo do buffer para outro arquivo, digite :w <nome_do_arquivo>.

2.2. Trabalhando com Buffers

Para alternar, no mesmo buffer, entre os arquivos que foram indicados na linha de comando, digite :next para ir ao próximo arquivo e :prev para o arquivo anterior. Você também pode utilizar :e <nome_do_arquivo>, que deixa você escolher entre alternar para o arquivo desejado se ele já estiver aberto, ou abrir outro arquivo. Você também pode utilizar completação.

Assim como no Emacs, você pode ter vários buffers exibidos na tela. Para isto, utilize o comando :split.

Para alternar entre os buffers, digite Ctrl-w j para ir ao buffer abaixo ou Ctrl-w k para ir ao buffer acima. Você também pode utilizar a tecla para cima e para baixo ao invés das teclas j ou k. O comando :close esconde um buffer e o comando :q fecha.

Você deve estar ciente que se você tentar esconder ou fechar um buffer sem salvar as modificações, o comando não irá ser executado e o Vi irá exibir esta mensagem:

No write since last change (use ! to override)

Neste caso, faça como foi indicado peli Vi e digite :q! ou :close!.

2.3. Edição de Textos e Comandos de Movimentação

Além das teclas Backspace e Del no modo de edição, o Vi possui muitos outros comandos para apagar, copiar, colar e substituir textos em modo de comando. Todos os comandos que serão mostrados a seguir estão separados em duas partes: a ação que será executada e seu efeito. A ação pode ser:

  • c: substituir (Change). O editor apaga o texto requisitado e volta para o modo de inserção após o comando.

  • d: apagar (Delete);

  • y: copiar (“Yank”). Nós vamos ver este na próxima seção.

  • .: repete a última ação.

O efeito define que grupo de caracteres o comando irá agir sobre.

  • h, j, k, l: um caractere à esquerda, abaixo, acima, à direita[20]

  • e, b, w: para o final, início da palavra atual e início da próxima palavra.

  • ^, 0, $: para o primeiro caractere não branco da linha atual, o início e o fim da linha atual.

  • f<x>: vai para apróxima ocorrência do caractere <x>. Por exemplo, fe move o cursor para a próxima ocorrência do caratere e.

  • /<string>, ?<string>: para a próxima e última ocorrência da string ou expressão regular <string>. Por exemplo, /foobar move o cursor para a próxima ocorrência da palavra foobar.

  • {, }: para o início e para o final do parágrafo atual;

  • G, H: para o final do arquivo, para o começo da tela.

Cada um destes caracteres de “efeito” ou comandos de movimentação pode precedido por um número. Para o G, (“Go”) isto referencia o número da linha no arquivo. Baseado nesta informação, você pode fazer todos os tipos de combinação.

Aqui estão alguns exemplos:

  • 6b: move 6 palavras para trás;

  • c8fk: apaga todo o texto até a oitava ocorrência do caractere k e entao entra no modo de inserção;

  • 91G: vai para a linha 91 do arquivo;

  • d3$: apaga até o final da linha atual mais as próximas duas linhas.

Enquanto muitos destes comandos não são muito intuitivos, a melhor forma de se lembrar dos comandos é utilizando-os. Mas você pode ver que a expressão “mover montanhas com poucas teclas” não é um exagero.

2.4. Cortar, Copiar, Colar

O Vi contém um comando que nós já vimos para copiar texto: o comando y. Para cortar texto, simplesmente use o comando d. Há 27 memórias ou buffers para armazenar texto: uma memória anônima e 26 memórias nomeadas com as 26 letras, em caixa baixa, do alfabeto do inglês.

Para utilizar a memória anônima você entra com o comando da maneira “como ele é”. Assim o comando y12w irá copiar as 12 palavras após o cursor na memória anônima[21]. Utilize d12w se você quer recortar esta área.

Para utilizar uma das 26 memórias nomeadas, entre com a sequência "<x> antes do comando, onde <x> indica o nome da memória. Entã, para copiar as mesmas 12 palavras na memória k, você escreveria "ky12w, ou "kd12w para recortá-las.

Para colar o conteúdo da memória anônima, utilize o comando p ou P, para inserir texto depois ou antes do cursor. Para colar o conteúdo de uma memória nomeada, utilize "<x>p ou "<x>P da mesma maneira (por exemplo "dp irá colar o conteúdo da memória d depois do cursor).

Vamos olhar um exemplo:

Figura 8.5. VIM, antes de copiar o bloco de texto

VIM, antes de copiar o bloco de texto

Para continuar esta tarefa, nó vamos:

  • Copiar novamente as seis primeiras palavras da sentença na memória r (por exemplo): "ry6w[22];

  • alterne para o buffer file2, que está localizado abaixo: Ctrl-w j;

  • cole o conteúdo da memória r antes do cursor: "rp.

Nós obtivemos o resultado esperado, como mostrado na Figura 8.6, “VIM, depois de ter copiado o bloco de texto”.

Figura 8.6. VIM, depois de ter copiado o bloco de texto

VIM, depois de ter copiado o bloco de texto

Procurar por texto é muito simples: no modo de comando, você simplesmente digita / seguido da string de busca, e então pressiona a tecla Enter. Por exemplo, /festa irá procurar pela string festa a partir da posição atual do cursor. Pressionando n a busca será repetida e o cursor levado para a próxima ocorrência, e se você chegar ao fim do arquivo, a busca irá começar novamente do início. Para procurar em sentido inverso, utilize ? ao invés de /.

2.5. Saindo do Vi

O comando para sair é o :q (na verdade, este comando fecha o buffer atual, como nós já vimos, mas se ele é o único buffer aberto, você irá sair do Vi). Há um atalho: como na maior parte das vezes você edita apenas um arquivo, para sair, utilize:

  • :wq ou :x para salvar as alterações e sair (uma solução mais rápida é Z Z), ou

  • :q! para sair sem salvar.

Note que se você possui vários buffers abertos, o :wq irá salvar somente o buffer ativo e então fechá-lo.



[20] Um atalho para o dl (apague um caractere a frente) é o x; um atalho para o dh (apague um caractere para trás) é o X; dd apaga a linha atual.

[21] Mas somente se o cursor estiver posicionado no início da primeira palavra!

[22] y6w literalmente significa: “Yank 6 words (extrair 6 palavras)”.