32blogby Studio Mitsu

Guía completa de tmux: multiplexación de terminal para desarrolladores

Domina sesiones, ventanas y paneles de tmux. Configura .tmux.conf, sobrevive a desconexiones SSH y construye flujos de trabajo de desarrollo eficientes.

by omitsu16 min read
Contenido

tmux es un multiplexor de terminal que te permite ejecutar múltiples sesiones de shell en una sola ventana, dividir paneles lado a lado, y mantener todo vivo incluso cuando tu conexión SSH se cae. Instálalo con apt install tmux o brew install tmux, e inicia una sesión con tmux new -s myproject.

"Mi conexión SSH se cayó y mató la compilación." "Tengo veinte pestañas de terminal abiertas y no las distingo." "Cambiar entre mi editor, servidor de desarrollo y ejecutor de tests se está haciendo viejo."

Si algo de esto te suena, tmux es la respuesta. Te permite gestionar múltiples terminales virtuales dentro de una sola ventana, y tus sesiones sobreviven a las desconexiones SSH. Una vez que empiezas a usarlo, no hay vuelta atrás.

¿Qué es tmux?

tmux (terminal multiplexer) es una herramienta que te permite ejecutar y gestionar múltiples sesiones de terminal dentro de una ventana. Es código abierto bajo la licencia ISC y ampliamente utilizado en Linux y macOS. La wiki de tmux es el recurso de referencia para documentación detallada.

Puede que hayas oído hablar de GNU Screen — tmux es su sucesor moderno con más funcionalidades y una configuración mucho más flexible. En la comunidad de desarrolladores actual, tmux es la opción estándar.

El mayor beneficio de tmux es la persistencia de sesiones. Cuando tu conexión SSH se cae, los procesos siguen ejecutándose en el servidor tmux. Reconéctate, vuelve a adjuntar tu sesión y todo está exactamente donde lo dejaste. Las compilaciones largas y los despliegues están seguros incluso con conexiones inestables.

tmux organiza tu espacio de trabajo en tres capas:

  • Sesión: un grupo de trabajo con nombre. Típicamente una sesión por proyecto
  • Ventana: como una pestaña dentro de una sesión. Una sesión puede tener muchas ventanas
  • Panel: una subdivisión de una ventana. Múltiples shells uno al lado del otro en una vista
text
Sesión: "dev"
├── Ventana 0: "editor"
│   ├── Panel 0: vim
│   └── Panel 1: explorador de archivos
├── Ventana 1: "servidor"
│   └── Panel 0: npm run dev
└── Ventana 2: "test"
    ├── Panel 0: ejecutor de tests
    └── Panel 1: tail de logs

Instalación

tmux no se ejecuta nativamente en Windows. Instálalo dentro de WSL usando las instrucciones de Linux.

bash
# WSL (Ubuntu)
sudo apt install tmux

Verifica la instalación:

bash
tmux -V
# tmux 3.6a

Conceptos fundamentales: sesiones, ventanas y paneles

Toda operación de tmux comienza con la tecla prefijo. El prefijo por defecto es Ctrl+b. Cuando veas prefijo a continuación, significa presiona Ctrl+b primero y luego la siguiente tecla.

Operaciones con sesiones

Las sesiones son la unidad de nivel superior. Crea una por proyecto o tarea.

bash
# Crear una sesión con nombre
tmux new -s work

# Listar sesiones
tmux ls

# Adjuntarse a una sesión (reconectar)
tmux attach -t work
# Forma corta
tmux a -t work

# Eliminar una sesión
tmux kill-session -t work

Dentro de una sesión:

  • prefijo d — Desconectar (abandonar la sesión; los procesos siguen ejecutándose en segundo plano)
  • prefijo s — Listar y cambiar de sesión
  • prefijo $ — Renombrar la sesión actual

Operaciones con ventanas

Las ventanas son como pestañas del navegador. Aparecen en la barra de estado en la parte inferior.

  • prefijo c — Crear una nueva ventana
  • prefijo n — Siguiente ventana
  • prefijo p — Ventana anterior
  • prefijo 0-9 — Saltar a ventana por número
  • prefijo w — Vista de árbol de todas las ventanas para selección
  • prefijo , — Renombrar la ventana actual
  • prefijo & — Cerrar la ventana actual (con confirmación)

Operaciones con paneles

Los paneles dividen una ventana para que puedas ver múltiples shells a la vez — perfecto para ejecutar un editor junto a una terminal.

  • prefijo % — Dividir izquierda/derecha
  • prefijo " — Dividir arriba/abajo
  • prefijo Flecha — Moverse entre paneles
  • prefijo Ctrl+Flecha — Redimensionar paneles (presionar repetidamente)
  • prefijo z — Alternar zoom (pantalla completa del panel actual)
  • prefijo x — Cerrar el panel actual (con confirmación)
  • prefijo Espacio — Ciclar entre diseños

