🚀 TMUX Pro & God-Tier: Guía, Optimización y Portapapeles en Linux Mint

Configuración Definitiva de TMUX, Portapapeles Sin Fricción y Navegación Ergonómica

Esta guía documenta la auditoría, corrección crítica del portapapeles y optimización ergonómica de la configuración de TMUX (~/.tmux.conf) en Linux Mint (Cinnamon / GNOME Terminal).

Resuelve definitivamente el problema de copia cruzada entre paneles paralelos (cuando al seleccionar texto en una división horizontal o vertical se copiaba el contenido del panel contiguo), implementa navegación instantánea sin prefijo con teclas Alt y Shift, eleva la barra de estado al estilo pestañas modernas (top) con paleta Catppuccin Mocha, y unifica el portapapeles del sistema operativo mediante xclip.


🛑 El Problema: Copia Cruzada en Paneles Paralelos

Al trabajar con herramientas multitarea como antigravity-cli (AGY) o Neovim en paneles paralelos (splits verticales u horizontales), al seleccionar y copiar texto con el ratón se copiaba también el texto del panel vecino.

🔍 Causa Raíz

graph TD
    subgraph "Escenario 1: Terminal Nativa (Error)"
        T1["Arrastre con Shift o Ratón Nativo"] --> T2["GNOME Terminal lee toda la fila (170 cols)"]
        T2 --> T3["Cruza el borde divisorio vertical"]
        T3 --> T4["❌ Copia texto mezclado: Panel 1 + Panel 2"]
    end

    subgraph "Escenario 2: TMUX Gestionado (Solución)"
        M1["Arrastre normal con Mouse en TMUX"] --> M2["TMUX Copy-Mode encapsula el panel"]
        M2 --> M3["Selección limitada estrictamente a columnas [0 - 84]"]
        M3 --> M4["✅ Copia pura: Solo texto del panel activo"]
    end
  1. La Terminal vs TMUX: Para GNOME Terminal, la pantalla es una sola matriz continua de caracteres. Si se utiliza la selección nativa de la terminal (por ejemplo, manteniendo presionada la tecla Shift), la terminal desconoce la división de paneles y copia de borde a borde horizontalmente.
  2. Conflicto de tmux-yank: El plugin tmux-yank se cargaba al final del archivo y sobrescribía los eventos de ratón con:
    # Comportamiento por defecto de tmux-yank (problemático):
    copy-pipe-and-cancel "xclip -selection primary"
    • Guardaba el texto en el búfer primary (el del clic de la rueda central de Linux) en lugar del clipboard del sistema (el de Ctrl + V).
    • Cerraba la selección inmediatamente (cancel), por lo que no había retroalimentación visual.
    • Esto obligaba inconscientemente al usuario a recurrir a Shift + Arrastrar, activando la copia cruzada horizontal de la terminal.

🛠️ Solución Implementada

