¿Para qué sirve el modo EX para el procesamiento por lotes?

20

El tutorial menciona que el modo Ex es para el procesamiento por lotes. Dado que es una molestia, más que una herramienta, para mí, me gustaría ver algunos ejemplos prácticos. ¿Quién lo usa? ¿Por qué?

¿Para qué sirve el modo EX para el procesamiento por lotes?

Léo Léopold Hertz 준영
fuente
@Masi: vincula tus cuentas para que las publicaciones migradas se asocien con tu cuenta SU después de la migración.
Greg Hewgill

Respuestas:

4

Vim en modo Ex (también conocido como ex) es útil cuando:

  • Necesita editar archivos (múltiples) de forma no interactiva (como parte del script).
  • Su conexión es muy lenta o la pantalla no se actualiza después de sus acciones.
  • Las asignaciones y abreviaturas están deshabilitadas.
  • Las claves comunes como Escapeo Controlno funcionan correctamente.

La edición de archivos de manera no interactiva es el uso más común y las personas lo usan de manera similar sedy awk, sin embargo, están más orientados a la transmisión (solo leen el archivo hacia adelante de principio a fin mientras vimestá orientado al búfer), puede avanzar y retroceder en el archivo como quieras. En segundo lugar, las expresiones regulares de vim son más potentes que las expresiones de awk y sed (no están diseñadas para funcionar con varias líneas); por ejemplo, vim puede coincidir en varias líneas y admite cero coincidencias.

Ex también es un editor (predecesor directo de vi) y en Vim, el modo Ex emula ex(todavía ejecutan el mismo código), por lo que es posible acceder al modo de comando exdesde vi y viceversa. Hay un modo Ex ( vim -e) y un modo Ex mejorado que permite comandos más avanzados que el modo Ex compatible con vi ( vim -E). Ver: ¿Cuál es la diferencia entre el modo Ex y el modo Ex mejorado?

Ex es la raíz de una familia de editores: edit, ex y vi. Ex es un superconjunto de ed, siendo la extensión más notable una función de edición de pantalla. ex (1)


Ejemplo 1

Aquí hay un ejemplo simple de cambiar 127a 128su hostsarchivo e imprimir la salida:

ex -s +%s/127/128/g +%p +q! /etc/hosts

es equivalente a:

sed s/127/128/g /etc/hosts

Para una solución más avanzada, puede tener un archivo con comandos vim y usarlo mediante un enfoque más clásico para la redirección 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

Ejemplo 2

También puede usar los complementos vim para realizar algunas tareas.

Por ejemplo, el siguiente one-liner convertiría su archivo de código fuente en html usando uno de los complementos estándar:

ex -s '+let g:html_no_progress=1' '+syntax on' '+set ft=c' '+runtime syntax/2html.vim' -cwqa my_code.c

Generará un archivo html (con resaltado de sintaxis) a partir de su código (escrito en cualquier idioma compatible) que esté listo para imprimir o publicar en su sitio web.


Ejemplo 3

O algún ejemplo real en vivo de la especificación 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

Ejemplo 4

El siguiente script creará un nuevo archivo html descargando html del sitio de Ejemplo y reemplazando su cuerpo por una tabla 20x20 generada automáticamente con números aleatorios en ella:

" 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

Esto funcionará en sistemas similares a * nix con curl instalado. Agregar -Vpara ver el script en acción.

Más ejemplos:


Ver también:

kenorb
fuente
22

Ex-Mode es principalmente para realizar la misma acción en varios archivos.

Digamos que tiene 25 archivos .html, todos con:

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

En lugar de abrir cada uno de ellos, puede usar el modo Ex para cambiarlo todo a index.html:

vim -E -s bob.html <<-EOF
   :%substitute/home.html/index.html/
   :update
   :quit
EOF
Jack M.
fuente
77
Sería una implementación completa y más concisa for file in *.html; do vim -es -c '%s/home\.html/index.html/g' -c wq "$file"; done.
intuido
6

A partir de la reciente versión 7.3 que, como soporte de deshacer persistente, el modo ex y otras formas de procesamiento por lotes de vim es superior a otros métodos que no son de vim, ya que no afectará el historial de deshacer.

Agregar: 'deshacer persistente' si está habilitado, mantiene todos los cambios en un archivo (hasta un límite) en el historial de deshacer, en las sesiones de edición de vim. Si el archivo es editado por un programa externo, vim restablecerá el historial de deshacer cuando detecte por suma de verificación que ha cambiado. vim -E le permitirá editar por lotes un archivo y la edición estará en el historial de deshacer.

u0b34a0f6ae
fuente
2
Esto parece bastante descabellado, ¡pero sin duda es razonable e inteligente! +1
Tarrasch
1

Esto no responde a su pregunta sobre el procesamiento por lotes, pero es otra forma de explicar qué es el modo Ex. Sabes como presionas:ir al modo de línea de comandos e ingresar comandos? Bueno, el modo Ex también le permite ingresar los mismos comandos, excepto que Vim no abandona el modo Ex después de ingresar un comando, permanece en modo Ex y puede ingresar otro comando. Por lo tanto, es como una REPL (lectura, evaluación, impresión, bucle), pero sin la impresión (así que solo un REL ...). Volveré a por qué querrías ese tipo de REL más tarde. Es por eso que se llama modo Ex, le permite ingresar comandos Ex, que es lo mismo que hace el modo de línea de comandos, le permite ingresar un comando Ex. Otra forma de explicarlo es que le permite ingresar e inmediatamente ejecuta el código Vimscript / VimL. Vimscript / VimL es un lenguaje que puede usar para escribir complementos de Vim. También es el idioma que usa para escribir su archivo de configuración (probablemente .vimrc). También es el idioma que está utilizando cuando ingresa comandos Ex desde el modo de línea de comandos o el modo Ex. Entonces, desde esa perspectiva, el modo Ex puede verse como un VimL REL. ¿Por qué querrías un VimL REL? Por la misma razón, a las personas les gustan los REPL para otros idiomas. Pueden ser realmente útiles para depurar código o experimentar con el lenguaje para ver cómo funcionan las cosas, especialmente si está escribiendo complementos en VimL o altamente personalizando su archivo de configuración (lo que probablemente significaría que está violando el principal de SRP y debería dividirlo en complementos).

still_dreaming_1
fuente
Sería genial obtener algunos ejemplos como videos para mostrar la utilidad del modo ex. Nunca me di cuenta porque puedo usar el gestor de ventanas de Linux y el modo visual de vim con :!pythonetc.
Léo Léopold Hertz 준영