"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 BSD y ampliamente utilizado en Linux y macOS.
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
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.
# WSL (Ubuntu)
sudo apt install tmux
Verifica la instalación:
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.
# 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ónprefijo $— 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 ventanaprefijo n— Siguiente ventanaprefijo p— Ventana anteriorprefijo 0-9— Saltar a ventana por númeroprefijo w— Vista de árbol de todas las ventanas para selecciónprefijo ,— Renombrar la ventana actualprefijo &— 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/derechaprefijo "— Dividir arriba/abajoprefijo Flecha— Moverse entre panelesprefijo 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 copiaq— Salir del modo de copiaprefijo ]— Pegar el contenido del buffer
Con el modo vi habilitado (ver .tmux.conf abajo):
prefijo [para entrar al modo de copiaEspaciopara iniciar la selección- Teclas de flecha o
hjklpara extender la selección Enterpara copiar (yanks al buffer)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:
| Tecla | Acción |
|---|---|
d | Desconectar |
s | Listar / cambiar sesiones |
$ | Renombrar sesión |
( | Sesión anterior |
) | Sesión siguiente |
Ventanas:
| Tecla | Acción |
|---|---|
c | Crear |
n / p | Siguiente / anterior ventana |
0-9 | Saltar por número |
w | Vista de árbol / seleccionar |
, | Renombrar |
& | Cerrar |
l | Última ventana usada |
Paneles:
| Tecla | Acción |
|---|---|
% | Dividir izquierda/derecha |
" | Dividir arriba/abajo |
Flecha | Mover |
Ctrl+Flecha | Redimensionar |
z | Zoom (alternar) |
x | Cerrar |
Espacio | Ciclar diseños |
{ / } | Intercambiar posición |
! | Separar panel en nueva ventana |
Otros:
| Tecla | Acción |
|---|---|
[ | Modo de copia |
] | Pegar |
: | Prompt de comando |
? | Listar todos los atajos |
t | Reloj |
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.
# -------------------------------------------
# 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:
# 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.
# 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.
#!/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
# 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.
# 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.
# 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.
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.confte 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.
Si quieres llevar tu productividad en la terminal más lejos, prueba a añadir búsqueda difusa con fzf. La combinación tmux + fzf es un cambio total. Para una visión más amplia de herramientas CLI, consulta la visión general del Kit de herramientas CLI.