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
, :%print
y 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
vim
para 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,
vim
debe 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 -e
es básicamente equivalente alex
comando.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?vipe
es una herramienta conveniente para editar tuberías, parte delmoreutils
paquete. Es un contenedor para editores (incluido elvi
que le da su nombre). Se utiliza laEDITOR
variable 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