Editor vi
Autor: Mc.leo | Publicado: 2011-09-27T16:19:00-03:00



Introdução


"vi" é a sigla para "Visual&nbsp;Interface". A origem desse nome se deve ao seguinte fato: quando o vi foi criado (começo da década de 80), não era comum existirem editores de textos como nos dias de hoje. Naquela época, você digitava um texto mas não podia vê-lo! Isso mesmo! Em 1992, foi criado o vim (Vi IMitator), um clone fiel ao vi, porém com muitas outras funcionaliades, que só foram sendo adicionadas. Algum tempo depois, o vim passou a ser chamado de `Vi IMproved' (vi melhorado).

O vim é um dos editores de textos mais utilizados no mundo Unix. Em alguns sistemas, existe um link simbólico (/bin/vi) apontando para o /usr/vim. Em outros, o /bin/vi é o executável, só que executa diretamente o vim. Muita gente acha que usa vi, mas na verdade utiliza o vim, e eles têm algumas diferenças. O que você verá abaixo fala sobre o vim.

O vim é um editor de textos muito poderoso, ele pode: abrir vários arquivos ao mesmo tempo, possui sistema de autocorreção, auto-identação, seleção visual, macros, seleção vertical de texto, uso de expressões regulares, sintaxe colorida, e muito mais. Ele não é exclusivo do Unix, ou seja, pode ser executado em outras plataformas, como Amiga, MacOS, Sun, Windows entre outras.

Existe também o gvim, que é o vim em modo gráfico, com todas as funcionalidades do vim em pleno funcionamento, o que muda é apenas o modo gráfico mesmo.

O vim possui vários modos, ou seja, estados em que ele se encontra. São eles: modo de inserção, comandos, linha de comando, visual, busca e reposição. Abordarei os dois principais:


Modo&nbsp;de inserção e de comandos

Para identificar o modo (estado) do vim, basta visualizar o rodapé da tela.

Agora, vamos à prática. Para executar o vim, utilize:

$ vi =&gt; Abre o vim vazio, sem nenhum arquivo e exibe a tela de apresentação.$ vi arquivo =&gt; Abre o arquivo de nome "arquivo".$ vi arquivo + =&gt; Abre o arquivo de nome "arquivo", com o cursor no final do mesmo.$ vi arquivo +10 =&gt; Abre o arquivo de nome "arquivo", com o cursor na linha 10.$ vi arquivo +/Copag =&gt; Abre o arquivo de nome "arquivo", na primeira ocorrência da palavra "Copag".

Ao executar o vim, ele inicia diretamente em modo de comando. Para comprovar, é só olhar na última linha (rodapé) e não vai haver nada lá. Isso quer dizer que você não conseguirá escrever nada, pode digitar a vontade que só vai ouvir beeps. Para começar a escrever, pressione "i" em seu teclado. O vim entra em modo de inserção, que você comprova (como falado anteriormente) pelo rodapé da tela, onde fica a seguinte marcação:

- - -- INSERT --

Suponha que você já digitou o bastante, e quer salvar, por segurança. Pressione a tecla ESC para voltar em modo de comandos. E veja os comandos para salvar/sair:

:w =&gt; Salva o arquivo que está sendo editado no momento.:q =&gt; Sai.:wq =&gt; Salva e sai.:x =&gt; Idem.ZZ =&gt; Idem.:w! =&gt; Salva forçado.:q! =&gt; Sai forçado.:wq! =&gt; Salva e sai forçado.

Então, você editou uma boa quantidade de textos e quer salvar:

:w

Agora, quer voltar a editar o texto:

i

Lembre que utilizando o "i" para inserção, a mesma se inicia inserindo texto antes do cursor. Veja agora outros subcomandos de inserção de texto:

A =&gt; Insere o texto no fim da linha onde se encontra o cursoro =&gt; Adiciona uma linha vazia abaixo da linha correnteO =&gt; Adiciona uma linha vazia acima da linha correnteCtrl + h =&gt; Apaga último caracter à esquerda

Voltando ao modo de comando:

Veja agora subcomandos para movimentação pelo texto:

Ctrl + f =&gt; Passa para a tela seguinte.Ctrl + b =&gt; Passa para a tela anterior.H =&gt; Move o cursor para a primeira linha da tela.M =&gt; Move o cursor para o meio da tela.L =&gt; Move o cursor para a última linha da tela.h =&gt; Move o cursor para caracter a esquerda.j =&gt; Move o cursor para linha abaixo.k =&gt; Move o cursor para linha acima.l =&gt; Move o cursor para caracter a direita.w =&gt; Move o cursor para o início da próxima palavra (não ignorando a pontuação).W =&gt; Move o cursor para o início da próxima palavra (ignorando a pontuação).b =&gt; Move o cursor para o início da palavra anterior (não ignorando a pontuação).B =&gt; Move o cursor para o início da palavra anterior (ignorando a pontuação).0 (zero) =&gt; Move o cursor para o início da linha corrente.^ =&gt; Move o cursor para o primeiro caracter não branco da linha.$ =&gt; Move o cursor para o fim da linha corrente.nG =&gt; Move o cursor para a linha de número "n"

(susbstitua n pelo número da linha)..G =&gt; Move o cursor para a última linha do arquivo.

Copiando e colando textos no vim (utilizando o mouse)

Selecione o texto necessário com o botão esquerdo do mouse. Quando você for colar, saiba que o texto será colado a partir de onde se encontra o cursor (esse que aparece, às vezes piscando e às vezes não, quando você está digitando). Para colar, depois de ter selecionado o texto, você pode utilizar uma dessas opções:

1) Pressionando o botão direito do mouse;2) Pressionando o botão direito + botão esquerdo juntos;3) Pressionando o botão do meio do mouse (mouse de 3 botões);

Observação: Lembre-se que o vim deve estar no modo de inserção.

Usando o modo visual do vim

Entre no modo visual: vAgora, utilize as teclas direcionais (setas) do teclado, para selecionar o texto desejado.Pressione e cole, utilizando a tecla "p" (paste).

Veja agora como apagar um determinado texto:

Utilizando normalmente as teclas Backspace/Delete, ou entrando em modo visual (v) e pressionando a tecla Delete.

Você pode remover até o final de uma palavra, utilizando: dwPode também remover até o final de uma frase: d$

Desfazendo uma ação

É claro que você pode desfazer uma ação que você considera errado, ou que errou ao digitar o texto. É só utilizar: uSe você precisar voltar o texto na tela, utilize as teclas Ctrl + r.

Subcomandos para localização de texto

/palavra =&gt; Procura pela palavra ou caracter acima ou abaixo do texto.?palavra =&gt; Move para a ocorrência anterior da palavra (para repetir a busca use "n").n =&gt; Repete o último comando utilizando / ou ?.N =&gt; Repete o último comando / ou ? ao contrário (baixo para cima).Ctrl+g =&gt; Mostra o nome do arquivo, o número da linha corrente e o total de linhas.

Mais opções para remoção de caracteres

x =&gt; Apaga o caracter onde o cursor estiver.dd =&gt; Apaga a linha inteira onde o cursor estiveD =&gt; Apaga a linha a partir da posição do cursor até o fim.J =&gt; Une a linha corrente à próxima.:5dd =&gt; Removeas próximas 7 linhas a partir da posição do atual do cursor (qualquer número).

Mais para copiar e colar

:yy =&gt; Copia a linha onde o cursor se encontra.:5yy =&gt; Copia as próximas 5 linhas a partir da posição atual do cursor.:p =&gt; Cola o que foi copiado na linha abaixo do cursor atual.

Opções para substituição de textos

rCARACTER =&gt; Substitui o caracter onde o cursor se encontra pelo caracter especificado em CARACTER.RTEXTO =&gt; Substitui o texto corrente pelo texto digitado (sobrepõe).cw =&gt; Remove a palavra corrente para substituição.cc =&gt; Remove a linha corrente para substituição.C =&gt; Substitui o restante da linha corrente, esperando o texto logo após o comando.J =&gt; Une a linha corrente à próxima.:s/velho/novo =&gt; Substitui a primeira ocorrência de "velho" por "novo" na linha corrente.:% s/velho/novo =&gt; Substitui em todo o arquivo (%) a primeira ocorrência de "velho" por "novo" em cada linha.:% s/velho/novo/g =&gt; Substitui em todo o arquivo (%), todas (g) as ocorrências de "velho" por "novo".:% s/velho/novo/gc =&gt; Igual ao anterior, mas pedindo confirmação para cada substituição.:% s/^String[0-9]//gc =&gt; Expressões regulares também funcionam, como no sed.:% s/./\u&amp;/gc =&gt; Converte para maiúsculas (\u) o primeiro caracter (.) de cada linha.

Abreviações

:ab =&gt; Mostra todas as abbr.:abc[lear] =&gt; Remove todos.:iab =&gt; Apenas para modo de inserção.:iabc[lear] =&gt; Tira todos de inserção.:cab =&gt; Apenas p/modo de comando ( : ).:cabc[lear] =&gt; Tira todos os modos de comando.:una vc =&gt; Tira ab para vc.

Observação: Pontuação, espaço ou o ENTER, disparam a expansão de uma abreviação. Porém, Ctrl+] também pode ser usado, para expandir sem adicionar caracteres.

Opções para o comando SET

:setautowrite aw =&gt; Salva a cada alteração.backspace bs =&gt; Comportamento backspace (1 ou 2).errorbell eb =&gt; Campainha de erro.expandtab et =&gt; Troca tab por espacos.fileformat=dos ff =&gt; Converte o arquivo para DOS.hidden hid =&gt; Preserva o buffer.hlsearch hls =&gt; Elumina a última procura.ignorecase ic =&gt; Case insensitive na busca.incsearch is =&gt; Ilumina procura enquanto digita.laststatus=2 =&gt; Mostra linha de estado.lazyredraw lz =&gt; Não redesenha em macros.lines=N =&gt; Múmero de linhas na tela.magic =&gt; Usar mágicas na procura de padrões.number nu =&gt; Mostra núm da linha.report=N =&gt; Mostra aviso quando N linhas mudaram (0=sempre).showcmd =&gt; Mostra o comando que se está fazendo.showmatch sm =&gt; Mostra o casamento de {},[],().smartcase scs =&gt; Assume "noic" quando tiver maiúsculas.textwidth=N =&gt; Quebra de linha do texto.undolevels ul=N =&gt; Guarde os N últimos comandos para desfazer (padrão=1000).vb t_vb= =&gt; Retira o "beep" de erro.

Agora invertendo maiúsculas/minúsculas

5~ =&gt; Inverte os 5 próximos caracteres.g~$ =&gt; Inverte todos os caracteres até o fim da linha.seleciona, u =&gt; Converte para minúsculas.seleciona, U =&gt; Converte para maiúsculas.seleciona, ~ =&gt; Inverte.

Observação: Onde está escrito "seleciona", é para fazer utilizando o modo visual (v).

Agora veja como definir coluna de quebra de linha (problema que eu tive quando iniciei no aprendizado do vim):

:set textwidth=N

Se você já estiver num arquivo pronto:

:set wm=5 =&gt; O número 5 aqui são as colunas que serão "cortadas".gqG =&gt; Até o final do arquivo.

Vamos ver agora o que podemos fazer pressionando a tecla "Ctrl":

É claro que é segurando Ctrl + .

No modo de COMANDO:

A =&gt; Incrementa um número (Add)X =&gt; Decrementa um númeroS =&gt; ScrollLockL =&gt; Redesenha telaV =&gt; Modo visual (Visual Vertical)G =&gt; Status do arquivoM =&gt; Início da próxima linhaE =&gt; Linha abaixo sem mover cursorY =&gt; Linha acima sem mover cursorN =&gt; Próxima linha (Next)P =&gt; Linha anterior (Previous)F =&gt; PageDown (Forward)B =&gt; PageUp (Backyard)U =&gt; PageUp / 2 (Up)D =&gt; PageDown / 2 (Down)

Agora, no modo de INSERÇÃO:

A =&gt; Insere o último texto inseridoI =&gt; TABS =&gt; ScrollLockH =&gt; BackSpaceT =&gt; 2 tab's no início da linha (Two Tabs)V =&gt; Anula expansão do próximo caractereJ =&gt; Enter - quebra de linhaM =&gt; Enter - quebra de linhaL =&gt; Redesenha telaR =&gt; Insere conteúdo do registrador [a-z] (Veja abaixo)K =&gt; Insere um dígrafo (Veja abaixo)N =&gt; Procura palavra no texto atual (Next)P =&gt; Procura palavra no texto atual (Previous)Y =&gt; Copia caractere que está acima (Yank)

Veja os caracteres especiais:

ga =&gt; Mostra o código da letra sobre o cursor.:dig =&gt; Mostra todos os dígrafos disponíveis (tabela).

Exemplos: Para fazer um º, use Ctrl+K,-,o ("Ctrl"+"K"+"-"+"o").Para fazer um ½, use Ctrl+K,1,2 ("Ctrl"+"K"+"1"+"2").

Trabalhando com arquivos e janelas múltiplas

Você pode abrir múltiplos arquivos, por exemplo:

$ vim arquivo1 arquivo2

E pode alternar entre as janelas. Veja:

:wn =&gt; Grava o atual e vai ao próximo.:wN =&gt; Grava o atual e vai ao anterior.:args =&gt; Mostra todos os arquivos atuais.:qa =&gt; Sai de todas as janelas de uma vez.:all =&gt; Abre todos os arquivos em janelas individuais.

Tecla chave das janelas = Crtl+Wj, seta abaixo =&gt; Move para janela abaixo.k, seta acima =&gt; Move para janela acima.o =&gt; Apenas esta janela, fecha todas as outras (Only).+, - =&gt; Muda o tamanho da janela.= =&gt; Deixa todas as janelas com tamanhos iguais.

Os registradores

"[a-z] =&gt; Use o registrador [a-z] para o próximo delete, cópia ou cola.:reg =&gt; Mostra o conteúdo de todos os registradores.:reg [a-z] =&gt; Mostra o conteúdo do registradores [a-z].

Observação: O [a-z] pode ser: 0-9a-z%#:.-="

Marcas:

m[a-z] =&gt; Marca em [a-z] a posição corrente do cursor.`[a-z] =&gt; Vai até a marca [a-z].`` =&gt; Vai até a posição anterior ao último pulo (alterna).:marks =&gt; Mostra as marcas ativas.

