Você está na página 1de 6

Vi Tutorial

Traduo: Eduardo Zambon e Raul Lopes


Introduo
N.T.: Boa parte das piadas sem graa do documento original foram suprimidas para
facilitar a traduo.
N.T.: O vi um editor de texto padro do mundo UNIX, podendo ser encontrado em
qualquer distribuio do Linux. No entanto, o seu uso bastante diferente de
editores de textos do mundo Windows. Essa foi a principal motivao para efetuar a
traduo desse tutorial. As nicas partes essenciais desse texto so as duas primeiras
sees. Mas, bastante desejvel que um adminstrador de sistemas UNIX tenha um
domnio mais amplo de uma ferramenta to til e importante como o vi. Por isso,
recomendo a todos que pelo menos dem uma lida at o final.
Vi? V o qu?
Vi um "editor visual" - um editor que lhe permite visualizar um documento, na su
a
totalidade, a medida que voc o cria e edita. Aqueles que pertencem gerao
Microsoft Word podem achar isso um pouco redundante - mas claro, voc est
pensando, todos os editores deixam voc fazer isso! Bem, no exatamente - nos
primrdios do UNIX, editores de linha como edlin e ex eram o padro e criar um
documento em uma dessas belezinhas envolvia o uso de comandos arcanos para
adicionar, remover e recuperar o texto de um buffer invisvel.
O tempo passa e quase todos os Unices hoje vem com alguma variante do vi - ele ,
com certeza, um dos editores mais poderosos por a, com uma grande quantidade de
caractersticas teis e interessantes. Eu costumo cham-lo de Ferrari dos editores de
texto: rpido, tem estilo e uma vez que voc sabe como dirigir voc nunca mais
vai ter dificuldade de arrumar um encontro no sbado noite...
Iniciando
Iniciar uma sesso do vi ridiculamente simples. Digite
$ vi
no prompt do terminal UNIX, seguido de um enter, e o vi abrir um arquivo vazio
para voc comear a trabalhar. Alternativamente, voc pode especificar o arquivo a
ser aberto na prpria linha de comando, dessa forma:
$ vi meuarquivo
No se preocupe com os ~ no editor - eles so apenas indicadores visuais do fim do
seu arquivo e no aparecem no seu documento.
A primeira (e mais confusa) coisa sobre o vi so os vrios diferentes modos nos
quais o editor pode operar. Para os nossos propsitos, eu vou separ-los em duas
amplas categorias: "modo de edio" (insert mode) e "modo de comando" (command
mode). O "modo de edio" aonde voc vai passar a maior parte do seu tempo -
ele permite adicionar (ou inserir) texto no seu documento. O "modo de comando",
por
outro lado, permite que voc se mova pelo documento, apague ou substitua blocos de
texto e acesse funes teis do vi como buffers, por exemplo.
Quando o vi iniciado, ele geralmente est em modo de comando. Para entrar no
modo de edio digite
i
o vi mostrar um aviso da troca de modos no canto inferior esquerdo. Agora voc pod
e
digitar o texto no documento de maneira normal. Quando tiver terminado, aperte
ESC
para retornar ao modo de comando.
Para comear a inserir texto numa linha nova, use
o
para entrar no modo de edio com o cursor j posicionado na prxima linha, ou
O
para entrar no modo com o cursor na linha anterior.
Alm de inserir texto, o vi tambm permite que voc sobrescreva um texto existente
- isso chamado de "modo de substituio" (replace mode), que pode ser acessado
digitando-se
R
no modo de comando. Tudo que voc digitar agora ser "escrito por cima" do texto
existente. Se a sua inteno era substituir um nico caractere - por exemplo, para
corrigir um erro de digitao - use
r
para substituir um nico caractere; o editor retornar automaticamente para o modo
de comando quando o caractere for substitudo.
Obviamente, em algum momento, voc vai precisar salvar o seu trabalho. No vi, isso
feito via o comando de "escrita" (write), abreviado para
:w
Para sair, use o comando
:q
O vi tambm permite que se combine comandos. Por exemplo, tente
:wq
para salvar seu documento e sair do programa. Alternativamente, se voc quiser
descartar seu texto use
:q!
que sai do vi sem salvar nenhuma alterao do arquivo sendo editado.
Obviamente, todos esses comandos com ":" devem ser executados no modo de
comando. Tentar utiliz-los no modo de edio os far aparecer como parte do seu
documento.
Vamos danar!
Agora que voc j sabe editar um texto, est na hora de ensin-lo a segunda coisa
mais confusa do vi: se movimentar pelo documento. Para aproveitar melhor essa
lio, eu sugiro que voc abra um documento j existente ou crie um novo e digite
algumas linha nele. Certifique-se que voc est no modo de comando teclando
ESC
algumas vezes quando tiver terminado.
As teclas de movimento do vi so:
h = esquerda,
j = baixo,
k = cima,
l = direita.
Em alguns consoles UNIX, tambm pode ser possvel usar as setas do teclado para se
movimentar pelo documento; entretanto, eu sugiro que voc tente memorizar a lista
acima pois elas vo funcionar em qualquer situao.
Gostaria de se mover entre as palavras? Use
w
para mover uma palavra para frente, ou
b
para mover uma para trs.
Para se mover entre pargrafos, use
{
e
}
O movimento entra sentenas requer o uso cuidadoso de
(
e
)
Se voc precisa se mover at uma linha especfica do seu documento - linha 568, por
exemplo - use esse comando:
:568
Para ir para o incio do arquivo, digite
gg
e para o fim, somente
G [isso shift+G]
E o vi tambm tem um equivalente a "Page Up e "Page Down". Use
^F [isso ctrl+F]
para ir uma pgina a frente, e
^B [isso ctrl+B]
para uma pgina atrs.
Para saber a sua posio no documento, use
^G [isso ctrl+G]
claro que essas no so as nicas teclas de movimento - existem muitas outras. No
entanto, por enquanto, essas devem ser suficientes para o seu prximo exerccio.
Cortar, Copiar, Colar...
Agora vamos ver como apagar e copiar textos. Para apagar um nico caractere,
posicione o curso sob ele, certifique-se que voc est no modo de comando, e tecle
x
para apag-lo. Para apagar uma palavra, tecle
dw
que a abreviao de "delete word" (apagar palavra). Para apagar uma linha inteira
use
dd
J escritores com bloqueio criativo vo apreciar a rapidez dos comandos
dgg
e
dG
que apagam tudo da posio corrente do cursor at o comeo e fim do arquivo
respectivamente.
Oops... voc no usou esses dois, no ? No tem problema, o vi tambm possui
um comando de "undo" (desfazer) muito til, que pode ser usado teclando
u
sempre que voc precisar desfazer algum engano. E claro, junto com o undo temos
o comando de "redo" (refazer), que permite repitir aes passadas. Basta teclar
. [isso mesmo, um ponto]
Quando voc apaga alguma coisa no vi, o texto apagado geralmente vai parar num
buffer temporrio na memria, aonde ele fica at ser substitudo. Esse texto pode ser
re-inserido no seu documento com o comando de "put" (colocar). Se voc estiver
acompanhando tudo j deve imaginar que o comando de "put" acessado com
p
Vamos l, tente. Apague uma linha, mova o cursor para um novo pargrafo e a
coloque em outro lugar. Simples, e equivalente funcionalidade cortar e colar que
existe em outros editores.
Caso voc queira inserir o texto apagado acima da posio atual do cursor,
simplesmente use
P
ao invs de
p
E quanto a copiar e colar? Tambm muito fcil: o vi usa o comando "yank" para
copiar um texto de uma forma bem similar ao comando de apagar. Para copiar uma
palavra, use
yw
J
yy
copia uma linha inteira e a coloca no buffer temporrio, pronta para ser colocada
em
outro lugar.
Um, dois, trs...
Uma das funes mais poderosas do vi repetir automaticamente um comando um
nmero especfico de vezes, bastando preceder o comando com um nmero. Por
exemplo, suponha que voc precisa apagar oito linhas de um documento. Baseado no
que voc j aprendeu, voc usaria o comando
dd
oito vezes, criando essa linha de comando horrivelmente grotesca:
dddddddddddddddd
O que voc poderia ter feito, caso eu j tivesse dito, era
8dd
Como voc ver ao us-lo, esse comando simplesmente executa o comando "dd"
oito vezes, apagando oito linhas do documento sem que voc precise ir a uma
farmcia comprar uma aspirina depois. E essa tcnica pode ser usada com quaisquer
dos comandos que voc j aprendeu: voc pode utiliz-la para copiar mltiplas
linhas, repetir inseres um nmero especfico de vezes, e at mesmo mover o cursor
para ocorrncias especficas de palavras no documento.
Procurando por hope
O vi tambm possui funcionalidades de busca e substituio bastante poderosas, que
podem se acessadas com os comandos / e ?.
Digamos que voc escreveu um tratado sobre o papel interpretado por Mark Hamil
em "Star Wars: A New Hope" (Guerra nas Estrelas: Uma Nova Esperana) - mas, ao
revisar o seu documento, voc v que digitou erroneamente a palavra "hope"
(esperana) como "dope" (narctico) em diferentes locais do texto. Obviamente voc
no pode ignorar esse erro: isso levaria a uma interpretao completamente nova do
filme de fico-cientfica mais querido do planeta. O que voc faz?
/dope
O comando /padro diz ao vi para procurar o documento pelo padro especificado;
ao encontr-lo, ele vai posicionar o cursor no primeiro caractere da palavra, e
aguardar novos comandos.
Para buscar para trs, use o comando ?padro, assim:
?dope
improvvel, at mesmo tolice da sua parte, assumir que esse erro s ocorreu uma
vez. Voc pode repertir a ltima busca pressionando
n
ou, na lngua do vi, "next match" (prxima ocorrncia).
No suficiente somente identificar o seu erro. O prximo passo, conforme a
maioria das doutrinas religiosas e pastores da televiso, consert-lo e se certifica
r
de que ele no vai acontecer de novo. O vi tambm pode ajud-lo nisso tambm,
ainda que isso involva memorizar um comando que, a primeira vista, provavelmente
vai te deixar perguntando se Deus existe mesmo...
:1,$s/padro_a_encontrar/padro_para_substituir/g
No caso de voc estar se perguntando de onde o "s" veio, a abreviao do
comando "substituir". O 1 e o $ so os smbolos que indicam a faixa onde a
substituio deve ocorrer - nesse caso, do incio do documento [linha 1] at o fim
[$]. O "g" um flag que indica que todas as ocorrncias devem ser substitudas.
Logo, no exemplo acima, o comando para substituir a palavra "dope" por "hope"
:1,$s/dope/hope/g
Se pelo menos conseguir o nmero do telefone da Leia fosse to fcil assim...
Bookmarks, Buffers...
O vi tambm permite que voc defina "bookmarks" (marcadores) no seu documento
para facilitar o salto entre sees especficas de arquivos grandes. Como um exemplo,
considere os seguintes blocos de texto:
...este documento delineia uma proposta para a estrutura corporativa da Carros
Potentes Ltda, uma companhia no negcio de produo e venda... [pgina 2]
...o presidente da Carros Potentes Ltda, James van Hausen, que, em sua adolescnci
a
desvairada, era muito conhecido por derrubar rvores usando carssimos carros
esporte, conseguiu... [pgina 137]
E ento, vamos colocar alguns bookmarks? Na pgina 2, mova o cursor at a
palavra "documento", e digite
ma
Isso coloca um bookmark, identificado pela letra "a", na posio do cursor. Agora v
at a pgina 137 e adicione um bookmark chamado "b" na palavra "carros". Para
voltar para a pgina 2, tudo que voc precisa fazer digitar
`a
e para chegar pgina 137, simplesmente digite
`b
Qualquer letra minscula pode ser usada como um identificador de bookmark.
Obviamente, voc est limitado a um total de 26 bookmarks por arquivo - mas, na
maoiria das vezes, isso mais que suficiente. Se voc precisar de mais que isso eu
sugiro fortemente que voc faa terapia.
Alm dos mltiplos bookmarks, o vi tambm possui mltiplos buffers. Se voc
esteve prestando ateno, sabe que todo o material que voc apaga ou copia vai para
um buffer temporrio at ser substitudo ou removido. Mas o vi tambm possui
"buffers com nome" - como se fossem armrios, esses buffers podem ser usados para
guardar diferentes blocos de texto, deixando-os disponveis para insero aonde
forem necessrios.
Como um exemplo, d uma olhada nesse pedao de um texto que me foi entregue por
uma de minhas ex-alunas:
...coelinhas (N.T.: da Playboy americana) parecem ter uma vida muito boa. Tudo o
que elas fazem ficar na praia, bebendo pina coladas e passando bronzeador. De ve
z
em quando, elas se levantam e jogam um pouco de voleyball. Parece divertido - ao
nde
eu assino?...
Tenho certeza que vocs entendem porque eu falei "ex-aluna"...
Agora vamos supor que eu quisesse trocar de posio as frases "bebendo pina
coladas" e "passando bronzeador". Isso o que eu faria:
1. Mover o cursor para o comeo da palavra "bebendo"
2. Apagar as trs palavras e mov-las para um buffer chamdo "p"
"p3dw
3. Mover o cursor para o comeo da palavra "passando"
4. Apagar essas duas palavras e mov-las para um buffer chamado "s"
"s2dw
5. Mover o cursor de volta para antes da palavra "e"
6. Inserir o contedo do buffer "s"
"sp
7. Mover o cursor para depois da palavra "e"
8. Inserir o contedo do buffer "p"
"pp
9. Me parabenizar espalhafatosamente, como eu estou fazendo agora!
Como voc pode ver, para usar um buffer, basta preceder o comando normal de
copiar/apagar/substituir com o identificador do buffer. Um identificador de buff
er
consiste de uma aspas dupla seguida por uma letra minscula. No exemplo acima,
tanto "s quanto "p so identificadores de buffers.
Devo lembr-los aqui que nem os bookmarks, nem os buffers so mantidos quando
voc sai do editor.
Sobre arquivos e janelas
Voc j viu que
$ vi nome_do_arquivo
inicia o vi com o arquivo especificado j carregado. Mas por que se restringir a u
m?
Voc pode carregar mltiplos arquivos desta forma:
$ vi arquivo1 arquivo2 arquivo3
Para alternar entre os arquivos use esses comandos:
:next = vai para o prximo arquivo na lista
:rewind = vai para o primeiro arquivo na lista
:last = vai para o ltimo arquivo na lista
Para sair de todos os arquivos de uma vez use:
:qa!
para sair sem salvar, ou
:wqa
para salvar todas as alteraes e sair.
Aps j ter iniciado o vi, voc pode carregar um novo arquivo no editor com o
comando "editar", assim:
:e /caminho/para/arquivo.txt
Se voc preferir inserir o contedo de outro arquivo diretamente no documento que
voc est editando agora existe um comando de leitura "read" feito justamente para
isso. Tente:
:read /caminho/para/arquivo_a_ser_inserido.txt
Se voc um programador, definivamente vai gostar da funcionalidade do vi de te
mostrar mltiplas vises do mesmo arquivo, que no jargo computacional
chamado de "window splitting" (diviso de janelas). E o comando , naturalmente
:split
Cada uma das janelas criadas pode ser manipulada de forma independente das outra
s,
apesar das mudanas feitas no arquivo ficarem imediatamente visveis em todas elas.
Vamos avanar um pouco mais. Que tal carregar arquivos diferentes em cada uma das
janelas? Por exemplo, no seria timo se voc pudesse carregar um arquivos HTML
em uma, um script CGI associado em outra, alguma documentao de ajuda numa
terceira e ter todas as trs visveis ao mesmo tempo?
Bem, voc pode. Basta usar o comando "new" (novo) para criar uma nova janela para
cada um dos arquivos, assim:
:new form.html
:new mailform.cgi
:new help.txt
Para alternar entre as janelas, use
^W W [isso ctrl-W seguido por um W]

Interesses relacionados