# Referencia Rápida de tmux

*Sesiones, ventanas, paneles, modo copia, configuración*

> Source: tmux Documentation (github.com/tmux/tmux) · MIT

## Gestión de Sesiones

### Crear y Conectar

```
tmux                        # nueva sesión
tmux new -s work            # nueva sesión con nombre
tmux attach -t work         # conectar a sesión
tmux attach -dt work        # desconectar otros, conectar
```

### Comandos de Sesión

| Command | Description |
|---------|-------------|
| `tmux ls` | Listar todas las sesiones |
| `tmux kill-session -t work` | Eliminar una sesión con nombre |
| `tmux kill-server` | Eliminar el servidor tmux y todas las sesiones |
| `tmux rename-session -t old new` | Renombrar una sesión |
| `Prefix d` | Desconectarse de la sesión actual |
| `Prefix $` | Renombrar sesión actual |
| `Prefix s` | Listar sesiones (interactivo) |

*El prefijo predeterminado es Ctrl-b*

## Ventanas

### Atajos de Ventana

| Command | Description |
|---------|-------------|
| `Prefix c` | Crear nueva ventana |
| `Prefix ,` | Renombrar ventana actual |
| `Prefix &` | Cerrar ventana actual (confirmar) |
| `Prefix n` | Siguiente ventana |
| `Prefix p` | Ventana anterior |
| `Prefix 0-9` | Cambiar a ventana por número |
| `Prefix w` | Listar ventanas (selector interactivo) |
| `Prefix l` | Alternar a la última ventana activa |

### Comandos de Ventana

```
tmux new-window -t work     # nueva ventana en sesión
tmux swap-window -t 0       # mover ventana al índice 0
tmux move-window -t 3       # renumerar al índice 3
```

## Paneles

### Dividir y Cerrar

| Command | Description |
|---------|-------------|
| `Prefix %` | Dividir horizontalmente (izquierda \| derecha) |
| `Prefix "` | Dividir verticalmente (arriba / abajo) |
| `Prefix x` | Cerrar panel actual (confirmar) |
| `Prefix !` | Convertir panel en su propia ventana |
| `Prefix z` | Alternar zoom del panel (ventana completa) |

### Redimensionar Paneles

| Command | Description |
|---------|-------------|
| `Prefix Ctrl-Arrow` | Redimensionar 1 celda |
| `Prefix Alt-Arrow` | Redimensionar 5 celdas |
| `Prefix Space` | Ciclar por los diseños |

*Diseños: even-horizontal, even-vertical, main-horizontal, main-vertical, tiled*

## Navegación

### Moverse entre Paneles

| Command | Description |
|---------|-------------|
| `Prefix Arrow` | Moverse al panel en esa dirección |
| `Prefix o` | Ciclar al siguiente panel |
| `Prefix q` | Mostrar números de panel, luego presionar número para saltar |
| `Prefix {` | Intercambiar panel con el anterior |
| `Prefix }` | Intercambiar panel con el siguiente |

### Moverse entre Sesiones

| Command | Description |
|---------|-------------|
| `Prefix (` | Cambiar a la sesión anterior |
| `Prefix )` | Cambiar a la sesión siguiente |
| `Prefix s` | Selector de sesiones (vista de árbol) |
| `Prefix w` | Selector de ventanas en todas las sesiones |

## Modo Copia

### Entrar y Navegar

| Command | Description |
|---------|-------------|
| `Prefix [` | Entrar en modo copia |
| `q` | Salir del modo copia |
| `Arrow / hjkl` | Mover cursor (modo vi) |
| `Ctrl-u / Ctrl-d` | Página arriba / página abajo |
| `g / G` | Saltar al principio / final |
| `/` | Buscar hacia adelante |
| `?` | Buscar hacia atrás |
| `n / N` | Siguiente / anterior coincidencia |

### Seleccionar y Copiar

| Command | Description |
|---------|-------------|
| `Space` | Iniciar selección (modo vi) |
| `Enter` | Copiar selección y salir |
| `Prefix ]` | Pegar buffer |
| `v` | Alternar selección rectangular (modo vi) |

*Activar modo vi: set -g mode-keys vi*

## Configuración

### Configuraciones Comunes (~/.tmux.conf)

```
set -g mouse on                 # activar ratón
set -g base-index 1             # ventanas empiezan en 1
set -g renumber-windows on      # renumerar al cerrar
set -g default-terminal "tmux-256color"
set -g history-limit 50000
```

### Recargar Configuración

```
tmux source-file ~/.tmux.conf   # desde la shell
# o Prefix : luego escribir:
source-file ~/.tmux.conf
```

## Barra de Estado

### Opciones de la Barra de Estado

```
set -g status-position top
set -g status-style "bg=black,fg=white"
set -g status-left "[#S] "
set -g status-right "%H:%M %d-%b"
set -g status-interval 5
```

### Variables de Formato

| Command | Description |
|---------|-------------|
| `#S` | Nombre de sesión |
| `#I` | Índice de ventana |
| `#W` | Nombre de ventana |
| `#P` | Índice de panel |
| `#H` | Nombre de host |
| `#T` | Título del panel |

## Atajos de Teclado

### Atajos Personalizados

```
# cambiar prefijo a Ctrl-a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# 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
```

### Sintaxis de Atajos

| Command | Description |
|---------|-------------|
| `bind X command` | Asignar Prefix + X al comando |
| `bind -n M-Left prev` | Asignar sin prefijo (Alt-Left) |
| `bind -r H resize-pane -L 5` | Atajo repetible |
| `unbind X` | Eliminar un atajo |
| `Prefix ?` | Listar todos los atajos actuales |

## Scripting

### Diseños con Scripts

```
tmux new-session -d -s dev
tmux send-keys -t dev "vim" Enter
tmux split-window -h -t dev
tmux send-keys -t dev "npm run dev" Enter
tmux attach -t dev
```

### Comandos Útiles

| Command | Description |
|---------|-------------|
| `tmux send-keys -t sess 'cmd' Enter` | Enviar pulsaciones de teclas a una sesión |
| `tmux capture-pane -p` | Imprimir contenido del panel a stdout |
| `tmux display-message '#S'` | Mostrar un mensaje / variable |
| `tmux set-environment -g VAR val` | Establecer una variable de entorno |
| `tmux list-keys` | Listar todos los atajos de teclado |

## Patrones Comunes

### ~/.tmux.conf Recomendado

```
set -g mouse on
set -g base-index 1
set -g mode-keys vi
set -g status-position top
set -g history-limit 50000
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
```

### Recetas Rápidas

| Command | Description |
|---------|-------------|
| `Sobrevivir desconexión SSH` | `tmux new -s work` → desconectar → `tmux attach -t work` |
| `Compartir sesión` | Ambos usuarios `tmux attach -t same` (solo lectura: `-r`) |
| `Guardar historial` | `tmux capture-pane -S -3000 -p > log.txt` |
| `Matar panel bloqueado` | Prefix x, o `tmux kill-pane -t %N` |
| `Reordenar ventanas` | `:swap-window -s 3 -t 1` |