Fazendo gravação de seqüência de comandos

q[a-z] =&gt; Inicia a gravação de uma seqüência no registrador [a-z].q[A-Z] =&gt; Inicia a gravação, adicionando no registrador [a-z].q =&gt; Pára a gravação.@[a-z] =&gt; Executa a seqüência do registrador [a-z] (5 vezes? 5@a)

Dica: Pode-se colocar o @[a-z] dentro da própria gravação do q[a-z]! Assim ele é executado recursivamente. Muito útil quando há uma procura de padrões na gravação. faz para todas as ocorrências.

Mapeamentos

:map :r!date =&gt; Mapeamento em modo de comando.:imap :r!date =&gt; Mapeamento em modo de inserção.:cmap r!date =&gt; Mapeamento em modo linha de comando.:vmap :r!date =&gt; Mapeamento em modo visual.

Exemplos:

"html: negrito no trecho selecionado:vmap d`pa # html: negrito no trecho selecionado

"liga/desliga autoIndent:map ,si :set ai!:echo "autoIndent="&amp;ai

"mostrar os espaços em branco no fim das linhas:map / *$^M

Através dos mapeamentos é possível "encurtar" comandos, ou seja, abreviá-los. Conheça as sintaxes:

Comment =&gt; CianoConstant =&gt; RoxoIdentifier =&gt; CianoPreProc =&gt; Azul escuroSpecial =&gt; VermelhoStatement =&gt; AmareloString =&gt; RoxoType =&gt; Verde

