¿Cómo ejecuto un terminal dentro de Vim?

Estoy acostumbrado a Emacs, pero estoy probando a Vim para ver cuál me gusta más.

Una cosa que me gusta de Emacs es la capacidad de ejecutar un terminal dentro de Emacs. ¿Es esto posible dentro de Vim? Sé que puedes ejecutar comandos desde Vim, pero me gustaría poder ejecutar un terminal dentro de una pestaña.

Definitivamente recomendaría una screen para algo como esto. Vim es un editor de texto, no un shell.

Usaría Ctrl + A S para dividir la ventana actual horizontalmente, o en la pantalla de Ubuntu y otras versiones parcheadas, puede usar Ctrl + A | (tubería) para dividir verticalmente. Luego use Ctrl + A Tab (o de manera equivalente en algunos sistemas, Ctrl + A Ctrl + I, que puede ser más fácil de escribir) para alternar entre las ventanas. Hay otros comandos para cambiar el tamaño y la disposición de las ventanas.

O un uso menos avanzado de la screen es solo abrir varias ventanas de pantalla completa y alternar entre ellas. Esto es lo que normalmente hago, solo uso la función de pantalla dividida de vez en cuando.

La pregunta de la Guía de GNU Screen Survival Guide contiene una serie de buenos consejos si no está familiarizado con su uso.

Anticuado desde agosto de 2011

Echa un vistazo a Conque Shell (también en GitHub ). Le permite ejecutar cualquier progtwig interactivo dentro de vim, no solo un shell.

No estoy seguro de lo que intentas lograr (nunca he usado Emacs), pero puedes ejecutar comandos en Vim escribiendo:

 :! somecommand [ENTER] 

Y si desea escribir varios comandos o jugar en un shell por un tiempo, siempre puede usar:

 :! bash (or your favourite shell) [ENTER] 

Una vez que finaliza el comando o el shell, se le dará la opción de presionar Enter para regresar a la ventana del editor

Vim es intencionalmente liviano y no tiene la capacidad de hacer cosas de tipo no editorish, al igual que ejecutar un shell completo dentro de un panel / pestaña de Vim, pero como se mencionó anteriormente hay complementos de terceros como vim-shell que te permiten para hacer ese tipo de cosas.

Normalmente, si quiero cambiar entre Vim y mi caparazón (Bash), presiono CTRL + Z para pausar el proceso Vim, juego en mi caparazón y luego escribo ‘fg’ cuando quiero volver a Vim, manteniendo mi editor y mi caparazón agradable y separada.

La forma en que soluciono esto es pausar Vim con Ctrl + Z , jugar en el terminal y luego regresar a Vim con el comando fg .

:sh y ctrl+d para volver a entrar (bash)

Actualización :

Puedes mapear ctrl+d en vim para ejecutar :sh , que te permite alternar entre bash y vim rápidamente.

noremap :sh

Si está habilitado en su versión de Vim, se puede iniciar un terminal con el comando :term .

El soporte de la ventana de terminal se agregó a Vim 8. Es una característica opcional que se puede habilitar al comstackr Vim con la función + terminal. Si su versión de Vim tiene soporte de terminal,: :echo has('terminal') dará salida a “1”.

Al ingresar :term le colocará en modo Terminal-Job , donde puede usar la terminal como se esperaba.

Dentro del modo Terminal-Job , presionar Ctrl-W N o Ctrl-\ Ctrl-N cambia el modo a Terminal-Normal , que permite que el cursor se mueva y los comandos se ejecuten de manera similar al modo Normal de Vim. Para volver al modo de trabajo de terminal , presione i .

Otras respuestas mencionan una funcionalidad similar en Neovim.

Esta pregunta es bastante antigua, pero para aquellos que la encuentren, existe una nueva solución posible: Neovim contiene un emulador de terminal de primera clase, que hace exactamente lo que ConqueTerm intentó. Simplemente ejecute :term .

saldrá del modo de término al modo normal. Si eres como yo y prefieres ese modo de escape salir de término, puedes agregarlo a tu nvimrc:

 tnoremap   

Y luego, al presionar ESC dos veces, saldrá del modo terminal de regreso al modo normal, por lo que puede manipular el búfer en el que está escribiendo el comando todavía en ejecución.

