Dale super-poderes a tu terminal con tmux

2019-01-23 | Gabriel Garrido | 5 min de lectura
1 interactive lab ↓
Share:
On this page
  1. Introducción
  2. Tmux
  3. Adjuntar/desconectar una sesión
  4. Prefijo
  5. Ejemplo
  6. Valores predeterminados
  7. Movimiento
  8. Configuración
  9. Paneles
  10. Barra de estado
  11. Copiar/pegar
  12. Notas
  13. Errata

Apoya este blog

Si te resulta util este contenido, considera apoyar el blog.

tmux

Introducción#

En este artículo quiero presentarte tmux. Tal vez hayas usado screen en el pasado o escuchado hablar de él. Lo que tmux y screen son, básicamente, son multiplexores de terminal. ¿Qué significa eso? Que podés tener muchas ventanas/pestañas y divisiones/paneles en una sola ventana de terminal. Esto puede facilitar mucho las cosas cuando lo usás como entorno de desarrollo, por ejemplo, podés desconectarte de la terminal y dejar procesos corriendo indefinidamente o compartir tu terminal con un colega a través de ssh. En los ejemplos te voy a explicar partes de mi configuración y cómo la uso. La configuración completa la podés encontrar aquí. Estoy usando ZSH como shell y Vim como editor de texto.

Tmux#

También uso tmux para mantener sesiones, por ejemplo, puedo tener una sola ventana de terminal abierta porque, con la ayuda de ZSH, se adjunta automáticamente a una sesión gracias a oh-my-zsh y al plugin tmux. Uso mucho las pestañas, que tmux llama ventanas, y a veces también uso divisiones o paneles.

Ahora que tenés una idea básica de lo que hace tmux y cómo llama a sus elementos, vamos a ver algunas partes de la configuración y cómo usarla.

Adjuntar/desconectar una sesión#

Para crear una sesión y adjuntarla, necesitás ejecutar tmux new -s mi-sesion, luego para desconectarla: CTRL-a d y para re-adjuntarla: tmux a -t mi-sesion. Para matarla: tmux kill-session -t mi-sesion o cerrar todas las ventanas.

Prefijo#

No uso el prefijo por defecto que es CTRL-b, uso CTRL-a como en screen.

# Usar ctrl-a en lugar de ctrl-b
set -g prefix C-a
unbind C-b
bind C-a send-prefix

Ejemplo#

Podés mostrar los números de los paneles con CTRL-a q, y podés navegar entre ventanas y paneles como una lista con CTRL-a w. img

Generalmente me gusta tener 3 paneles, algo así: img Puedo editar el código o lo que sea en el panel 0, ejecutar comandos si lo necesito en el panel 1, y tener el servidor web o el compilador de código, etc. en el panel 2. Esto es muy útil porque puedo escribir y probar cosas al mismo tiempo sin salir del teclado, o mirar dos proyectos/archivos diferentes uno al lado del otro.

Con tmux ls podemos listar las sesiones activas. También tmux tiene un modo de comandos (CTRL-a :) como Vim, donde podés ejecutar algunos comandos o cambiar configuraciones al vuelo. Por ejemplo, en lugar de ejecutar tmux ls, podés obtener la misma información haciendo CTRL-a : y luego ls<CR>.

Valores predeterminados#

Algunas configuraciones útiles, como por ejemplo, empezar las ventanas en 1 en lugar de 0, y renumerarlas al salir, también facilita el manejo de las ventanas.

# Empezar a numerar las ventanas desde 1 para que coincidan con el orden del teclado
set -g base-index 1

# Buffer de historial de n líneas
set -g history-limit 10000

# Renumerar ventanas al salir
set-option -g renumber-windows on

# Usar teclas vi en modos de copia y selección
set-window-option -g mode-keys vi

# Habilitar mouse, permite hacer scroll en el historial de tmux
set -g mouse on

Movimiento#

Me muevo entre ventanas con CTRL+h y CTRL+l, y entre paneles con CTRL-a [hjkl].

# Moverse entre ventanas
bind-key -n C-h prev
bind-key -n C-l next

# Moverse entre paneles
unbind h
bind h select-pane -L
unbind j
bind j select-pane -D
unbind k
bind k select-pane -U
unbind l
bind l select-pane -R

Configuración#

Un truco útil si estás probando la configuración es recargarla desde el archivo con CTRL-a r.

# Forzar la recarga del archivo de configuración
unbind r
bind r source-file ~/.tmux.conf \; display "¡Recargado!"

Paneles#

Todo muy lindo, pero ¿cómo abro un panel o una nueva ventana?

# Divisiones horizontal y vertical
unbind |
bind | split-window -h
unbind -
bind - split-window

Fácil, CTRL-a | te dará un panel vertical, y CTRL-a - te dará un panel horizontal. También podés reordenar los paneles con CTRL-a SPACE.

También podés reordenar ventanas con SHIFT-Flecha Izquierda y SHIFT-Flecha Derecha.

# Intercambiar ventanas
bind-key -n S-Left swap-window -t -1
bind-key -n S-Right swap-window -t +1

Barra de estado#

La barra de estado y los colores son bastante simples, pero me gustan.

# Barra de estado con fondo gris oscuro
set-option -g status-bg colour234
set-option -g status-fg colour0
# A la izquierda muestra el nombre de la sesión en azul
set-option -g status-left-bg default
set-option -g status-left-fg colour74
# A la derecha algunos stats de la CPU, en verde terminal
set-option -g status-right-bg default
set-option -g status-right-fg colour71
# Las ventanas son gris medio; la ventana actual es blanca
set-window-option -g window-status-fg colour244
set-window-option -g window-status-current-fg '#ffffff'
set-window-option -g window-status-current-bg '#000000'
# Las ventanas con beep tienen fondo naranja intenso
set-window-option -g window-status-bell-fg '#000000'
set-window-option -g window-status-bell-bg '#d78700'
set-window-option -g window-status-bell-attr none
# Limitar el tamaño de los títulos de las ventanas
set-window-option -g window-status-format '#[fg=yellow] #F#I#[default] #W '
set-window-option -g window-status-current-format '#[bg=yellow] #I#[bg=yellow] #W '

Copiar/pegar#

img Tmux también soporta el modo vi-copy, podés entrar en este modo con CTRL-a ESC. Luego, presionando v para selección normal o V para selección de líneas, podés marcar y copiar con Y (por defecto es ENTER o <CR>).

Y como te imaginarás, podés pegar con CTRL-a p. Esto es muy útil cuando copiás de un panel a otro o de una ventana a otra. En Vim te recomiendo :set paste! antes de pegar, así no intenta formatear el texto, etc.

También copia al buffer del portapapeles usando xsel.

# Hacer el modo copia más parecido a vim
bind Escape copy-mode
unbind p
bind p paste-buffer
bind-key -T edit-mode-vi Up send-keys -X history-up
bind-key -T edit-mode-vi Down send-keys -X history-down
unbind-key -T copy-mode-vi Space     ;   bind-key -T copy-mode-vi v send-keys -X begin-selection

unbind-key -T copy-mode-vi Enter     ;   bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel -i --clipboard"
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xsel -i --clipboard"

unbind-key -T copy-mode-vi C-v       ;   bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
unbind-key -T copy-mode-vi [         ;   bind-key -T copy-mode-vi [ send-keys -X begin-selection
unbind-key -T copy-mode-vi ]         ;   bind-key -T copy-mode-vi ] send-keys -X copy-selection

Si querés aprender más sobre tmux, un buen lugar para empezar es la wiki de Arch Linux.

Notas#

A veces podés tener problemas con las teclas HOME y END, esto te puede ayudar con eso.

# Parche para Home / End
bind -n End send-key C-e
bind -n Home send-key C-a

Errata#

Si encontrás algún error o tenés alguna sugerencia, por favor enviame un mensaje para que lo corrija.



$ Comentarios

Online: 0

Por favor inicie sesión para poder escribir comentarios.

2019-01-23 | Gabriel Garrido