Vim 8.1+ y Neovim incluyen una terminal integrada que ejecuta un shell real dentro de un buffer. Permite correr comandos, compilar y depurar sin salir del editor.


Abreviaciones de modos:
N = Normal | I = Insert | V = Visual | C = Command | VB = Visual Block

Abrir la terminal

ModoComandoAcción
C:termAbre la terminal en la ventana actual
C:term {cmd}Abre la terminal ejecutando un comando específico
C:vert termAbre la terminal en un split vertical
C:bel termAbre la terminal en un split horizontal inferior
C:tab termAbre la terminal en un nuevo tab
C:term ++rows=15Abre la terminal con altura fija de 15 líneas
C:term ++cols=80Abre la terminal con ancho fijo de 80 columnas
C:term ++closeCierra el buffer automáticamente al salir del proceso
C:term ++kill=termDefine la señal para matar el proceso al cerrar

Modos de la terminal

ModoDescripción
Terminal-JobModo activo: el input va al proceso del shell
Terminal-NormalModo Vim normal sobre el buffer de la terminal
ModoComandoAcción
Terminal-Job<Ctrl-w>NEntra a Terminal-Normal mode
Terminal-Job<Ctrl-w><Ctrl-n>Alternativa para entrar a Terminal-Normal
Terminal-NormaliRegresa a Terminal-Job mode
Terminal-NormalaRegresa a Terminal-Job mode
Terminal-Job<Ctrl-w>.Envía <Ctrl-w> literal al proceso del shell
Terminal-Job<Ctrl-w><Ctrl-c>Envía <Ctrl-c> al proceso sin salir de Vim

Navegar y gestionar ventanas desde la terminal

ModoComandoAcción
Terminal-Job<Ctrl-w>hMueve el foco al split de la izquierda
Terminal-Job<Ctrl-w>jMueve el foco al split de abajo
Terminal-Job<Ctrl-w>kMueve el foco al split de arriba
Terminal-Job<Ctrl-w>lMueve el foco al split de la derecha
Terminal-Job<Ctrl-w>wCicla al siguiente split
Terminal-Job<Ctrl-w>qCierra la ventana de la terminal
Terminal-Job<Ctrl-w>:Abre Command mode sin salir de la terminal

Copiar y pegar entre terminal y buffers

ModoComandoAcción
Terminal-NormalyCopia texto seleccionado del buffer de terminal
Terminal-Normal"{a}yCopia al registro nombrado {a}
Terminal-Job<Ctrl-w>"{ a}Pega el contenido del registro {a} en el shell
Terminal-Job<Ctrl-w>"*Pega desde el clipboard del sistema al shell
Terminal-Normal/patrónBusca texto en el historial de la terminal

Ejecutar comandos externos sin abrir terminal

ModoComandoAcción
C:!{cmd}Ejecuta un comando externo y muestra la salida
C:r !{cmd}Inserta la salida del comando en el buffer
C:.!{cmd}Reemplaza la línea actual con la salida del comando
C:%!{cmd}Filtra todo el buffer por el comando externo
C:'<,'>!{cmd}Filtra la selección Visual por el comando externo
N<Ctrl-z>Suspende Vim y regresa al shell (reanudar con fg)

Gestión de jobs en background

ModoComandoAcción
C:jobsLista los procesos activos en terminales abiertas
C:term ++hidden {cmd}Ejecuta un comando en terminal oculta (sin mostrarla)
Cch_sendraw(job, 'texto')Envía texto a un job desde Vimscript

Configuración útil

ModoComandoAcción
C:set termwinsize=15x0Fija el tamaño de la terminal a 15 filas
C:set termwinkey=<Ctrl-w>Define la tecla de escape hacia Vim (default)
C:let g:terminal_ansi_colors=[...]Personaliza la paleta de colores ANSI

Tips

  • <Ctrl-w>N para entrar a Terminal-Normal es el comando más importante: permite copiar output, buscar con / y navegar el historial sin salir de Vim.
  • :%!{cmd} convierte cualquier herramienta externa en un formateador de buffer: :%!python3 -m json.tool formatea JSON, :%!sort ordena líneas.
  • :'<,'>!{cmd} aplica el comando solo a la selección visual, útil para filtrar bloques específicos por sort, uniq, awk o cualquier utilidad Unix.
  • :term ++close evita que el buffer quede como [Process exited 0] al terminar; útil para comandos cortos que no necesitan revisión del output.
  • <Ctrl-w>: desde Terminal-Job mode permite ejecutar comandos de Vim (como :w o :bn) sin necesidad de cambiar de ventana ni salir del shell.