Me gustaría escribir todo el búfer en la salida estándar ( /dev/stdout) en lugar del archivo y el siguiente comando funciona como se esperaba al editar el archivo:
:w >> /dev/stdout
Sugerencia: presione Control+ Lpara actualizar la pantalla.
Pero no funciona como se esperaba cuando intento hacer lo mismo desde la línea de comandos (de forma no interactiva ), por ejemplo:
$ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!'
Vim: Reading from stdin...
Lo mismo con :w !tee, :x! /dev/stdout, :%printy similar.
Antes de dejar de fumar, es decir: [Device] 1L, 17C appended.
¿Hay alguna forma de forzar a vim a escribir la entrada estándar en la salida estándar en el medio de una tubería? Tal vez es de alguna manera amortiguado?
command-line
invocation
unix
ex-mode
kenorb
fuente
fuente

vimpara el análisis de archivos en lugar desed(por ejemplo, cambios complejos repetidos en masa a múltiples archivos grandes). El ejemplo no hace nada para mantenerlo simple y no hacer un posible duplicado de otra publicación .Respuestas:
Para imprimir la salida estándar del búfer a la shell,
vimdebe comenzar en modo Ex, de lo contrario, se abrirá de manera "normal" con su propia ventana y borrará cualquier búfer de salida al salir.Aquí está el ejemplo de trabajo más simple:
o incluso más corto:
Nota: El comando
vim -ees básicamente equivalente alexcomando.Es necesario especificar un descriptor de archivo especial para la entrada estándar (
/dev/stdin) para evitar mensajes molestos adicionales (como se explica a continuación).Y aquí hay algunos ejemplos con cadenas de análisis:
Nota: El último ejemplo muestra un mensaje molesto adicional que no es posible ocultarlo, es porque es una estrategia estándar de leer todo el archivo en la memoria y decir que se leyó desde la entrada estándar. El primer ejemplo funciona sin el mensaje, porque el archivo produce datos sin fin sin una señal de fin de archivo ( EOF ), por lo que nunca llegará al final de su lectura de entrada.
Relacionado:
fuente
+q!lugar de+:q!, ¿verdad?vipees una herramienta conveniente para editar tuberías, parte delmoreutilspaquete. Es un contenedor para editores (incluido elvique le da su nombre). Se utiliza laEDITORvariable de entorno para configurar el editor, por lo que, al igual que con otras herramientas que hacen uso deEDITOR(tales comocrontab,visudo, etc.), puede acciones de script utilizando esa variable. Por ejemplo, puede cambiarlo para hacer:Por supuesto, las acciones complicadas podrían convertirse en citas del infierno, por lo que podría escribir un script:
Y uso
EDITOR="sh /path/to/script".fuente