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.