Vim no modo Ex (também conhecido como ex
) é útil quando:
- Você precisa editar (vários) arquivos de maneira não interativa (como parte do script).
- Sua conexão é muito lenta ou a tela não é atualizada após suas ações.
- Os mapeamentos e as abreviaturas estão desativados.
- Teclas comuns como Escape ou Controle não funcionam corretamente.
A edição de arquivos de forma não interativa é o uso mais comum e as pessoas o usam de maneira semelhante a sed
e awk
, mas são mais orientados para fluxo - eles apenas leem o arquivo do início ao fim enquanto vim
é orientado a buffer - você pode avançar e retroceder no arquivo como desejar. Em segundo lugar, as expressões regulares do vim são mais poderosas do que as expressões do awk e do sed (elas não são projetadas para trabalhar com várias linhas) - por exemplo, o vim pode combinar várias linhas e suporta zero correspondências.
Ex também é um editor (predecessor direto do vi) e no Modo Vim-Ex emula ex
(eles ainda executam o mesmo código), então é possível chegar ao modo de comando de ex
dentro do vi e vice versa. Existe o modo Ex ( vim -e
) e o modo Ex melhorado que permite comandos mais avançados do que o modo Ex compatível com o VI ( vim -E
). Veja: Qual é a diferença entre o modo Ex e o modo Ex melhorado?
Exemplo 1Ex is the root of a family of editors: edit, ex and vi. Ex is a super‐ set of ed, with the most notable extension being a display editing facility.ex(1)
Aqui está um exemplo simples de alteração de 127
para 128
do seu arquivo hosts
e impressão da saída:
ex -s +%s/127/128/g +%p +q! /etc/hosts
é equivalente a:
sed s/127/128/g /etc/hosts
Para uma solução mais avançada, você pode ter arquivos com comandos vim e usá-los com uma abordagem mais clássica para o redirecionamento de E / S:
echo :%s/127/128/g > cmds.vim
echo :%print >> cmds.vim
echo :%quit! >> cmds.vim
ex -s /etc/hosts < cmds.vim # The same as: vim -s cmds.vim /etc/hosts
Exemplo 2
Você também pode usar plugins vim para realizar algumas tarefas.
Por exemplo, o seguinte one-liner converteria seu arquivo de código-fonte em html usando um dos plug-ins padrão:
ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c
Ele gerará um arquivo html (com realce de sintaxe) do seu código (escrito em qualquer idioma compatível) que esteja pronto para impressão ou para publicação no seu site.
Exemplo 3Ou algum exemplo real do RPM especificação:
vim -E -s Makefile <<-EOF
:%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
:%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
:%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
:update
:quit
EOF
Exemplo 4
O script a seguir criará um novo arquivo html fazendo o download do html do site de exemplo e substituindo seu corpo pela tabela 20x20 gerada automaticamente por números aleatórios:
" table.vim
%!curl -s example.com
let @t='<table>'.repeat('<tr>'.repeat('<td>_</td>',20).'</tr>',20).'</table>'
/<body
norm!vitd"tP
%s/_/\=system('echo $RANDOM')/g
wq
Uso:
ex -s table.html < table.vim
This will work on *nix like systems with curl installed. Add
-V
to see the script in action.
Mais exemplos:
- Como editar arquivos de forma não interativa (por exemplo, em pipeline) ? no Vim SE
- Como posso substituir uma string por outra string em uma variável, um fluxo, um arquivo ou em todos os arquivos em um diretório ?
Veja também: