¿Es posible escribir un comando bash dentro de vi y obtener el stdout?
A menudo me resulta tedioso cerrar y volver a abrir vi solo porque quiero buscar algo en el shell.
Sí, por ejemplo, si quieres hacerlo ls
, prueba:
:!ls
Para generar una concha, use
:shell
:w !sudo tee %
nano
Tiendo a
ctrl+z
dormir vi, ejecutar lo que necesito en el shell y luegofg
reanudar vi. No es exactamente una respuesta a su pregunta, pero me parece una forma muy rápida de trabajar.Si olvida que tiene vi abierto en segundo plano (esto puede suceder cuando está ocupado), cuando intente cerrar la sesión del shell utilizando,
ctrl+d
se le advertirá que tiene trabajos en segundo plano en ejecución, y puede cerrarlos, o presione ctrl + d nuevamente para cerrar sesión. Además, si intenta volver a abrir el mismo archivo dos veces, recibirá una advertencia de recuperación, por lo que puede presionara
para abortar y ejecutar fg para volver a vi.fuente
Como mencionó "get the stdout", tenga en cuenta que puede hacer
y la salida del comando se agregará al archivo, o
para filtrar el contenido del rango a través del comando [por ejemplo
:1,$!wc
]fuente
:%!command
se ve muy útil:.,+20 !sort
]Mi idioma preferido es
que es la abreviatura de
que canaliza la línea actual a través del comando e inserta la salida en el archivo. El caso más común para mí es editar el comando con vi y ejecutar:
O
como (por ejemplo)
para ejecutar todo el párrafo actual a través del shell.
fuente
!}
cuenta que debe posicionarse al comienzo del párrafo, intente!ap
. (No sé si esto está en cada vi o solo vim)Al utilizar dos puntos y un signo de exclamación, puede ejecutar cualquier comando en la ruta del shell y los scripts del shell, tenga en cuenta que el comando se ejecuta bajo el usuario que ejecuta el programa vi / vim y que utiliza su entorno.
Dado que vi usa el entorno que estaba vigente cuando se ejecutó, usa la misma ruta que estaba en el comando principal. Tenga en cuenta que algunos shells mantienen un caché de los programas en la ruta, y es posible que vi no funcione con este caché (dependiendo del shell que use y su versión), por lo que puede terminar ejecutando el binario incorrecto en caso de que tenga más de un binario con el mismo nombre.
fuente
Puede ver el resultado de un comando escribiendo, por ejemplo,
:!ls -lh
en modo comando.Si desea insertar la salida del comando en el archivo que está editando, simplemente agregue un
r
. Por ejemplo,:r!which perl
.fuente
!
Obviamente, el uso es la respuesta correcta, pero si cambia de un lado a otro con frecuencia, algo como screen o tmux también podría ser útil.fuente
Tengo esto en mi .vimrc. Encontrado en Stack Overflow hace un tiempo:
fuente
Lo haría, y lo haría, fácilmente en Linux abriendo dos ventanas de línea de comando de terminal, ejecutando vi en una y la otra disponible para otro trabajo al mismo tiempo.
fuente