O Vi é um editor de textos do Unix. Ele vem por padrão em todas as distribuições Linux, portanto é bom conhecer alguns de seus comandos básicos. A vantagem desse editor sobre outros, como GEdit ou KEdit, é que o Vi roda em terminal, sem interface gráfica, o que permite utilizá-lo num ambiente de linha de comando, como numa conexão por SSH.
1. Modos de trabalho do Vi
2. Salvando arquivos e saindo do editor
3. Movimentando o cursor
4. Navegação no texto
5. Movimentando textos
6. Apagando texto
7. Copiando e colando textos
8. Desfazendo ações
9. Localizando textos
10. Localizando e substituindo textos
11. Executando comandos no Shell sem sair do Vi
12. Inserindo no texto a saída de um comando Shell
13. Facilidades para programadores e desenvolvedores
14. Configuração do ambiente (comando set
1. Modos de trabalho do Vi
O Vi possui dois modos de trabalho: modo de inserção e modo de comando. Ao ser iniciado, o programa estará sempre em modo de comando. Para alternar do modo de comando para o modo de inserção, há duas maneiras:
a -> Ao pressionar a tecla “a”, o modo de inserção é ativado e o cursor de texto é posicionado logo após o caractere corrente;
i -> Ao pressionar a tecla “i”, o modo de inserção é ativado e o cursor de texto é posicionado à esquerda do caractere corrente.
Para alternar do modo de inserção para o modo de comando, basta pressionar a tecla “ESC”.
2. Salvando arquivos e saindo do editor
Entrar no Vi é fácil. Sair, à primeira vista, é um dilema, podendo causar claustrofobia digital. :P
Os seguintes comandos devem ser executados em modo de comando, claro.
:w -> salva o arquivo corrente. É possível passar um argumento, para definir o nome do arquivo. Por exemplo: :w arq1.txt
ZZ -> salva o documento e sai do Vi. É conhecido como o comando “Zalva e Zai”. :)
:wq -> Salva o arquivo e sai do Vi
:w! -> O arquivo será salvo mesmo se aberto no modo somente leitura (readonly)
:q -> Sai do Vi. Se o arquivo não foi salvo, o programa emitirá um alerta.
:q! -> Força a saída, mesmo que o arquivo tenha sido modificado e não tenha sido salvo anteriormente
Os comandos “:wq” e “ZZ” fazem praticamente a mesma coisa. Porém, “ZZ” é mais rápido de se digitar e mais fácil de lembrar (Zalva e Zai!). ;)
3. Movimentando o cursor
Isso parece fácil. Basta usar as setas. Mas e se você estiver num teclado sem as teclas das setas? Pode parecer jurássico, mas pode acontecer. Nesse caso, use os seguintes comandos:
h -> Desloca para a esquerda
j -> Desloca para baixo
k -> Desloca para cima
l -> Desloca para a direita
É possível digitar um número antes desses comandos, informando o número de deslocamentos desejado.
4. Navegação no texto
[n]$ -> Move o cursor para o fim da linha. Se especificado um número antes do “$” (cifrão), move para o final da linha com o número especificado (a linha corrente é 1; a conseguinte é 2 e assim sucessivamente)
^ -> Move o cursor para o início da linha corrente. Se o teclado for ABNT ou similares, com teclas para acentuação, você terá de digitar a tecla duas vezes, para o Vi compreender o comando literalmente, não como um acento para outra letra.
0 (número zero) -> Equivale ao comando “^”.
[n]A -> Move o cursor para o fim da linha e entra em modo de inserção. É possível inserir um numero antes do “A”, como no comando “$”.
[n]G -> Se não for especificado o número “n”, o cursor será movido para o fim do arquivo. Caso contrário, desloca o cursor para a linha “n”.
5. Movimentando textos
OBS: ^LETRA corresponde à combinação das teclas CTRL e a letra especificada.
^e -> Move o texto para cima, independentemente da posição do cursor.
^y -> Move o texto para baixo, independentemente da posição do cursor.
6. Apagando texto
[n]x -> Apaga o caractere sob o cursor. É possível especificar o número de caracteres a serem removidos.
[n]X -> Apaga o caractere à esquerda do cursor. É possível especificar o número de caracteres a serem removidos.
[n]dd -> Apaga a linha corrente. É possível especificar o número de linhas a serem removidas após a linha corrente.
D -> Apaga todos os caracteres da posição corrente até o final da linha.
d$ -> Equivale ao comando “D”.
d^-> Apaga todos os caracteres da posição corrente até o início da linha.
dw -> apaga os caracteres da posição corrente até o final da palavra.
7. Copiando e colando textos
Para copiar uma linha de textos, usamos o comando “yy”. É possível usar “[n]yy” para definir o número de linhas a serem copiadas.
Para colar o texto copiado, usa-se “[n]p” para colar à direita do cursor ou “[n]P” para colar à esquerda do cursor. O número “n” (opcional) determina o número de vezes que o texto será colado.
8. Desfazendo ações
Não existe o famoso CTRL+Z no Vi. Mas há como desfazer comandos.
u -> Desfaz o último comando
U -> Desfaz todos os comandos executados na linha corrente
9. Localizando textos
/texto -> Busca pela ocorrência da palavra “texto” a partir da posição corrente do cursor até o fim do arquivo.
?texto -> Busca pela ocorrência da palavra “texto” a partir da posição corrente do cursor até o início do arquivo.
n -> Repete o último comando de busca (next)
10. Localizando e substituindo textos
Os comandos abaixo assemelham-se à sintaxe dos comandos de substituição do sed.
:s/busca/troca -> Encontra a primeira ocorrência de “busca” e a modifica para “troca”, na linha corrente.
:s/busca/troca/g -> Faz a mesma coisa que o comando acima, porém o executa em toda a linha.
É possível definir o intervalo de linhas onde a busca será feita, da seguinte forma:
:inicio,fims/busca/troca.
Por exemplo:
:1.42s/busca/troca -> Executa a troca no intervalo das linhas 1 a 42
:..42s/busca/troca -> Executa a troca a partir da linha atual até a linha 42
:..$s/busca/troca -> Executa a troca a partir da linha atual até o fim do arquivo
A busca pode ser feita usando Expressões Regulares.
11. Executando comandos no Shell sem sair do Vi
Para executar um comando no shell sems air do Vi, basta proceder da seguinte forma:
:! comando_shell
Por exemplo:
:! ls -l
12. Inserindo no texto a saída de um comando Shell
O comando anterior executa uma ação no Shell, mas descarta a saída. Se você pretende inserir a saída do comando no texto que está editando no Vi, basta proceder assim:
!! comando_shell
Por exemplo
!! ls -l
13. Facilidades para programadores e desenvolvedores
Indentação
Para inserir indentação, primeiro devemos definir o tamanho da tabulação, usando o comando :set (mais a frente detalharei esse comando).
:set sw=n
Onde “n” é o tamanho da tabulação.
Feito isso, poderemos utilizar os seguintes comandos:
[n]>> -> Indenta n linhas (ou apenas a linha corrente se “n” for omitido)
[n]<< -> Retira a indentação de n linhas (ou apenas da linha corrente se “n” for omitido)
Correspondência entre parênteses, colchetes e chaves
Com o cursor sobre um sinal de parênteses, colchete ou chave, execute o comando “%”. Se houver um caractere correspondente, o cursor será movido para ele.
14. Configuração do ambiente (comando set
:set <opcão> -> Ativa <opção>
:set no<opção> -> Desativa <opção>
:set <opção>=<valor> -> Define <valor> à <opção>
:set <opção>? -> Exibe o valor de <opção>
:set all -> Exibe todas as opções
Algumas opções do comando set:
ai -> Autoindent. Indentação automática
ic -> Ignore case. Ignora maiúsculas e minúsculas numa busca.
nu -> Numeração de linhas
sw -> shift width. Tamanho da tabulação
sm -> show match. Ao fechar um parêntese, colchete ou chave, o Vi mostra onde ele foi aberto. Caso não haja correspondência, um bip será emitido.
Para não precisar definir todas essas configurações sempre que iniciar o Vi, você pode criar um arquivo de configuração. O Vi busca no arquivo ~/.exrc (arquivo oculto exrc na home do usuário) as configurações iniciais. Logo, você pode criar um arquivo assim:
set sw=4 set ai set nu
Links interessantes:
Vim Editor : 100 commands every admin should know







Isso nào é `vi` nao, mas é `vim`. E sim, tem diferença.
Ótimo artigo!
Sempre preferi usar o JOE, que não é nativo, o fato é que não conhecia o VI de verdade :), agora mudei os meus conceitos ..