Comando vi no Linux (Editor de Textos) [Guia Básico]

O Comando vi no Linux é um editor de textos ASCII poderoso e muito usado na interface de caractere do Linux para edição de arquivos e programas. Seu uso não é muito intuitivo à primeira vista, mas a edição simples de textos pode ser feita usando poucos comandos. 

Ele pode ser muito útil para pequenas correções pontuais, principalmente em ambiente de produção. Então não é má ideia saber lidar com esse editor de textos universalmente disponível nas distribuições Linux.

Basicamente ele tem dois modos de trabalho: o modo de operação e o modo de inserção. No modo de operação o vi espera comandos que vão realizar alguma ação. No modo de inserção, tudo que for digitado é considerado texto. 

vi_pt Comando vi no Linux (Editor de Textos) [Guia Básico]Figura 20 – Vi

O modo de operação é acessado através da tecla ESC. O vi sempre inicia nesse modo. Para entrar no modo de inserção, basta a pressionar a tecla INSERT ou o comando “i”. 

Para fazer a edição simples de arquivos no vi:

$ vi nomedoarquivo

Altere o modo para inserção com a tecla INSERT ou pressionando a tecla “i“. O cursor pode ser movido neste modo com as setas de posição. Ao terminar a digitação aperte a tecla ESC e digite:

:w para salvar as modificações; 
:wq para salvar e sair do vi;
:q! para sair sem salvar;

Veja a seguir a tabela de comandos aceitos pelo vi. Todos os comandos deverão ser dados no modo de operação. O sinal “+” indica teclas que devem ser pressionadas simultaneamente. A vírgula indica que as teclas devem ser digitadas em sequência.

AçãoComando
Abrir Arquivo:e arquivo
Salvar Arquivo:w
Salvar Arquivo Como:w arquivo
Salvar e Sair:wq
Sair sem salvar:q!
Gravar conteúdo se alterado:ZZ
Para marcar um texto para cópia ou cortev, setas de direção
Para copiar texto marcadoy
Para cortar texto marcadoc
Para colar texto marcadop
Copiar uma linhayy
Copiar até o final do arquivoyG
Apagar texto à frente (DEL)x
Apagar texto para trás (BACKSPACE)X
Apagar uma linhadd
Apagar até o final do arquivodG
Apagar até o final da linhaD
Localizar texto à frente/texto
Localizar novamente/
Localizar texto para trás?texto
Localizar novamente?
Desfazer alteraçõesu
Refazer alteraçõesCTRL+r
Formatar Alinhamento Centralizado:ce
Alinhamento à direta:ri
Alinhamento à esquerda:le
Abrir nova janela:new
Dividir a janela atual em duas:split
Abrir arquivo em nova janela:split arquivo
Ir para janela de cimaCTRL+w, k
Ir para janela de baixoCTRL+w, j
Ir para o início da linha0
Ir para o final da linha$
Ir para o final do arquivoG
Ir para a linha de baixoj
Ir para a linha de cimak
Ir para a esquerdah
Ir para a direital
Ir para o final da telaL
Ajuda:help
Insere texto antes do cursori
Insere texto depois do cursora
Insere texto em uma nova linhao

Truques de Programadores com Vi

O vi ao ser executado procura por um arquivo de configuração  chamado “.vimrc” no diretório HOME dos usuários. Nem sempre este arquivo existe, mas pode ser criado pelo usuário para fazer algumas coisas bacanas com o vi, tais como:

Colorir a sintaxe

Para colorir a sintaxe de arquivos com código fonte, deve-se habilitar a diretiva “sintax on” no arquivo .vimrc, com o comando:

$ echo 'sintax on' >> ~/.vimrc

Desta forma, o vi irá colorir o texto, reconhecendo diversas linguagens de programação. Utilize as aspas simples nestes comandos, como demonstrado.

vim-sintaxe_pt Comando vi no Linux (Editor de Textos) [Guia Básico]Figura 21 – Sintaxe on no vim

Enumerar as linhas

Outro recursos interessante no vim é a enumeração das linhas, que permite debugar facilmente um código fonte. Para habilitar esse recurso deve-se usar a diretiva “set number” no arquivo .vimrc, com o comando:

$ echo 'set number' >> ~/.vimrc

Desta forma, o vi irá enumerar o texto, facilitando a depuração do código.

vim-enumerar_pt Comando vi no Linux (Editor de Textos) [Guia Básico]Figura 22 – Enumerar as linhas

Depurador de Sintaxe

Esta opção do vi é muito interessante para os programadores. Ela permite que uma tecla seja mapeada para acionar um compilador ou interpretador de linguagem, com o objetivo de se verificar a sintaxe, sem a necessidade de sair do editor de textos.

No exemplo, utiliza-se a opção “-l” do php, que faz somente uma checagem de sintaxe. A combinação de teclas escolhida foi o CTRL B, que executa o comando php -l no arquivo fonte.

$ echo 'map <C-B> :!php -l %<CR>' >>~/.vimrc

Desta forma, para verificar a sintaxe de um código php, basta apertar o CTRL B, que o interpretador php é acionado para verificar a sintaxe:

vim-erro1_pt Comando vi no Linux (Editor de Textos) [Guia Básico]Figura 23 – Código php com erro

Neste exemplo, induzi um erro de falta de “;”. Ao pressionar CTRL B, o php dirá que há um erro de sintaxe:

vim-erro2_pt Comando vi no Linux (Editor de Textos) [Guia Básico]Figura 24 – Chamada ao interpretador

