Respuestas:
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 luego fg
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 presionar a
para abortar y ejecutar fg para volver a vi.
Como mencionó "get the stdout", tenga en cuenta que puede hacer
:r! command
y la salida del comando se agregará al archivo, o
:<range>!command
para filtrar el contenido del rango a través del comando [por ejemplo :1,$!wc
]
:%!command
se ve muy útil
:.,+20 !sort
]
Mi idioma preferido es
!!command
que es la abreviatura de
:.!command
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:
!!sh
O
!<motion>command
como (por ejemplo)
!apsh
para ejecutar todo el párrafo actual a través del shell.
!}
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.
:!<command>
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.
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
.
Tengo esto en mi .vimrc. Encontrado en Stack Overflow hace un tiempo:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
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.