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]