Em diversas situações é necessário (ou mais prático) editar arquivos de texto diretamente no terminal. Um servidor Linux nem sempre terá um ambiente gráfico instalado. Além disso, é muito comum a administração remota de servidores via linha de comando. Para possibilitar a edição de arquivos em modo texto, uma série de editores foram desenvolvidos, dentre eles (disponíveis no Debian) temos:
emacs
;vi
;jed
;joe
;nano
;etc
.
Os dois primeiros exemplos de editores citados possuem grande importância e são considerados editores padrão do UNIX, sendo encontrados em qualquer sistema nele baseado como: Linux, BSDs, Solaris, AIX, IRIX, MacOS X, HP-UX etc. Existem, inclusive, versões para o MS-DOS e Microsoft Windows. Devido à sua grande importância, existe uma rivalidade histórica entre estes editores conhecida como "a guerra dos editores". Atualmente, boa parte das distribuições Linux disponibiliza por padrão apenas o editor vi
, ou uma versão melhorada dele, conhecida como vim
(vi improved).
O vi
possui dois modos de funcionamento, a saber:
Para iniciarmos o vi
abrindo um arquivo que desejamos editar, basta executar:
aluno@debian:~$ vi <nome-do-arquivo>
O vi
será iniciado no modo normal, exibindo o conteúdo do arquivo na tela. Tudo o que for digitado será interpretado como um comando enviado pelo usuário para o editor.
Para alternarmos do modo normal para o de edição existem uma série de comandos possíveis:
i ⇒
Alterna para o modo de edição, com o cursor posicionado antes do caractere atual;a ⇒
Alterna para o modo de edição, com o cursor posicionado após o caractere atual;o ⇒
Alterna para o modo de edição, com o cursor posicionado em uma nova linha abaixo da atual.
Para encerrar a edição do arquivo e voltar ao modo normal basta pressionar a tecla <Esc>
.
x ⇒
Exclui o caractere sobre o cursor;nx ⇒
Exclui n caracteres, a partir do cursor;dw ⇒
Exclui o restante de uma palavra, a partir do cursor;ndw ⇒
Exclui n palavras, a partir do cursor;dd ⇒
Exclui a linha atual;ndd ⇒
Exclui n linhas, a partir da atual.Caso apaguemos algo por engano, podemos desfazer os últimos comandos com:
u ⇒
Desfaz o último comando;nu ⇒
Desfaz os n últimos comandos.nG ⇒
Vai para a linha n do arquivo. Apenas G
vai para o final do mesmo;n+ ⇒
Avança n linhas;n- ⇒
Retrocede n linhas./palavra ⇒
procura por palavra
no arquivo;n ⇒
Mostra a próxima ocorrência;N ⇒
Mostra a ocorrência anterior;?palavra ⇒
procura por palavra
no arquivo, no sentido inverso.:%s/palavra/nova/ ⇒
Procura por palavra
e substitui por nova
da posição atual até o final do arquivo;:%s/palavra/nova/g ⇒
Procura por palavra
e substitui por nova
em todo o arquivo;:%s/palavra/nova/gc ⇒
Procura por palavra
e substitui por nova
em todo o arquivo, solicitando confirmação.yy ⇒
Copia uma linha atual do texto;nyy ⇒
Copia n linhas a partir da atual;p ⇒
Cola, após a linha atual, o último texto copiado.
OBS: Os comandos x
, dw
e dd
na verdade recortam um texto, o mesmo também pode ser colado com p
.
v ⇒
Seleciona com as setas (→ ou ←) um conjunto de caracteres;V ⇒
Seleciona com as setas (↓ ou ↑) um conjunto de linhas;<Ctrl>V ⇒
Seleciona com as setas (↓, →, ←, ↑) um bloco.
OBS: Nas três situações, o texto selecionado pode ser copiado com y
, recortado com d
ou colado com p
.
Os comandos gerais são relacionados ao funcionamento do editor, e não a edição do texto. Dentre os inúmeros existentes vale destacar:
:w ⇒
Salva o arquivo;:w teste.c ⇒
Salva o arquivo com o nome teste.c
;:q ⇒
Sai do vi
;:q! ⇒
Sai do vi
sem salvar o arquivo;:r fulano.txt ⇒
Insere o conteúdo do arquivo fulano.txt
no que está sendo editado;:syntax on ⇒
Reconhece a sintaxe do arquivo;:set number ⇒
Mostra o número das linhas;:set ai ⇒
Habilita o autoindent.