Esta facilidade do vim é extremamente útil em linguagens interpretadas, que permitem verificar a sintaxe sem a necessidade de abandonar o editor.

Para outras linguagens, pode-se usar o mesmo conceito, alterando a opção de checagem de sintaxe:

  • PERL:   echo ‘map <C-P> :!perl -c %<CR>’ >>~/.vimrc
  • PYTHON:  echo ‘map <C-Y> :!python -d %<CR>’ >>~/.vimrc

Undo infinito

A tecla “u” no modo de comandos do vi permite voltar ao texto anterior, desfazendo as alterações. No entanto, ao sair do vi, a capacidade de desfazer alterações é perdida. Assim, se você estiver editando um código fonte, e sair do editor, não será mais capaz de usar o recurso de desfazer alterações.

Mas há uma solução para o vi manter um histórico de alterações, considerada um verdadeiro salvador de vidas.

Ele permite que o vi mantenha um histórico de alterações de arquivos em um diretório especial no HOME do usuário. 

Para habilitar esse recurso, deve-se executar os seguintes comandos:

Primeiro cria-se o diretório para armazenar o histórico no HOME do usuário:

$ mkdir -p ~/.vim/undodir

Depois deve-se habilitar o recurso de undofile:

$ echo 'set undofile' >>~/.vimrc

Por último, configura-se o diretório para armazenar esses arquivos, criado no primeiro passo:

$echo 'set undodir=~/.vim/undodir' >>~/.vimrc

Desta forma, o vi irá manter o histórico de alterações, possibilitando desfazer alterações com a tecla “u”.

De vez em quando, é interessante limpar o conteúdo do diretório ~/.vim/undodir.

Trocar texto (substituir)

O recurso de substituir um texto por outro no vim também ajuda muito para fazer substituições de código no vi.

Para fazer uma substituição, entre no modo de comando com a tecla ESC e depois digite:

:%s/texto a ser procurado/texto a ser substituído/g

Desta forma, o vim irá procurar por todas as ocorrências do texto a ser procurado e irá trocar por texto a ser substituído no documento todo.

Se você quiser que o vi apenas substitua a primeira ocorrência, o comando é o mesmo, mas sem o “g” no final:

:%s/texto a ser procurado/texto a ser substituído/

Se o texto a ser procurado ou substituído conter uma barra simples “/“, deve-se usar uma contra-barra “\” antes, para que o vi saiba que a “/” no texto não seja interpretada como um separador. 

Neste exemplo, a ocorrência de “/etc” será substituída por “/var“: 

:%s/\/etc/\/var/g

Outra substituição interessante é colocar todas as linhas dentro de uma tag HTML, como por exemplo, de parágrafo:

:s/.*/<p>\r&\r<\/p>/

A expressão .* indica o início da linha, e o “\r” o “return” (final da linha).

Procurar texto

Para procurar um texto no vi, basta apertar a barra “/” no modo de comando e escrever o texto. Desta forma, o vi irá procurar as ocorrências do termo buscado uma a uma, pressionando novamente a tecla “/”.

Um recurso para turbinar as buscas de texto no vi é habilitar o destaque do termo, bem como habilitar o “case insensitive”, possibilitando buscas ignorando se o texto está em caixa alta ou baixa:

Para habilitar o destaque de texto buscado:

$ echo 'set hlsearch' >> ~/.vimrc

Para ignorar se o termo está em caixa alta ou baixa:

$ echo 'set ignorecase' >> ~/.vimrc

Para buscar um texto obedecendo a caixa alta, se o termo conter uma letra em maiúsculo:

echo 'set smartcase' >> ~/.vimrc

Indentação

Um truque interessante do vi é a indentação automática do texto. 

Para arrumar um código fonte com indentação, digite no modo de comando:

gg=G

Desta forma, o vi irá formatar o código, tornando-o mais legível.

Também é possível determinar que o vi indente o código enquanto você programa, variando o espaçamento dependendo do tipo de código fonte.

Para habilitar esse recurso:

$ echo 'filetype indent plugin on'  >> ~/.vimrc

Depois, deve-se criar um diretório chamado “.vim” no diretório HOME, se esse ainda não existir:

$ mkdir ~/.vim

Neste diretório, deve-se criar um arquivo para cada tipo de código fonte, como no exemplo:

$ cat ~/.vim/php.vim 
setlocal shiftwidth=2
setlocal tabstop=2

Neste exemplo, há um arquivo php.vim dentro do diretório ~/.vim.

E nele há duas diretivas:

  • shiftwidth=2  Determina que o número de espaços para auto indentação sejam 2. O padrão são 8 espaços.
  • tabstop=2  Determina o número que espaços que o TAB contém. O padrão são 8 espaços.

Para python por exemplo:

$ cat ~/.vim/python.vim
setlocal expandtab
setlocal shiftwidth=4
setlocal softtabstop=4

Neste exemplo, as diretivas expandtab e softtabstop são para:

  • expandtab  Não faz a troca de TAB por espaços;
  • softtabstop  permite fingir que os TABS são espaços na hora da edição.

Retirar os ^M no final dos arquivos

Geralmente depois de copiar um arquivo texto do Windows para o Linux e editá-lo no vi, o arquivo aparece com códigos “^M” no final de cada linha. 

Desta forma, pode-se fazer o ajuste do arquivo no vi, utilizando o comando abaixo, no modo de comandos:

:e ++ff=dos

O comando de substituição também funciona bem:

:%s/<Ctrl-V><Ctrl-M>/\r/g

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe