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.
:! <command>
Qué es lo que buscas?:term
comando que abre un nuevo terminal en una nueva ventana dividida. Si no funciona para usted, verifiquevim --version | grep -o .terminal
si esta función está disponible (+terminal
) o no está disponible (-terminal
).Respuestas:
Definitivamente recomendaría
screen
para algo como esto. Vim es un editor de texto, no un shell.Lo usaría Ctrl+ASpara dividir la ventana actual horizontalmente, o en la pantalla de Ubuntu y otras versiones parcheadas, puede usar Ctrl+A|(pipe) para dividir verticalmente. Luego, use Ctrl+ATab(o equivalente en algunos sistemas, Ctrl+ACtrl+Ique pueden ser más fáciles de escribir) para cambiar entre las ventanas. Hay otros comandos para cambiar el tamaño y la disposición de las ventanas.
O un uso menos avanzado de
screen
es simplemente abrir múltiples ventanas de pantalla completa y alternar entre ellas. Esto es lo que normalmente hago, solo uso la función de pantalla dividida ocasionalmente.La pregunta de la Guía de supervivencia de pantalla de GNU tiene una serie de buenos consejos si no está familiarizado con su uso.
fuente
Anticuado de agosto de 2011
Echa un vistazo a Conque Shell (también en GitHub ). Le permite ejecutar cualquier programa interactivo dentro de vim, no solo un shell.
fuente
:ConqueTerm bash <CR>
,vim <CR>
,:ConqueTerm bash
.... el horror recursiva !!No estoy seguro de qué es exactamente lo que está tratando de lograr (nunca he usado Emacs), pero puede ejecutar comandos en Vim escribiendo:
Y si desea escribir varios comandos, o jugar en un shell por un tiempo, siempre puede usar:
Una vez que finalice 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 carece de la capacidad de hacer cosas de tipo no editorial, 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 le permiten para hacer ese tipo de cosas.
Por lo general, si quiero cambiar entre Vim y mi shell (Bash), solo presiono CTRL+ Zpara pausar el proceso de Vim, jugar en mi shell y luego escribir 'fg' cuando quiero volver a Vim, manteniendo mi editor y mi Concha agradable y separada.
fuente
:r! command [ENTER]
mencionado en los comentarios.La forma de evitar esto es:
fg
.fuente
:!bash
es una mejor manera de hacer eso:!bash
mejor queCtrl+z
? (Solo me pregunto)Ctrl+Z
, por ejemplo, puede moverse a otra carpeta,ls
luegogit status
, etc.Ctrl+Z
es una "pausa", puede "reanudar" confg
. Pero con:! Bash, como sé hasta ahora, solo puede ejecutar un solo comando a la vez, o incluso si puede ejecutar más de un comando a la vez, todavía no es conveniente. En general, 'Ctrl + Z' es mucho mejorSi está habilitado en su versión de Vim, se puede iniciar un terminal con
:term
comando.Se agregó soporte de ventana de terminal a Vim 8. Es una característica opcional que se puede habilitar al compilar Vim con la característica de terminal +. Si su versión de Vim tiene soporte de terminal,
:echo has('terminal')
generará "1".Entrar
:term
te colocará en Terminal-Job , donde puede usar el terminal como se esperaba.Dentro del modo Terminal-Job , presionar
Ctrl-W N
oCtrl-\ Ctrl-N
cambia el modo a Terminal-Normal , lo que permite mover el cursor y ejecutar comandos de manera similar al modo Normal de Vim . Para volver al modo Terminal-Job , presionei
.Otras respuestas mencionan una funcionalidad similar en Neovim.
fuente
i
saber cómo volver a cambiar al modo cmd de Terminal después de cambiar del modo de exploración ctrl-wN. Esta es una característica excelente incluso en tmux y también funciona en Windows.:term
?brew install vim --override-system-vi
y:term
funciona perfectamente. ¡Gracias por compartir!:vertical :term
se dividirá verticalmente con el terminal en la ventana izquierda.:vertical :botright :term
se dividirá verticalmente con el terminal en la ventana derecha. Alternativamente, puede diseñar ventanas manualmente y luego usar:term ++curwin
para abrir una terminal en la ventana activa.:sh
luegoctrl+d
volver (bash)Actualización :
Puede asignar
ctrl+d
en vim para ejecutar:sh
, lo que le permite alternar entre bash y vim rápidamente.noremap <C-d> :sh<cr>
fuente
ctrl+z
yfg
son un poco más rápidos, dado que no tienes que escribir:sh
en ese caso.:sh
si haces el mapa. Despuésnoremap
, puede simplementeCtrl+D
de vim ash
, y dado que^D
es EOF, que termina elsh
, por lo que volvería a vim. La única tecla puede alternar entresh
y vim.La nueva característica principal de Vim 8.1 es el soporte para ejecutar un terminal en una ventana de Vim.
:term
abrirá la terminal en otra ventana dentro de Vim.fuente
exit
cerrará desde la terminal y luego se usará:q
para cerrar la ventanaFinalmente,
:terminal
se agregó un comando nativo a vim en 2017.Aquí hay un extracto del archivo Léame del terminal :
fuente
:bn
lo de siempre. No es necesario matar la terminal y no es un punto de no retorno :)Esta pregunta es bastante antigua, pero para aquellos que la encuentren, hay una nueva solución posible: Neovim contiene un emulador de terminal de primera clase completo, que hace exactamente lo que ConqueTerm intentó hacer. Simplemente corre
:term <your command here>
.<C-\><C-n>
saldrá del modo de término a modo normal. Si eres como yo y prefieres que escape aún salga del modo de término, puedes agregar esto a tu nvimrc:Y luego presionar ESC dos veces saldrá del modo terminal al modo normal, para que pueda manipular el búfer en el que está escribiendo el comando que aún se está ejecutando.
Sin embargo, tenga en cuenta que, dado que nvim está en desarrollo en el momento en que publico esta respuesta, se puede agregar otra forma de salir del modo terminal. Como Ctrl+\Ctrl+ncambia 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
fuente
:term
Sin embargo, esta característica se agregó recientemente en Vim 8.1, que a partir de esta publicación se lanzó recientemente, por lo que es posible que deba actualizar para poder usarla.
fuente
Sé que no estoy respondiendo directamente la pregunta, pero creo que es un buen enfoque. Nadie ha mencionado tmux (o al menos no como una respuesta independiente). Tmux es un terminal multiplexor como pantalla. 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 en este momento 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, etc.
También para vim, hay otro complemento: ViMUX , que ayuda mucho en la interacción entre ambas herramientas. Puedes llamar a comandos con:
:call VimuxRunCommand("ls")
Ese comando crea una pequeña división horizontal debajo del panel actual en el que está vim.
También puede permitirte ejecutar desde un indicador en caso de que no quieras ejecutar todo el comando:
<Leader>vp :VimuxPromptCommand<CR>
Como no era suficiente, hay al menos 6 'complementos específicos de plataforma':
g:vroom_use_vimux
Aquí hay un buen "caso de uso": pruebas bajo demanda usando Vimux y Turbux con Spork and Guard
fuente
Alguien ya sugirió https://github.com/Shougo/vimshell.vim , pero no mencionaron por qué. En consecuencia, cuando salí de esta pregunta, perdí mucho tiempo probando las otras opciones (mucho más altas).
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 da como resultado una salida que le gustaría copiar y pegar usando solo el teclado ... VimShell cubre esto.
Ninguna de las otras opciones mencionadas, incluido el comando: terminal en NeoVim, hace esto. Neovim: el terminal se acerca, pero se queda corto al menos de las siguientes maneras a partir del 18/02/2017:
Mueve el cursor al final del búfer, en lugar de al final, manteniéndolo en el mismo lugar como lo hace VimShell. Enorme pérdida de tiempo.
No admite
modifiable = 1
ver una discusión sobre esto en Github , por lo que no se pueden usar complementos útiles como vim-easymotion.No admite la visualización de números de línea como lo hace Vimshell.
No pierda el tiempo con las otras opciones, incluida la de Neovim: terminal. Ve con VimShell.
fuente
:terminal
puede hacer absolutamente lo mismo.:terminal
no puede hacer lo mismo que:VimShell
en términos de navegación y edición, y de manera fundamental. Ver explicación editar arriba.Es posible que desee echar un vistazo al
:sh
comando (ver:help sh
en Vim).Varios comandos
fuente
set shell=/bin/sh
hará que vim use un shell más silencioso para sus comandos.No, no puedes:
http://vimdoc.sourceforge.net/htmldoc/tips.html#shell-window
fuente
splitvt
: manipula los códigos de control de color y los hacevim
completamente inutilizables.Lo único que sé es mediante el uso de vim-shell , un parche de terceros.
fuente
Lo uso ahora, puedes intentarlo. VimShell
fuente
Pruebe vterm , que es un shell bastante completo dentro de vim. Es un poco defectuoso con su historial y funciones claras, y todavía está en desarrollo, pero aún es bastante bueno
fuente
Suponiendo que su versión de vim admite el
+term
comando primero, configure el shell para que vim lo use en un comando (por ejemploset=/usr/bin/zsh
) y luego ejecute el comando+term
(es decirbo 15vs +term
). Puede que tenga que hacer algunas maniobras adicionales de sus ventanas (es decir, eliminar una y rotar), pero tendrá su terminal.fuente
Reconozco que no estoy respondiendo estrictamente a su pregunta, pero lo que me ha funcionado mejor cuando uso Vim and Terminals en la misma ventana es Tmux (que es una especie de "ejecución en segundo plano" similar a la pantalla, aunque esto uno funciona mejor con divisiones y pestañas).
Esta publicación lo ayudará a comprender cómo funcionan juntos: 'Tmux y Vim, incluso mejor juntos' .
De esta manera podemos convertir Vim en un poderoso IDE
fuente
Divida la pantalla y ejecute el comando
term ++curwin
para ejecutar el terminal dentro del búfer Vim. El siguiente comando hace ambas cosas y funcionó para mí:fuente