¿Cómo ejecutar el archivo que estoy editando en Vi (m) y obtener la salida en una ventana dividida (como en SciTE)?
Por supuesto que podría ejecutarlo así:
:!scriptname
Pero, ¿es posible evitar escribir el nombre del script y cómo obtener la salida en la ventana dividida en lugar de la parte inferior de la pantalla?
:!"%:p"
para hacer frente a los espacios en blanco.Respuestas:
Ahí está el
make
comando. Ejecuta el comando establecido en lamakeprg
opción. Úselo%
como marcador de posición para el nombre del archivo actual. Por ejemplo, si estuviera editando una secuencia de comandos de Python:Sí, necesitas escapar del espacio. Después de esto, simplemente puede ejecutar:
Si lo desea, puede configurar la
autowrite
opción y se guardará automáticamente antes de ejecutarmakeprg
:Esto resuelve la parte de ejecución. No conozco ninguna forma de obtener esa salida en una ventana dividida que no implique la redirección al archivo.
fuente
:copen
para abrir la "lista de errores" producida al ejecutar:make
.en su propia ventana. Desafortunadamente, para que la salida se formatee correctamente,errorformat
es necesario manipular la opción. De lo contrario, se presumirá que la salida tiene el formato que envía gcc.:let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
), aunque parece críptica, funciona exactamente como lo pidió el autor de la pregunta.Para acceder al nombre de archivo del búfer actual, use
%
. Para convertirlo en una variable, puede usar laexpand()
función. Para abrir una nueva ventana con un búfer nuevo, use:new
o:vnew
. Para canalizar la salida de un comando al búfer actual, use:.!
. Poniendolo todo junto:obviamente reemplazando
ruby
con cualquier comando que desee. Lo utilicéexecute
para poder rodear el nombre del archivo entre comillas, por lo que funcionará si el nombre del archivo tiene espacios.fuente
:command! R let f=expand("%")|vnew|execute '.!ruby "' . f . '"'
para poder usar solo:R
para ejecutar su comandoVim tiene un
!
comando ("bang") que ejecuta el comando de shell directamente desde la ventana de VIM. Además, permite lanzar una secuencia de comandos que están conectados con pipe y leer stdout.Por ejemplo:
es equivalente a abrir la ventana del símbolo del sistema y ejecutar comandos:
Consulte "Consejos de Vim: trabajar con comandos externos" para obtener más detalles.
fuente
Tengo un atajo para eso en mi vimrc:
Esto escribe el búfer actual, hace que el archivo actual sea ejecutable (solo unix), lo ejecuta (solo unix) y redirige la salida a .tmp.xyz, luego crea una nueva pestaña, lee el archivo y luego lo elimina.
Desglosando:
fuente
:w<CR>:silent !chmod +x %:p<CR>:silent !%:p 2>&1 | tee ~/.vim/output<CR>:split ~/.vim/output<CR>:redraw!<CR>
esto redirige tanto el stdout como el stderr al archivo temporal, y antes de hacerlo, imprime todo en stdout, por lo que si un script tarda mucho en ejecutarse, realmente lo verá funcionando. Además, es independiente del directorio (recibía errores al abrir archivos por su ruta absoluta). Sin embargo, no ejecuta scripts de forma interactiva y no he encontrado la manera de hacerlo.Para el script de Shell que he usado
fuente
Vim 8 tiene una terminal interactiva integrada. Para ejecutar el script bash actual en un panel dividido:
o para abreviar
%
se expande al nombre del archivo actual.De
:help terminal
:fuente
Utilizo un mecanismo un poco más intrusivo a través de mapas:
Simplemente lo hace para que no tenga que guardar, luego me voy. Solo vamos.
fuente
Puede usar el complemento bexec de vim . Que yo sepa, la última versión es 0.5.
Luego:
Dentro de vim mientras edita el archivo .vba, haga lo siguiente:
Aparecerá un resultado que le permitirá saber que se ha escrito bexec.vim , así como la documentación, etc.
Ahora, puede probarlo abriendo su (cualquier script de idioma que tenga un intérprete #! Funcionando correctamente) en vim y ejecute
Nota: quería que la división fuera vertical en lugar de horizontal, así que lo hice:
y cambió el valor de "hor" a "ver".
Sé que es una vieja pregunta, pero espero que esto pueda ayudar a alguien. He estado corriendo en el mismo problema mientras tomaba el curso de Ingeniería de inicio de Coursera donde el profesor Palaji usa Emacs y no me gusta Emacs.
fuente
Basado en las respuestas de @SethKriticos y @Cyril, ahora uso lo siguiente:
Use F9 para configurar la nueva ventana y F2 para ejecutar su script y abrir su archivo de salida.
También agregué el nombre del script al nombre del archivo de salida, para que pueda usarlo para varios scripts al mismo tiempo.
fuente
En tu
.vimrc
puedes pegar esta funciónDespués de eso, en el
vim
comando de ejecución:shell python ~/p.py
como ejemplo. Y obtendrá la salida en una ventana dividida. + Después de los cambios enp.py
como ejemplo, ejecutará el mismo comando nuevamente, esta función no creará una nueva ventana nuevamente, mostrará el resultado en la ventana dividida anterior (la misma).fuente
@xorpaul
Estuve buscando este script (python / Windows) durante bastante tiempo. Como no hay "tee" en Windows, lo cambié a:
fuente
Simplemente use dos puntos y un signo de exclamación como se muestra a continuación
fuente
Recomendaría el complemento quickrun . Es rápido y sencillo de configurar. Aquí hay una pequeña demostración:
fuente