Para que serve o modo EX do processamento em lote?


20

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

Para que serve o modo EX do processamento em lote?


@Masi: vincule suas contas para que as postagens migradas sejam associadas à sua conta SU após a migração.
Greg Hewgill 13/08/09

Respostas:


4

O 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.
  • Mapeamentos e abreviações estão desativados.
  • Chaves comuns como Escapeou Controlnão funcionam corretamente.

Editar arquivos de maneira não interativa é o uso mais comum e as pessoas o usam de maneira semelhante sede awk, no entanto, são mais orientadas para o fluxo - eles só lêem o arquivo do começo ao fim enquanto vimorientam o buffer - você pode avançar e retroceder no arquivo como quiser. Em segundo lugar, as expressões regulares do vim são mais poderosas que as expressões do awk e sed (elas não foram projetadas para trabalhar com várias linhas) - por exemplo, o vim pode corresponder em várias linhas e suporta zero correspondências.

Ex também é um editor (predecessor direto do vi) e no Vim - o modo Ex emula ex(eles ainda executam o mesmo código), portanto é possível acessar o modo de comando exno vi e vice-versa. Existe o modo Ex ( vim -e) e o modo Ex aprimorado, que permite comandos mais avançados do que o modo Ex compatível com vi ( vim -E). Consulte: Qual é a diferença entre o modo Ex e o modo Ex aprimorado?

Ex é a raiz de uma família de editores: edit, ex e vi. Ex é um superconjunto de edições, com a extensão mais notável sendo um recurso de edição de exibição. ex (1)


Exemplo 1

Aqui está um exemplo simples de mudar 127para o 128seu hostsarquivo e imprimir a 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 um arquivo com comandos vim e usá-lo de uma maneira 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 os plugins do vim para executar algumas tarefas.

Por exemplo, a seguinte linha única 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 destaque da sintaxe) a partir do seu código (escrito em qualquer idioma suportado), pronto para impressão ou publicação no seu site.


Exemplo 3

Ou algum exemplo real ao vivo da especificação RPM :

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 baixando o html do site de exemplo e substituindo seu corpo pela tabela 20x20 gerada automaticamente com 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

Isso funcionará em sistemas * nix como o curl instalado. Adicione -Vpara ver o script em ação.

Mais exemplos:


Veja também:


22

O modo Ex serve principalmente para executar a mesma ação em vários arquivos.

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

<a href="/superuser//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

7
Uma implementação completa - e mais concisa - seria for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
intuited

6

Desde o recente 7.3, que como suporte de desfazer persistente, o modo ex e outras formas de processamento em lote do vim são superiores aos outros métodos que não são do vim, pois não atrapalham o histórico de desfazer.

Adicionando: 'desfazer persistente' se ativado, 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 redefinirá o histórico de desfazer ao detectar pela soma de verificação que ele foi alterado. O vim -E permitirá editar um arquivo em lote e a edição estará no histórico de desfazer.


2
Isso parece absurdo, mas com certeza é razoável e inteligente! +1
Tarrasch

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 você pressiona:entrar no modo de linha de comando e inserir comandos? O modo Ex também permite que você insira os mesmos comandos, exceto que o Vim não sai do modo Ex depois de inserir um comando, ele permanece no modo Ex e você pode inserir outro comando. Portanto, é como um REPL (leia, avalie, imprima, faça um loop), mas sem a impressão (portanto, apenas um REL ...). Voltarei ao motivo pelo qual você pode querer esse tipo de REL mais tarde. É por isso que é chamado de modo Ex, permite inserir comandos Ex, que é o mesmo que o modo de linha de comando, permite inserir um comando Ex. Outra maneira de explicar isso é que ele permite que você insira e execute imediatamente o código Vimscript / VimL. O Vimscript / VimL é uma linguagem que você pode usar para escrever plugins do Vim. Também é a linguagem usada para gravar o arquivo de configuração (provavelmente .vimrc). É também o idioma que você está usando ao inserir comandos Ex no modo de linha de comando ou no modo Ex. Portanto, dessa perspectiva, o modo Ex pode ser visto como um VimL REL. Por que você quer um REL VimL? Pela mesma razão, as pessoas gostam de REPLs para outros idiomas. Eles podem ser realmente úteis para depurar código ou experimentar a linguagem para ver como as coisas funcionam, especialmente se você estiver escrevendo plugins no VimL ou personalizando altamente seu arquivo de configuração (o que provavelmente significa que você está violando o principal do SRP e deve dividi-lo em plugins).


Seria ótimo obter alguns exemplos como vídeos para mostrar a utilidade do ex-modo. Eu nunca percebi isso porque eu posso usar o gerenciador de janelas Linux e vim é modo visual com :!pythonetc.
Léo Léopold Hertz 준영
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.