Todo =&gt; Preto, fundo marromError =&gt; Branco, fundo vermelhoIgnore =&gt; Preto, fundo preto! - esconde

Utilizando o recurso de expandtab

Mas, o que isso faz? Transforma todos os TABs em espaços. Podemos ativar dentro do próprio vim, utilizando o comando:

:set expandtab

Para desabilitar:

:set noexpandtab

Podemos colocar também no arquivo ~/.vimrc a seguinte linha:

set expandtab

O arquivo ~/.vimrc pode ser usado para muitas configurações, e essa é uma delas. Existe ainda o arquivo ~/.exrc, mas não entraremos em detalhes.

Podemos incluir a saída de um comando no vim, utilizando:

:r!comando

Por exemplo:

:r!rpm -q kernel

Incluiria o seguinte resultado, dentro do seu texto (isso na minha máquina):

kernel-2.4.18-3

Dicas diversas do vim:

:xit =&gt; Igual :wq, mas só grava se tiver sido alterado algo no arquivo.

:map N_ARQ ^R=expand("%:t:r")^MImprime no arquivo o próprio nome do arquivo editado quando N_ARQ é digitado.

Agora, veja como alinhar o texto:

:left:right:center

E para fazer uma busca de 2 palavras ao mesmo tempo:/palavra1\|palavra2


.: Livros sugeridos :.

::&nbsp;Editor vi - Guia de consulta rápida
::&nbsp;Comandos do Linux - Prático e Didático
::&nbsp;Manual completo do Linux - Guia do administrador

Via Shopping UOL





O vim é um editor de textos com centenas de opções, comandos, strings... Enão dá para abordar tudo aqui. Por isso, a melhor maneira de conhecê-lo a fundo é usando-o.

Agora, veja quem colaborou com a criação das dicas, e de onde eu tirei tanta informação:

Revista do Linux (Ed. 04 - Vi, vim e venci - Aurélio);Página do Aurélio (www.verde666.org);Dicas-L (expandtab) (www.Dicas-L.unicamp.br);Dicas enviadas pelo amigo Uziel (uhfn@ig.com.br)Vários tutoriais recolhidos pela internet.

Agradeço a todos aqueles que contribuiram direta e/ou indiretamente com os tutoriais.

Dicas desenvolvidas e gentilmente cedidas por&nbsp;Copag. Publicado em 30/06/2003.