Neste texto, vamos abordar alguns comandos, recursos e técnicas para usar o editor de textos vi, de maneira mais avançada.
No texto Editor vi básico, mostramos uma série de comandos para iniciantes — incluindo 2 papéis de parede com a relação de comandos básicos do vi, para ajudar a memorizar.
Este post é voltado para usuários que desejam poupar tempo e escrever (código de programação ou outros textos) com mais eficiência — fazendo uso de recursos avançados, que o livram do trabalho repetitivo.
O vi é um editor de textos tradicional no UNIX/Linux. Foi muito popular, mas os termos da sua licença não eram 100% livres (até 2002).
Isto abriu caminho para vários editores compatíveis — como o nvi e o elvis. O Vim, é também um deles.
Em muitas distribuições Linux, ao digitar ‘vi’, o Vim é o que será executado.
Vamos ao que interessa! 😉
Como fazer busca de strings dentro do editor vi
Segue a lista de referência rápida, para encontrar strings dentro de um arquivo aberto no vi.
Funciona igual às páginas do manual do sistema (comando man) ou ao player de música cmus.
/
— faz a busca pela próxima ocorrência da string, no texto?
— faz a busca (pra trás) pela ocorrência anterior da string escolhida/^
— faz a busca pela ocorrência da string em inícios de linha/.
— faz a busca pela ocorrência de um único caractere/
— faz a busca por qualquer caractere presente após a string* /
— faz a busca pela ocorrência da string em fins de linha$ n
— move o cursor para a próxima ocorrência durante a buscaN
— move o cursor para a ocorrência anterior durante a busca
Como fazer busca e substituição de texto no vi
Para completar a lista, acima, veja como encontrar strings no texto e susbstituí-las:
:s/string-atual/string-nova
— encontra a string atual e substitui pela nova:s/string-atual/string-nova/g
— encontra a string atual e substitui pela nova, em uma linha:%s/string-atual/string-nova/g
— encontra a string atual e substitui pela nova, em um arquivo
Faça ajustes no vi, com o comando set
:set ic
— ignore case, ou seja, passa ignorar a caixa (se maiusculas ou minúsculas) dos caracteres, durante as buscas:set number
ou:set nu
— liga a exibição da numeração das linhas na tela:set nonu
— desliga a exibição da numeração das linhas na tela:set ai
— liga a autoindentação:set noai
— desliga a autoindentação:set list
— liga a exibição de caracteres invisíveis:set nolist
— desliga a exibição de caracteres invisíveis:set sw=n
— ajusta a largura do shift para o valor de n:set wm=n
— ajusta a margem de palavra para o valor definido em n:set ws
— ao encontrar o final do arquivo, recomeça a busca do começo:set bf
— para descartar caracteres de controle do input:set ro
— altera o modo de acesso do arquivo para “apenas leitura” (read only:set showmatch
— liga exibição de pares de parênteses à medida em que forem digitados:set noshowmatch
— desliga exibição de pares de parênteses à medida em que forem digitados:set showmode
— exibe o modo do editor, na linha de status:set noshowmode
— oculta o modo do editor.:set term
— mostra o tipo de terminal:set all
— mostra valores de todos os possíveis tamanhos
Mais comandos
J
— junta duas linhas~
— altera a caixa de um caractereU
— restaura o estado de uma linha, desfazendo alteraçõesu
— defaz a última alteraçãoCtrl + G
— exibe o nome do arquivo e status:f
— exibe a posição atual do arquivo em %, nome do arquivo e o número total de arquivos:f nome-do-arquivo
— renomeia o arquivo atual para nome-do-arquivo:f nome-do-arquivo
— grava o conteúdo atual para nome-do-arquivo:e nome-do-arquivo
— abre:new nome-do-arquivo
— abre novo arquivo, com o nome dado:n
— se tiver múltiplos arquivos abertos, este comando move para o próximo arquivo da fila:p
ou:N
— se tiver múltiplos arquivos abertos, um destes comandos para mover o foco para o anterior da fila:r nome-do-arquivo
— lê e posiciona o conteúdo de nome-do-arquivo após a linha atual do cursor:nr nome-do-arquivo
— lê e posiciona o conteúdo de nome-do-arquivo após a linha n:cd nome-do-diretorio
— altera o diretório atualG
— move o cursor para a última linhanG
ou:n
— move o cursor para a linha n