Modo de copia

Para desplazarte hacia atrás en la salida o seleccionar texto dentro de tmux, entra al modo de copia.

  • prefijo [ — Entrar al modo de copia
  • q — Salir del modo de copia
  • prefijo ] — Pegar el contenido del buffer

Con el modo vi habilitado (ver .tmux.conf abajo):

  1. prefijo [ para entrar al modo de copia
  2. Espacio para iniciar la selección
  3. Teclas de flecha o hjkl para extender la selección
  4. Enter para copiar (yanks al buffer)
  5. prefijo ] para pegar

Hoja de referencia de atajos

Una referencia rápida para operaciones comunes. Todas las teclas se presionan después de prefijo.

Sesiones:

TeclaAcción
dDesconectar
sListar / cambiar sesiones
$Renombrar sesión
(Sesión anterior
)Sesión siguiente

Ventanas:

TeclaAcción
cCrear
n / pSiguiente / anterior ventana
0-9Saltar por número
wVista de árbol / seleccionar
,Renombrar
&Cerrar
lÚltima ventana usada

Paneles:

TeclaAcción
%Dividir izquierda/derecha
"Dividir arriba/abajo
FlechaMover
Ctrl+FlechaRedimensionar
zZoom (alternar)
xCerrar
EspacioCiclar diseños
{ / }Intercambiar posición
!Separar panel en nueva ventana

Otros:

TeclaAcción
[Modo de copia
]Pegar
:Prompt de comando
?Listar todos los atajos
tReloj

Personalización con .tmux.conf

El archivo de configuración de tmux se encuentra en ~/.tmux.conf. Los atajos de teclado por defecto son francamente difíciles de recordar, así que personalizar tmux para que coincida con tu memoria muscular es la clave para usarlo a largo plazo.

Aquí tienes una configuración práctica. Elige las partes que tengan sentido para tu flujo de trabajo.

bash
# -------------------------------------------
# Cambiar prefijo a Ctrl+a
# -------------------------------------------
# Igual que GNU Screen y más fácil de alcanzar que Ctrl+b
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# -------------------------------------------
# División de paneles intuitiva
# -------------------------------------------
# | para horizontal, - para vertical. Los nuevos paneles heredan el directorio actual
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# -------------------------------------------
# Navegación de paneles estilo Vim
# -------------------------------------------
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# -------------------------------------------
# Habilitar soporte de ratón
# -------------------------------------------
set -g mouse on

# -------------------------------------------
# Iniciar números de ventana y panel en 1
# -------------------------------------------
set -g base-index 1
setw -g pane-base-index 1

# -------------------------------------------
# Renumerar ventanas cuando se cierra una
# -------------------------------------------
set -g renumber-windows on

# -------------------------------------------
# Soporte de 256 colores
# -------------------------------------------
set -g default-terminal "screen-256color"
set -sa terminal-overrides ",xterm-256color:RGB"

# -------------------------------------------
# Atajos Vi en modo de copia
# -------------------------------------------
setw -g mode-keys vi

# -------------------------------------------
# Aumentar historial de scroll
# -------------------------------------------
set -g history-limit 10000

# -------------------------------------------
# Personalización de la barra de estado
# -------------------------------------------
set -g status-style 'bg=colour235 fg=colour136'
set -g status-left '#[fg=green]#S '
set -g status-right '%Y-%m-%d %H:%M'
set -g status-left-length 20

Después de editar el archivo, recárgalo desde dentro de tmux:

bash
# Desde el shell
tmux source-file ~/.tmux.conf

# Desde el prompt de comandos de tmux
# Presiona prefijo : y escribe
source-file ~/.tmux.conf

Flujos de trabajo del mundo real

Conocer lo básico es una cosa — ponerlo en práctica es otra. Aquí tienes cuatro patrones que hacen de tmux algo indispensable en la práctica.

Red de seguridad SSH

Aquí es donde tmux brilla más. Tus procesos sobreviven a las desconexiones SSH, así que las compilaciones largas y los despliegues se ejecutan de forma segura incluso con conexiones poco fiables. Si gestionas servidores remotos habitualmente, combina tmux con ssh y rsync para un flujo de trabajo sólido.

bash
# Conectar por SSH al servidor
ssh user@server.example.com

# Iniciar una sesión tmux
tmux new -s deploy

# Ejecutar un despliegue largo
./deploy.sh

