Nas versões atuais de linux, o editor que vem instalado é o
VIM (
Vi
IMprooved), o
vi melhorado, não o vi propriamente dito. Mesmo assim o comando
vi ainda é usado, sendo um link para o
vim. Por este motivo irei me referir ao
VIM, tanto como
VI quanto como
VIM.
O
VIM/VI, é um editor de texto em linha de comando, que mesmo parecendo simples, é uma grande e poderosa ferramenta.
A primeira vista ele pode parecer um "monstro de sete cabeças", mas na verdade não é tão difícil usá-lo e, após se acostumar com os seus comandos básicos, ele pode se tornar um grande aliado.
Nota: Quando for me referir à uma tecla especial ou valor informado por usuário em um comando, colocarei entre colchetes
[]. Exemplo:
[ctrl] irá se referir à tecla
ctrl (control). Isto serve para evitar possíveis confusões.
Tópicos:
Modos de uso (comando e inserção).
Apagando
Desfazendo alterações
Copiar, recortar e colar
Movimentando-se
Localizar
Substituir
Comandos diversos
Trabalhar com vários arquivos
Configurações úteis
Os modos de uso
Basicamente o
VIM tem dois modos de operação. O modo de inserção e o modo de comando. No modo de comando, as teclas assumem papéis especiais, suas combinações servem para executar comandos e operações. O modo de inserção, como o nome já diz, serve para editar e inserir texto. Vamos ver a seguir como alternar entre estes comandos.
Abrir
Para abrir um arquivo com o
VI basta digitar:
vi nome_do_arquivo
ou
vim nome_do_arquivo
Nota: caso o nome do arquivo não existe, o vi abrirá um arquivo em branco como
[new file] e ao salvar ele criará o novo arquivo.
Existem alguns parâmetros que podem ser passados ao abrir o arquivo, mas estas informações não serão mostradas aqui, para mais detalhes veja a man page do vim.
Salvar, editar e sair
Para salvar um arquivo digite:
:w
Para salvar as alterações em um novo arquivo diferente do original, basta acrescentar o nome desejado:
:w novo_arquivo
Para inserir conteúdo de outro arquivo:
:r nome_do_outro_arquivo
Para abrir um outro arquivo para edição depois de abrir o vi:
:e arquivo
Para salvar e sair:
:wq
ou
:x
ou
ZZ (tome cuidado, pois ao contrário do
:wq ou
:x, este é muito mais fácil de ser digitado por engano)
Para sair sem salvar as alterações:
:q!
Modo de Inserção
Agora vem os comandos para entrar de diferentes formas no modo de inserção, para voltar ao modo de comando aperte a qualquer momento a tecla
ESC (escape).
i - entra no modo de inserção começando a digitação à esquerda do cursor.
I - entra no modo de inserção começando a digitação no início da linha.
a - entra no modo de inserção começando a digitação à direita do cursor.
A - entra no modo de inserção começando a digitação no final da linha.
o - começa a digitação em uma nova linha após a atual.
O - começa a digitação em uma nova linha antes da atual.
r - substitui o carácter atual (sob o cursor) pelo novo digitado.
R - entra em modo de inserção substituindo os próximos caracteres conforme digita-se (equivale à tecla
insert nos editores gráficos).
[n]cw - Funciona igual ao
R, com a diferença que substitui apenas
[n] palavras, após continua inserindo sem substituir.
[n]cc - O mesmo que o
cw, mas ao invés de definir o número de palavras, defini-se o número de linhas.
Apagando
x - apaga carácter sob o cursor.
X - apaga carácter à esquerda do cursor.
dw - apaga da posição atual até o final da palavra.
db - apaga da posição atual até o inicio da palavra.
dd - apaga linha inteira.
[n]dd - apaga
[n] linhas a partir da atual.
dt[carácter] - apaga até
[carácter].
D - apaga da posição atual até o final da linha.
d$ - apaga da posição atual até o final da linha.
d0 - apaga da posição atual até o início da linha.
dG - apaga da posição atual até o final do arquivo.
dgg - apaga da posição atual até o início do arquivo.
d[n]b - apaga até
[n] palavras anteriores.
df[palavra] - apaga até palavra especificada.
Desfazendo alterações
u - desfaz última alteração.
U - desfaz última alteração na linha atual.
Copiar, recortar e colar
y - copia carácter atual.
[n]yy - copia o número de linhas especificado, partindo da atual. Se não informado número copia apenas a atual.
p - cola a última coisa copiada ou apagada.
"[letra][n]yy - copia linha ou linhas para buffer correspondente. Exemplo: para copiar uma linha para o buffer
d digite:
"dyy
"[letra][n]dd - apaga
[n] linhas a partir da atual, movendo as para o registrador
[letra] (Recortar).
"[letra]p - cola conteúdo do buffer correspondente.
Nota: usar os buffers permite copiar conteúdo entre arquivos, copiar conteúdos diferentes simultaneamente e também evita que os dados se percam ao apagar algo.
Nota 2: em teclados internacionais (aqueles sem o ç e com teclas posicionadas diferente), configurados para pt-br ou qualquer idioma que use acentuação, será necessário digitar duas vezes " ou "[espaço], porque senão ao invés de digitar o comando "ayy você estará digitando äyy.
Movimentando - se
h - move para a esquerda
H - move para a primeira linha mostrada na tela.
l - move para a direita.
L - move para a última linha mostrada na tela.
j - move para baixo.
k - move para cima.
w - move para a próxima palavra (considera pontuação uma palavra).
W - move para a próxima palavra (considera pontuação como parte da palavra).
b - move para a palavra anterior (considera pontuação uma palavra).
B - move para a palavra anterior (considera pontuação parte da palavra).
e - move para o fim da palavra (não inclui pontuação)
E - move para o fim da palavra (considera pontuação parte da palavra)
$ - move para o final da linha.
0 - move para o inicio da linha.
^ - move para o inicio da linha (se seu teclado estiver configurado para aceitar acentos, deve ser apertada duas vezes a tecla para aceitar o comando).
gg - move para o inicio do arquivo.
[n]G - move para linha de número especificado.
G - move para última linha do arquivo.
f[carácter ou texto] - move o cursor para a primeira ocorrência, na linha atual, do carácter ou texto informando.
[ctrl]e - move a tela para cima, sem modificar a posição atual do cursor.
[ctrl]y - move a tela para baixo, sem modificar a posição atual do cursor.
Obs: se for digita um número e um comando de movimentação, como
h,
j,
k ou
l o cursor repetirá o comando tantas vezes quanto informado, ou seja digitando
22j o cursor descerá
22 linhas. Isto serve também para outros comandos como inserção, delete, copia,etc.
Nota: as teclas direcionais, a tecla
ENTER e a barra de espaço, muitas vezes também funcionam para movimentação, mas dependendo do teclado ou em alguns clientes ssh, eles apenas inserem carácteres especiais. Aconselho a se acostumar a usar as teclas de movimentação do
VI, pois após acostumar a usá-las, a movimentação nos textos se torna muito mais rápida e fácil.
Localizar
f[palavra] - Localiza a primeira ocorrência posterior da palavra ou carácter na mesma linha.
F[palavra] - Localiza a primeira ocorrência anterior da palavra ou carácter na mesma linha.
; - repete busca por palavra na mesma linha (mesmo sentido).
, - repete busca por palavra na mesma linha (sentido inverso).
/[pesquisa] - Busca primeira ocorrência de
[pesquisa] posterior a posição atual.
?[pesquisa] - Busca primeira ocorrência de
[pesquisa] anterior a posição atual.
n - repete busca no mesmo sentido.
N - repete busca no sentido contrário.
Substituir
[n]s - substitui
[n] caracteres por novo texto digitado.
[n]S - substitui
[n] linhas por novo texto digitado.
:[intervalo]s/[x]/[y]/[opções] - substitui a ocorrência de
[x] por
[y].
Intervalos: [n linha inicial][n linha final] - intervalo definido.
..[n linha final] - da linha atual até a linha de número definido.
..$ - da linha atual até o fim do arquivo
% - em todo arquivo.
Opções: g - todas as ocorrências na linha.
c - pede confirmação para cada substituição.
Exemplo:
Substituir todas as ocorrências de vini no arquivo para vinicius, sem confirmação.
:%s/vini/vinicius/g
Substituir todas ocorrências da linha atual até a linha 42 de it para ti, pedindo confirmação.
:..42s/it/ti/gc
& - repete último comando de substituição.
Comandos diversos
. - repete comando anterior.
J - junta duas linhas.
K - procura por palavra atual no manual.
V - seleção de linhas visual (use os comandos de movimentação expandir a seleção).
v - seleção de letras visual (use os comandos de movimentação para expandir a seleção).
~ - muda caso da letra atual ou seleção.
:sh - abre o shell. Após fechar o shell, retorna ao vim.
!![comando] - insere saída do comando no arquivo.
Trabalhar com vários arquivos ao mesmo tempo
Você pode abrir dois arquivos em visualização compartilhada ou normal.
Trabalhar com vários arquivos (normal):
Abrir
vi arquivo1 arquivo2
Comandos
:n - ir para o próximo arquivo da lista
:prev - voltar para arquivo anterior
:args - ver arquivos abertos
Modo tela dividida
Este modo é mais interessante, pois podemos ver todos os arquivos ao mesmo tempo
Abrir
vi -o arquivo1 arquivo2
Após o vi estar aberto, para abrir mais arquivos use:
:sp nome_do_arquivo
ou
:split nome_do_arquivo
Alternar entre arquivos
[ctrl]wj - Pula para o arquivo de cima.
[ctrl]wk - Pula para o arquivo de baixo.
Configuraçoes úteis
:set sw=[n] - Define o tamanho em caracteres da tabulação. Para usar a tabulação.
[n]>> - Identa
[n] linhas a partir da atual.
[n]<< - Retira identação
[n] linhas a partir da linha atual.
:set [opção] - para ativar algumas opções do vim.
Opções:
ai - identação automática
ic - Ignorar caso numa busca (maiúscula/minuscula)
nu - Mostra numeração de linha.
sm - Ao fechar um parentese, chave ou colchete, é mostrado onde ele foi aberto. (Se não foi aberto soa um bip).
Para cancelar alguma opção digite:
:set no[opção]
Exemplo:
:set nonu - desativa numeração de linhas.
Estas configurações se perdem ao reiniciar o vim. Para definir configurações padrões na inicialização, crie (ou modifique caso já exista) um arquivo com o nome "
.exrc" na sua pasta home. Digite os comandos sem
: .
Exemplo
~/.exrc :
set sw=5
set nu
set sm
Este arquivo definirá a identação 5. Aparecer número de linhas e mostrar a combinação de parênteses.
Este é o final, ficou mais extenso do que eu imaginei, mas acho que já serve como uma boa base para usar o vim.
Para quem ainda não achou um uso para o vim, aqui vai algumas situações em que ele já me foi útil ou ainda é.
* Configurações de arquivos de configuração em servidores.
* Tratar arquivos csv muito grandes. Eles costumam travar a maioria dos editores. Já abri arquivos com mais de 1 milhão de linhas.
* Substituições de ocorrências de palavras são relativamente rápidas, comparadas a editores gráficos.
* Digitar textos rápidos.
* Criar posts =P
* Nunca usei para programar (a não ser alguns ajustes rápidos em php), mas conheço gente que programa com o vim.
Uma alternativa para o vim, mais simples e talvez mais fácil de manipular é o
mcedit, ele é muito similar àquele editor de texto que tinha no dos (telinha azul, letras brancas, comandos nas teclas de função
F1,F2,F3,F4...). Eu particularmente não gosto de usá-lo, mas tenho um amigo que usa, e diz que é um ótimo quebra galho. Para quem quiser o
mcedit pode ser encontrado nos repositórios da maioria das distribuições.
Para quem quiser saber mais a respeito do
mcedit (em Inglês) - http://linux.die.net/man/1/mcedit.
Isso é tudo pessoal! Espero ter ajudado.
:wq