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.
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. Confira também o nosso conteúdo com todos os principais processos e comandos no linux.
Ação | Comando |
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 corte | v, setas de direção |
Para copiar texto marcado | y |
Para cortar texto marcado | c |
Para colar texto marcado | p |
Copiar uma linha | yy |
Copiar até o final do arquivo | yG |
Apagar texto à frente (DEL) | x |
Apagar texto para trás (BACKSPACE) | X |
Apagar uma linha | dd |
Apagar até o final do arquivo | dG |
Apagar até o final da linha | D |
Localizar texto à frente | /texto |
Localizar novamente | / |
Localizar texto para trás | ?texto |
Localizar novamente | ? |
Desfazer alterações | u |
Refazer alterações | CTRL+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 cima | CTRL+w, k |
Ir para janela de baixo | CTRL+w, j |
Ir para o início da linha | 0 |
Ir para o final da linha | $ |
Ir para o final do arquivo | G |
Ir para a linha de baixo | j |
Ir para a linha de cima | k |
Ir para a esquerda | h |
Ir para a direita | l |
Ir para o final da tela | L |
Ajuda | :help |
Insere texto antes do cursor | i |
Insere texto depois do cursor | a |
Insere texto em uma nova linha | o |
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.
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.
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:
Neste exemplo, induzi um erro de falta de “;”. Ao pressionar CTRL B, o php dirá que há um erro de sintaxe:
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
Tag:/dev, bash, certificação, certificaçãolinux, code, Comptia, developer, empreendedorismo, exame, freesoftware, gnu, hack, Linux, linuxfan, linuxfun, linuxmint, lovelinux, LPI, LPIC, management, nerd, opensource, php, prova, shell, software, softwarelivre, sql, tech, ti, unix