# Opcionalmente desconectar si la conexión es inestable
# prefijo d

# --- la conexión se cae / vuelves más tarde ---

# Reconectar
ssh user@server.example.com

# Readjuntar — todo sigue ahí
tmux a -t deploy

Entorno de desarrollo con un comando

Configurar el mismo diseño de ventanas a mano cada día es una pérdida de tiempo. Automatízalo con un script. Si aún no dominas los scripts de shell, este es un buen primer proyecto.

bash
#!/bin/bash
# dev-tmux.sh — levantar una sesión tmux de desarrollo con un comando

SESSION="dev"
PROJECT_DIR="$HOME/projects/myapp"

# Si la sesión ya existe, simplemente adjuntarse
tmux has-session -t $SESSION 2>/dev/null && {
  tmux attach -t $SESSION
  exit 0
}

# Crear sesión en modo desconectado
tmux new-session -d -s $SESSION -c $PROJECT_DIR

# Panel 0: editor
tmux send-keys 'vim .' C-m

# Dividir a la derecha: servidor de desarrollo
tmux split-window -h -c $PROJECT_DIR
tmux send-keys 'npm run dev' C-m

# Dividir abajo-derecha: observador de tests
tmux split-window -v -c $PROJECT_DIR
tmux send-keys 'npm run test -- --watch' C-m

# Enfocar de vuelta en el panel del editor
tmux select-pane -t 0

# Adjuntarse
tmux attach -t $SESSION
bash
# Hacerlo ejecutable y correr
chmod +x dev-tmux.sh
./dev-tmux.sh

Operaciones simultáneas en múltiples servidores

Con synchronize-panes, cada pulsación de tecla se envía a todos los paneles a la vez. Ejecuta el mismo comando en múltiples servidores en paralelo.

bash
# Crear paneles para cada servidor
tmux new -s servers
tmux split-window -h
tmux split-window -v
tmux select-pane -t 0

# Conectar por SSH a cada servidor desde su panel
# Panel 0: ssh web1.example.com
# Panel 1: ssh web2.example.com
# Panel 2: ssh web3.example.com

# Habilitar entrada sincronizada
# Presiona prefijo : y escribe
setw synchronize-panes on

# Ahora cada pulsación va a todos los paneles simultáneamente
# ej. sudo apt update && sudo apt upgrade -y

# Desactivar cuando termines
setw synchronize-panes off

Programación en pareja

Múltiples terminales pueden adjuntarse a la misma sesión tmux simultáneamente. Esto permite que los compañeros de equipo compartan pantalla y colaboren en tiempo real en el mismo servidor.

bash
# Desarrollador A crea la sesión
tmux new -s pair

# Desarrollador B se adjunta a la misma sesión
tmux attach -t pair

# Ambos ven y pueden escribir en tiempo real

Cuando terminales con diferentes tamaños se adjuntan a la misma sesión, tmux se encoge al más pequeño. Usa el mismo tamaño de terminal, o ejecuta tmux attach -d -t pair para desconectar cualquier conexión existente primero.

Técnicas avanzadas

Automatización con hooks de tmux

Los hooks de tmux permiten ejecutar comandos automáticamente cuando ocurren eventos específicos.

bash
# Sincronizar la ruta del panel al crear una nueva ventana
tmux set-hook -g after-new-window 'send-keys "cd #{pane_current_path}" C-m'

# Establecer el color de la barra de estado al crear una sesión
tmux set-hook -g session-created 'set status-style bg=colour235'

set-hook -g establece hooks globales, mientras que set-hook es por sesión. Los eventos incluyen after-split-window, pane-focus-in, client-attached y muchos más.

Ventanas flotantes con display-popup (tmux 3.2+)

tmux 3.2+ introdujo display-popup para ventanas flotantes. Ideal para comandos rápidos puntuales.

bash
# Abrir una ventana flotante para tomar notas
tmux display-popup -E 'vim ~/notes.md'

# Cambiar de sesión vía fzf en un popup
tmux display-popup -E 'tmux list-sessions -F "#{session_name}" | fzf | xargs tmux switch-client -t'

Vincúlalo en .tmux.conf para acceso con una sola tecla:

bash
# prefijo + g lanza el selector de sesiones
bind g display-popup -E 'tmux list-sessions -F "#{session_name}" | fzf | xargs tmux switch-client -t'

Guardar contenido del panel con capture-pane

capture-pane captura el contenido visible de un panel en un búfer. Útil para logging y depuración.

bash
# Guardar el contenido del panel actual en un archivo
tmux capture-pane -pS - > ~/tmux-output.log

# Capturar todo el búfer de desplazamiento (últimas 5000 líneas)
tmux capture-pane -pS -5000 > ~/full-log.txt