Sin embargo, tenga en cuenta que, como nvim está muy desarrollado en el momento en que estoy publicando esta respuesta, se puede agregar otra forma de salir del modo terminal. Como Ctrl + \ Ctrl + n cambia al modo normal desde casi cualquier modo, no espero que esta respuesta sea incorrecta, pero tenga en cuenta que si no funciona, esta respuesta podría estar desactualizada.

https://github.com/neovim/neovim

Sé que no respondo directamente la pregunta, pero creo que es un buen enfoque. Nadie ha mencionado tmux (o al menos no como una respuesta independiente). Tmux es una pantalla tipo terminal multiplexor. La mayoría de las cosas se pueden hacer en ambos multiplexores, pero afaik tmux es más fácil de configurar. También tmux ahora se está desarrollando más activamente que la pantalla y hay un ecosistema bastante grande a su alrededor, como herramientas que ayudan a la configuración, ecc.

También para vim, hay otro complemento: ViMUX , que ayuda mucho en la interacción entre ambas herramientas. Puede llamar comandos con:

:call VimuxRunCommand("ls")

Ese comando crea una pequeña división horizontal debajo del panel actual donde vim está.

También le permite ejecutar desde un aviso en caso de que no desee ejecutar todo el comando:

vp :VimuxPromptCommand

Como no fue suficiente, hay al menos 6 ‘complementos específicos de plataforma’:

  • vim-vroom : runner para rspec, pepino y prueba / unidad; Soporte de vimux a través de g:vroom_use_vimux
  • vimux-ruby-test : un conjunto de comandos para ejecutar fácilmente pruebas de ruby
  • vimux-pepino : ejecuta las características de pepino a través de Vimux
  • vim-turbux : pruebas de Turbo Ruby con tmux
  • vimux-pyutils : un conjunto de funciones para vimux que permiten ejecutar bloques de código en ipython
  • vimux-nose-test : ejecutar pruebas de nariz en vimux

Aquí hay un buen “caso de uso”: Pruebas bajo demanda usando Vimux y Turbux con Spork and Guard

Alguien ya sugirió https://github.com/Shougo/vimshell.vim , pero no mencionaron por qué. En consecuencia, cuando salí de esta pregunta, perdí muchas otras veces probando las otras opciones (mucho más clasificadas).

Shougo / vimshell es la respuesta. Este es el por qué:

Además de ser un emulador de terminal, VimShell le permite navegar a través de la salida del terminal en modo normal y visual. Por lo tanto, si un comando que ejecuta resultados en la salida que desea copiar y pegar utilizando el teclado solamente … VimShell cubre esto.

Ninguna de las otras opciones mencionadas, incluido el comando: terminal en NeoVim hace esto. Neovim’s: terminal se acerca, pero se queda corto al menos de las siguientes maneras a partir del 2/18/2017:

  • Mueve el cursor al final del búfer, en lugar de mantenerlo en el mismo lugar como lo hace VimShell. Enorme pérdida de tiempo.

  • No es compatible con modifiable = 1 vea una discusión sobre esto en Github , por lo que los complementos útiles como vim-easymotion no se pueden usar.

  • No admite la visualización de números de línea como Vimshell.

No pierdas el tiempo con las otras opciones, incluida la terminal de Neovim. Ve con VimShell.

Es posible que desee echar un vistazo al comando :sh (ver :help sh en Vim).

Varios comandos

Finalmente, un comando nativo :terminal se agregó a vim en 2017.

Aquí hay un extracto del : archivo de terminal :

Esta característica es para ejecutar un emulador de terminal en una ventana de Vim. Se puede iniciar un trabajo conectado al emulador de terminal. Por ejemplo, para ejecutar un shell:

  :term bash 

O para ejecutar el comando de comstackción:

  :term make myprogram 

El trabajo se ejecuta de forma asincrónica desde Vim, la ventana se actualizará para mostrar el resultado del trabajo, también mientras se edita en otra ventana.

:term

Esta característica se agregó recientemente en Vim 8.1, sin embargo, que a partir de esta publicación se lanzó recientemente, por lo que es posible que deba actualizar para poder usarla.

La única forma que conozco es mediante el uso de vim-shell , un parche de terceros.

Yo uso esto ahora, puedes intentarlo. VimShell

Pruebe vterm , que es una función muy completa dentro de vim. Es un poco defectuoso con su historial y funciones claras, y aún está en desarrollo, pero todavía es bastante bueno