Dale super-poderes a tu terminal con 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
.
Generalmente me gusta tener 3 paneles, algo así: 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
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.
No tienes cuenta? Regístrate aqui
Ya registrado? Iniciar sesión a tu cuenta ahora.
-
Comentarios
Online: 0
Por favor inicie sesión para poder escribir comentarios.