-p imprime el búfer en stdout, -S - captura desde el inicio del desplazamiento.

Operaciones por lotes con send-keys

send-keys permite inyectar pulsaciones de teclas en paneles desde scripts externos. Útil para CI/CD y automatización de pruebas.

bash
# Enviar un comando a un panel específico
tmux send-keys -t dev:0.1 'npm run build' C-m

# Enviar el mismo comando a todos los paneles (sin synchronize-panes)
for pane in $(tmux list-panes -F '#{pane_id}'); do
  tmux send-keys -t "$pane" 'echo "pane: $TMUX_PANE"' C-m
done

Extender tmux con plugins (TPM)

TPM (Tmux Plugin Manager) es la forma estándar de gestionar plugins de tmux. Se encarga de la instalación, actualización y limpieza automáticamente.

Instalar TPM

bash
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

Añade lo siguiente al final de tu .tmux.conf:

bash
# Lista de plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'

# Inicializar TPM (mantener esta línea al final del archivo)
run '~/.tmux/plugins/tpm/tpm'

Luego presiona prefijo + I (I mayúscula) dentro de tmux para instalar los plugins.

Plugins recomendados

  • tmux-resurrect — guarda y restaura sesiones tmux tras reinicios. prefijo + Ctrl-s para guardar, prefijo + Ctrl-r para restaurar
  • tmux-continuum — guardado automático cada 15 minutos, con restauración automática opcional al iniciar tmux
  • tmux-yank — copia al portapapeles del sistema desde el modo de copia de tmux

FAQ

¿Cómo hago scroll hacia arriba en tmux?

Presiona prefijo [ para entrar al modo de copia, luego usa las teclas de flecha o Page Up/Down para desplazarte. Si tienes set -g mouse on en tu config, también puedes usar la rueda del ratón. Presiona q para salir del modo de copia.

¿Cuál es la diferencia entre tmux y GNU Screen?

tmux ofrece un código base más moderno, mejor soporte para scripting, arquitectura cliente-servidor y diseños más flexibles. Screen existe desde 1987, pero su desarrollo se ha ralentizado significativamente. La mayoría de desarrolladores que empiezan hoy eligen tmux.

¿Puedo usar tmux dentro de tmux (sesiones anidadas)?

Sí. Cuando te conectas por SSH a un servidor remoto que también ejecuta tmux, terminas con sesiones anidadas. Usa prefijo prefijo <tecla> (presiona prefijo dos veces) para enviar comandos a la sesión interior, o rebindea el prefijo del tmux interior a una tecla diferente para evitar confusiones.

¿Cómo redimensiono paneles en tmux?

Presiona prefijo Ctrl+Flecha para redimensionar en la dirección de la flecha. Con el modo ratón activado (set -g mouse on), arrastra el borde del panel. También puedes usar el comando tmux resize-pane -D 5 para redimensionar un número específico de líneas.

¿tmux funciona en macOS?

Sí. Instálalo con brew install tmux. macOS no incluye tmux por defecto, pero Homebrew hace la instalación trivial. Para la integración con el portapapeles, instala tmux-yank o configura reattach-to-user-namespace.

¿Cómo guardo y restauro sesiones de tmux?

Las sesiones de tmux sobreviven a las desconexiones pero no a los reinicios. Instala tmux-resurrect vía TPM para guardar (prefijo + Ctrl-s) y restaurar (prefijo + Ctrl-r) todo tu diseño de sesión incluyendo contenidos de paneles y programas en ejecución.

¿Qué es la tecla prefijo y cómo la cambio?

La tecla prefijo (por defecto Ctrl+b) es la tecla líder que precede a todos los comandos de tmux. Muchos usuarios la cambian a Ctrl+a (igual que GNU Screen) añadiendo unbind C-b; set -g prefix C-a; bind C-a send-prefix a .tmux.conf. Consulta la página man de tmux para todas las opciones disponibles.

Artículos relacionados

Conclusión

tmux responde a una necesidad directa: usar tu terminal más eficientemente.

Puntos clave:

  • Tres capas (Sesión → Ventana → Panel) te dan un modelo mental que hace cada comando intuitivo
  • Persistencia de sesiones es tu red de seguridad para el trabajo remoto
  • .tmux.conf te permite remapear teclas de prefijo, navegación de paneles y apariencia según tus hábitos
  • Sesiones con script automatizan la configuración del entorno de desarrollo para que nunca pierdas tiempo en ello

Empieza con la tecla prefijo y la división básica de paneles. A medida que te sientas cómodo, haz crecer tu .tmux.conf una configuración a la vez.