En ~/.tmux.conf se aplicó una corrección en tres capas:

  1. Configuración nativa de tmux-yank: Se forzó a que el plugin use el portapapeles real del sistema y no cancele la selección al soltar el ratón:
    set -g @yank_selection 'clipboard'
    set -g @yank_selection_mouse 'clipboard'
    set -g @yank_action 'copy-pipe-no-clear'
  2. Overrides post-TPM garantizados: Al final del archivo (después de inicializar TPM) se definieron reglas directas con xclip:
    • Soltar arrastre: Copia al portapapeles del sistema (xclip -in -selection clipboard) manteniendo el resaltado.
    • Doble clic: Selecciona y copia la palabra exacta al portapapeles sin salirse del panel.
    • Triple clic: Selecciona y copia la línea completa exacta de ese panel al portapapeles sin tocar el panel vecino.
  3. Modo Bloque / Rectangular (Ctrl + v): Dentro del modo copia de vi (Prefix + [), C-v activa la selección rectangular para recortar columnas específicas sin saltos de línea.

EL TRUCO MAESTRO: ZOOM DE PANEL ( Prefix + z)

Cuando se trabaja en paralelo y se desea leer o copiar un bloque extenso de texto sin ninguna distracción visual:

  1. Presionar Ctrl+a y luego z (Prefix + z). El panel activo se maximiza al 100% de la pantalla.
  2. Copiar con total comodidad.
  3. Volver a presionar Ctrl+a y luego z para restaurar la cuadrícula de paneles intacta.

⚡ Mapa de Atajos y Nuevas Capacidades

CategoríaAcciónAtajo de Teclado
Prefijo (Prefix)Tecla maestra de controlCtrl + a (Cambiado de Ctrl+b)
Navegación PanelesSaltar entre paneles (directo)Alt + ← ↓ ↑ →
Navegación PanelesAlternativa Vim (directo)Alt + h j k l
Pestañas (Ventanas)Cambiar entre ventanas (directo)Shift + ← / →
División de PantallaDividir verticalmente (en paralelo)Prefix + | (mantiene directorio)
División de PantallaDividir horizontalmente (arriba/abajo)Prefix + - (mantiene directorio)
Gestión de VentanasCrear nueva ventanaPrefix + c (mantiene directorio)
Zoom de PanelMaximizar / Restaurar panelPrefix + z
RedimensionarAjustar tamaño de paneles (+/- 5 celdas)Prefix + H / J / K / L
Portapapeles RatónCopiar selección al portapapelesArrastrar con ratón (sin Shift)
Portapapeles RatónCopiar palabra del panelDoble clic
Portapapeles RatónCopiar línea entera del panelTriple clic
Modo Copia VimEntrar al historial de scrollPrefix + [
Modo Copia VimIniciar selección / Modo Rectángulo / Copiarv / Ctrl+v / y
Sessionizer (FZF)Salto difuso entre proyectosPrefix + f
Recarga en VivoRecargar configuración sin reiniciarPrefix + r

🎨 Estilo Visual: Catppuccin Mocha

La interfaz gráfica de TMUX fue adaptada para maximizar la visibilidad y ergonomía:

  • Posición Superior (top): La barra de estado se ubica en la parte alta de la terminal, actuando como una barra de pestañas moderna (similar a Google Chrome o VS Code) y liberando el área inferior para el prompt de la shell.
  • Identificación de Panel Activo: Borde resaltado en azul brillante (#89b4fa, bold), mientras los paneles inactivos quedan en tono discreto (#313244).
  • Pestaña Activa: Resaltada en fondo verde menta suave (#a6e3a1) con texto en contraste oscuro.
  • Bloque Derecho: Muestra la fecha (%d/%m/%Y), la hora (%H:%M) y el hostname del equipo en acento pastel (#f38ba8).

🔌 Ecosistema de Plugins (TPM) y Persistencia

El gestor de plugins TPM (~/.tmux/plugins/tpm) mantiene sincronizado el siguiente stack:

  1. tmux-sensible: Opciones base estándar y seguras reconocidas por la comunidad.
  2. vim-tmux-navigator: Integración bidireccional perfecta con Neovim (Ctrl + h/j/k/l cruza transparentemente entre splits de Neovim y paneles de TMUX).
  3. tmux-resurrect: Permite guardar y restaurar manualmente el estado completo de sesiones, paneles y programas.
  4. tmux-continuum: Automatiza el guardado de sesiones cada 15 minutos (@continuum-save-interval '15') y restaura todo automáticamente al arrancar TMUX (@continuum-restore 'on').
  5. tmux-yank: Sincronización del portapapeles adaptada al entorno X11 de Linux Mint.

Comandos de Mantenimiento de Plugins:

  • Prefix + I (Shift + i): Descarga e instala nuevos plugins agregados a la lista @plugin.
  • Prefix + U: Actualiza todos los plugins instalados.
  • Prefix + Alt + u: Elimina plugins desinstalados de la lista.
  • Prefix + Ctrl + s: Guardar sesión manualmente (Resurrect).
  • Prefix + Ctrl + r: Restaurar sesión manualmente (Resurrect).

📜 Archivo de Configuración Completo (~/.tmux.conf)

Ubicación en el sistema: file:///home/alexwce/.tmux.conf

# ==============================================================================
# 🚀 TMUX PRO & GOD-TIER CONFIGURATION — alexwce
# ==============================================================================
 
# ------------------------------------------------------------------------------
# 1. Comportamiento y Usabilidad Básica
# ------------------------------------------------------------------------------
# Habilitar soporte completo de ratón (clic, arrastrar bordes, scroll con rueda)
set -g mouse on
 
# Iniciar conteo de ventanas y paneles en 1 (en vez de 0) para alinearse con el teclado
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
 
# Eliminar retraso al presionar ESC (vital para Vim / Neovim)
set -s escape-time 0
 
# Historial amplio para no perder logs de servidores o tests largos (50k líneas)
set -g history-limit 50000
 
# ------------------------------------------------------------------------------
# 2. Colores y Terminal (True Color RGB)
# ------------------------------------------------------------------------------
set -g default-terminal "tmux-256color"
set -as terminal-features ",xterm-256color:RGB"
 
# ------------------------------------------------------------------------------
# 3. Tecla Prefix y Atajos de Teclado Intuitivos
# ------------------------------------------------------------------------------
# Cambiar Prefix de Ctrl+b a Ctrl+a (más rápido y ergonómico con la mano izquierda)
set -g prefix C-a
unbind C-b
bind C-a send-prefix
 
# Navegación directa entre paneles SIN presionar Prefix (Alt + Flechas)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
 
# Alternativa con teclas Vim (Alt + h, j, k, l)
bind -n M-h select-pane -L
bind -n M-j select-pane -D
bind -n M-k select-pane -U
bind -n M-l select-pane -R
 
# Cambiar entre ventanas (pestañas) SIN presionar Prefix (Shift + Flechas)
bind -n S-Left previous-window
bind -n S-Right next-window
 
# Dividir paneles vertical y horizontalmente manteniendo el directorio actual
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
 
# Crear nueva ventana manteniendo el directorio actual
bind c new-window -c "#{pane_current_path}"
 
# Redimensionar paneles con Prefix + H, J, K, L (de 5 en 5 caracteres)
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
 
# Recargar configuración al instante con Prefix + r
bind r source-file ~/.tmux.conf \; display-message "⚡ ¡Configuración de tmux recargada con éxito!"
 
# Sessionizer con fzf: Prefix + f abre el buscador difuso de proyectos
bind-key -r f run-shell "tmux neww ~/.local/bin/tmux-sessionizer"
 
# ------------------------------------------------------------------------------
# 4. Modo Copia Estilo Vim, Portapapeles y Ratón
# ------------------------------------------------------------------------------
set -s set-clipboard on
setw -g mode-keys vi
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi C-v send -X rectangle-toggle
bind -T copy-mode-vi y send -X copy-pipe-and-cancel "xclip -in -selection clipboard"
 
# Configuración de comportamiento para el plugin tmux-yank:
# Envía al portapapeles real (Ctrl+V) en vez de al búfer de clic central (primary)
set -g @yank_selection 'clipboard'
set -g @yank_selection_mouse 'clipboard'
set -g @yank_action 'copy-pipe-no-clear'
 
# ------------------------------------------------------------------------------
# 5. Estilo Visual: Bordes y Barra Catppuccin
# ------------------------------------------------------------------------------
# Resaltar claramente cuál es el panel activo con un borde verde/azul brillante
set -g pane-border-style "fg=#313244"
set -g pane-active-border-style "fg=#89b4fa,bold"
 
# Barra de estado arriba estilo pestañas de navegador/IDE moderno
set -g status-position top
set -g status-interval 2
set -g status-style "bg=#181825,fg=#cdd6f4"
 
# Izquierda: Nombre de la sesión activa
set -g status-left-length 40
set -g status-left "#[bg=#89b4fa,fg=#11111b,bold] ❐ #S #[bg=default,fg=default] "
 
# Centro: Ventanas
set -g window-status-separator " "
set -g window-status-format "#[bg=#313244,fg=#a6adc8] #I:#W "
set -g window-status-current-format "#[bg=#a6e3a1,fg=#11111b,bold] #I:#W* #[bg=default,fg=default]"
 
# Derecha: Fecha, hora y hostname
set -g status-right-length 100
set -g status-right "#[fg=#a6adc8]%d/%m/%Y │ %H:%M #[bg=#f38ba8,fg=#11111b,bold] #h "
 
# ------------------------------------------------------------------------------
# 6. Ecosistema de Plugins (TPM)
# ------------------------------------------------------------------------------
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'christoomey/vim-tmux-navigator'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-yank'
 
# Configuración de Persistencia Automática
set -g @resurrect-capture-pane-contents 'on'
set -g @continuum-restore 'on'
set -g @continuum-save-interval '15'
 
# Inicializar TMUX Plugin Manager (siempre al final de las declaraciones de plugins)
run '~/.tmux/plugins/tpm/tpm'
 
# ------------------------------------------------------------------------------
# 7. Overrides de Selección y Portapapeles (después de cargar TPM/tmux-yank)
# ------------------------------------------------------------------------------
# 1. Al arrastrar y soltar con el ratón: copiar directo a clipboard del sistema (Ctrl+V)
#    y mantener la selección visual sin cerrarla abruptamente:
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-no-clear "xclip -in -selection clipboard"
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-no-clear "xclip -in -selection clipboard"
 
# 2. Doble clic: copia la palabra bajo el cursor al portapapeles sin cruzar paneles:
bind-key -T copy-mode-vi DoubleClick1Pane select-pane \; send-keys -X select-word \; send-keys -X copy-pipe-no-clear "xclip -in -selection clipboard"
bind-key -n DoubleClick1Pane select-pane -t = \; copy-mode -M \; send-keys -X select-word \; send-keys -X copy-pipe-no-clear "xclip -in -selection clipboard"
 
# 3. Triple clic: copia la línea completa exacta del panel activo al portapapeles:
bind-key -T copy-mode-vi TripleClick1Pane select-pane \; send-keys -X select-line \; send-keys -X copy-pipe-no-clear "xclip -in -selection clipboard"
bind-key -n TripleClick1Pane select-pane -t = \; copy-mode -M \; send-keys -X select-line \; send-keys -X copy-pipe-no-clear "xclip -in -selection clipboard"

🔗 Referencias y Conexiones