Como é o modo EX para processamento em lote?

19

O tutorial menciona que o modo Ex é para processamento em lote. Como é um incômodo, em vez de uma ferramenta, para mim, gostaria de ver alguns exemplos práticos. Quem usa isso? Por quê?

Qual é o modo EX para processamento em lote?

    
por Léo Léopold Hertz 준영 13.08.2009 / 18:52

4 respostas

4

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?

Ex 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)

Exemplo 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 3

Ou 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:

Veja também:

por 22.03.2015 / 18:25
22

O Ex-Mode é principalmente para executar a mesma ação em vários arquivos.

Digamos que você tenha 25 arquivos .html, todos com:

<a href="/home.html"> ...

Em vez de abrir cada um deles, você pode usar o modo Ex para alterar tudo para index.html :

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF
    
por 13.08.2009 / 23:01
5

A partir da recente versão 7.3, que como persistente undo support, ex mode e outras formas de processamento em lote vim é superior a outros métodos não-vim, uma vez que não irá anular o histórico de undo.

Adicionando: 'undo persistente' se habilitado, mantém todas as alterações em um arquivo (até um limite) no histórico de desfazer, nas sessões de edição do vim. Se o arquivo for editado por um programa externo, o vim irá redefinir o histórico de desfazer ao detectar por checksum que ele foi alterado. vim -E permitirá que você edite em lote um arquivo e a edição estará no histórico de desfazer.

    
por 12.04.2011 / 03:37
1

Isso não responde à sua pergunta sobre o processamento em lote, mas é outra maneira de explicar o que é o modo Ex. Você sabe como pressiona : para entrar no modo de linha de comando e digitar comandos? Bem, o Ex-mode também permite que você digite os mesmos comandos, exceto que o Vim não deixa o modo Ex após você digitar um comando, ele permanece no modo Ex e você pode inserir outro comando. Então é como se fosse um REPL (leia, avalie, imprima, faça um loop), mas sem a impressão (então apenas um REL ...). Eu vou voltar para porque você pode querer esse tipo de REL depois. É por isso que é chamado modo Ex, ele permite que você insira comandos Ex, que é o mesmo que o modo de linha de comando, permite que você insira um comando Ex. Outra maneira de explicá-lo é permitir que você entre e execute imediatamente o código Vimscript / VimL. Vimscript / VimL é uma linguagem que você pode usar para escrever plugins Vim. É também o idioma que você usa para escrever seu arquivo config (proativamente .vimrc). É também o idioma que você está usando quando você insere comandos Ex a partir de comandos. modo de linha ou modo Ex. Então, a partir dessa perspectiva, o modo Ex pode ser visto como um REL VimL. Por que você quer um VimL REL? Pela mesma razão, as pessoas gostam de REPLs para outros idiomas. Eles podem ser realmente úteis para depurar código ou experimentar com a linguagem para ver como as coisas funcionam, especialmente se você está escrevendo plugins no VimL ou customizando muito seu arquivo de configuração (o que provavelmente significa que você está violando o principal do SRP e deve dividi-lo plugins).

    
por 27.07.2016 / 15:48

Tags