Tmux (Español)

Este artículo o sección necesita ser
traducido
.
Notas:
Traducción en curso. (Discusión en
Talk:Tmux (Español)#
)
Tmux
es un «multiplexor de terminales»: permite crear, acceder y controlar diversas terminales (o ventanas) desde una sola pantalla, cada una ejecutando un programa independiente. tmux puede desacoplarse de una pantalla y continuar ejecutándose en segundo plano para, más tarde, volver a acoplarse.
tmux es una alternativa a
GNU Screen
con licencia ISC. Aunque son similares, existen muchas diferencias entre ambos programas, como se indica en la página de
preguntas frecuentes (FAQ) de tmux.
.
Instalación
Instale
el paquete
tmux
.
Configuración
De forma predeterminada, a partir de la versión
3.2
, tmux busca la configuración específica del usuario en $XDG_CONFIG_HOME/tmux/tmux.conf, seguido de
~/.config/tmux/tmux.conf
. Se puede proporcionar un archivo de configuración global en
/etc/tmux.conf
, aunque Arch no distribuye dicho archivo de forma predeterminada.
Atajos de teclado
De forma predeterminada, los atajos de teclado para los comandos están precedidos por el prefijo
Ctrl+b
. Por ejemplo, para dividir una ventana verticalmente, pulse
Ctrl+b
seguido de
%
.
Tras dividir una ventana en varios paneles, se puede redimensionar un panel pulsando la tecla de prefijo (p. ej.
Ctrl+b
) y, mientras se mantiene presionado
Ctrl
, pulsar
Izquierda
/
Derecha
/
Arriba
/
Abajo
. El intercambio de paneles se logra de la misma manera, pero pulsando o en lugar de una tecla de dirección.
Los atajos de teclado se pueden modificar mediante los comandos bind y unbind en
tmux.conf
. Por ejemplo, el prefijo predeterminado
Ctrl+b
puede cambiarse a
Ctrl+a
añadiendo los siguientes comandos en su archivo de configuración:
unbind C-b
set -g prefix C-a
bind C-a send-prefix
Sugerencia
Ponga entre comillas los caracteres especiales para usarlos como prefijo. También se puede utilizar
Alt
(llamado Meta) en lugar de
Ctrl
. Por ejemplo:
set -g prefix m-'\'
Para crear una nueva ventana, puede pulsar
Ctrl+b c
; para avanzar una ventana, use
Ctrl+b n
y para retroceder,
Ctrl+b p
.
Otras formas de desplazarse entre ventanas incluyen las siguientes:
Ctrl+b l (Moverse a la ventana seleccionada anteriormente)
Ctrl+b w (Listar todas las ventanas y sus números)
Ctrl+b <número de ventana> (Moverse al número de ventana especificado; los atajos predeterminados son del 0 al 9)
Ctrl+b q (Mostrar los números de los paneles; cuando aparezcan, pulse la tecla correspondiente para ir a ese panel)
tmux tiene una opción de búsqueda de ventanas (find-window) y un atajo de teclado para facilitar la navegación entre múltiples ventanas:
Ctrl+b f <nombre de la ventana> (Buscar una ventana por nombre)
Ctrl+b w (Seleccionar desde una lista interactiva de ventanas)
Modo copia
Una ventana de tmux puede estar en uno de varios modos. El predeterminado permite el acceso directo a la terminal vinculada a la ventana; el otro es el modo copia. Una vez en el modo copia, puede navegar por el búfer, incluyendo el desplazamiento por el historial. Utilice atajos de teclado al estilo de
vi
o
emacs
en el modo copia. El predeterminado es emacs, a menos que las variables VISUAL o EDITOR contengan «vi».
Para entrar en el modo copia, realice lo siguiente:
Ctrl+b [
Puede navegar por el búfer de la misma forma que lo haría en su editor predeterminado.
Para salir del modo copia, utilice uno de los siguientes atajos de teclado:
Modo vi:
q
Modo emacs:
Esc
Navegar por URLs
Para navegar por las URLs dentro de tmux, debe tener instalado y configurado
urlview
AUR
.
En una nueva terminal:
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; run-shell "$TERMINAL -e urlview /tmp/tmux-buffer"
O en una nueva ventana de tmux (sin necesidad de una nueva terminal):
bind-key u capture-pane \; save-buffer /tmp/tmux-buffer \; new-window -n "urlview" '$SHELL -c "urlview < /tmp/tmux-buffer"'
Configurar el terminal correcto
256 colores
Si está utilizando una terminal de 256 colores, deberá configurar el valor de TERM correcto en tmux:
tmux
o
tmux-256color
. Esto se puede establecer en el archivo de configuración:
tmux.conf
set -g default-terminal "tmux-256color"
Además, si tmux presenta problemas de visualización, puede forzarlo a que asuma que la terminal soporta 256 colores añadiendo el siguiente alias en su
.bashrc
:
alias tmux="tmux -2"
Color de 24 bits
tmux admite color de 24 bits. Si su terminal soporta este modo (consulte
[1]
), añádalo a la configuración
terminal-features
.
Por ejemplo, si utiliza la terminal
Alacritty
, debería añadir:
set -as terminal-features ",alacritty*:RGB"
xterm-keys
Para habilitar xterm-keys, añada la siguiente línea en el archivo de configuración:
tmux.conf
set-option -g xterm-keys on
Si habilita xterm-keys en su
tmux.conf
, deberá crear un terminfo personalizado para declarar las nuevas secuencias de escape o, de lo contrario, las aplicaciones no las reconocerán. Compile lo siguiente con
tic
y podrá utilizar «xterm-screen-256color» como su TERM:
# A screen- based TERMINFO that declares the escape sequences
# enabled by the tmux config "set-window-option -g xterm-keys".
#
# Prefix the name with xterm- since some applications inspect
# the TERM *name* in addition to the terminal capabilities advertised.
xterm-screen-256color|GNU Screen with 256 colors bce and tmux xterm-keys,

# As of Nov'11, the below keys are picked up by
# .../tmux/blob/master/trunk/xterm-keys.c:
	kDC=\E[3;2~, kEND=\E[1;2F, kHOM=\E[1;2H,
	kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~,
	kRIT=\E[1;2C,

# Change this to screen-256color if the terminal you run tmux in
# doesn't support bce:
	use=screen-256color-bce,
Para comprobar si su terminal soporta bce, puede utilizar
tic -c
:
$ tic -c xterm-screen-256color 
"xterm-screen-256color", line 16, terminal 'xterm-screen-256color': resolution of use=screen-256color-bce failed
Para compilar con tic:
$ tic xterm-screen-256color
El archivo se compilará y se guardará en
$HOME/.terminfo
o en
/usr/share/terminfo/
si se ejecuta como root (estando así disponible para todo el sistema).
Theming
Se puede personalizar el estilo de tmux; sin embargo, para hacerlo, primero es necesario conocer los códigos de colores. Esto se puede lograr ejecutando el siguiente comando, que imprimirá los códigos de colores junto con una muestra de cada uno:
$ for i in {0..255}; do printf "\x1b[38;5;${i}mcolor${i} - ██████████\n"; done
Los códigos de colores impresos con el comando anterior pueden utilizarse para cambiar el esquema de colores de tmux. El siguiente es un ejemplo de cómo se pueden cambiar los colores de la barra de estado:
# Status line colors
set -g status-bg "color4"         # blue background
set -g status-fg "color7"         # gray text color
set -g status-right "%l:%M %p"    # time format
set-window-option -g window-status-current-style "bg=color75,fg=color231 bold"    # current window background + foreground colors
Los bordes de los paneles también se pueden personalizar, como en el siguiente ejemplo:
# border colors
set -g pane-border-style        fg="colour255"
set -g pane-active-border-style fg="colour33"
Otros ajustes
Para limitar el búfer de desplazamiento a 10000 líneas:
set -g history-limit 10000
El ratón se puede activar o desactivar con:
bind-key m set-option -g mouse \; display "Mouse: #{?mouse,ON,OFF}"
Inicio automático con systemd
Existen algunas ventajas notables al iniciar un servidor tmux al arrancar el sistema. Especialmente, cuando se inicia una nueva sesión de tmux, tener el servicio ya en ejecución reduce cualquier retraso en el inicio.
Además, cualquier personalización vinculada a su sesión de tmux se conservará y se puede hacer que su sesión de tmux persista incluso si nunca ha iniciado sesión, en caso de que tenga algún motivo para ello (como una configuración de tmux con gran cantidad de scripts o sesiones de tmux de usuario compartidas).
El siguiente servicio inicia
tmux
para el usuario especificado (es decir, se inicia o habilita con
tmux@
username
.service
):
/etc/systemd/system/tmux@.service
[Unit]
Description=tmux session for user %I

[Service]
Type=forking
User=%I
# WARNING: use %I instead of %u here; %u=root in system services.
ExecStart=/usr/bin/tmux new-session -s %I -d
ExecStop=/usr/bin/tmux kill-session -t %I

[Install]
WantedBy=multi-user.target
Sugerencia
Es posible que desee añadir
WorkingDirectory=
custom_path
para personalizar el directorio de trabajo. Si se establece en
~
, se utilizará el directorio personal del usuario especificado en
User=
.
Añada el argumento
-v
de tmux para generar registros (logs) del cliente y del servidor en el directorio de trabajo (WorkingDirectory).
Si desea importar variables de entorno relacionadas con la sesión gráfica, tales como
DISPLAY
,
WAYLAND_DISPLAY
o
SESSION_MANAGER
, cambie la opción
WantedBy
a
graphical-session.target
y añada
After=graphical-session.target
bajo la sección
[Unit]
.
Alternativamente, puede crear un script que se ejecute automáticamente tras la carga del entorno de escritorio, el gestor de ventanas o el compositor de Wayland, e importe las variables relacionadas utilizando
tmux setenv -g name [valor]
.
Alternativamente, puede colocar este archivo dentro de su directorio
systemd/User
(omitiendo
User=%I
y sustituyendo
multi-user.target
por
default.target
en
WantedBy
), por ejemplo en
~/.config/systemd/user/tmux.service
. De esta manera, el servicio de tmux se iniciará cuando inicie sesión, a menos que también habilite la opción descrita en
systemd/User#Automatic start-up of systemd user instances
. Con este método, el servicio de usuario permanecerá activo al cerrar la sesión debido al comportamiento predeterminado explicado en
systemd/User#Kill user processes on logout
.
Inicio con la instancia de usuario de systemd y activación por socket
Una forma diferente de iniciar tmux a través de systemd es este par de unidades:
/etc/systemd/user/tmux@.socket
[Unit]
Description=Terminal Multiplexer Activation Socket (listen on: %i)
Documentation=man:tmux(1)

[Socket]
ListenStream=/tmp/tmux-%U/%i
SocketMode=0600
DirectoryMode=0700

[Install]
WantedBy=sockets.target
/etc/systemd/user/tmux@.service
[Unit]
Description=Terminal Multiplexer (listen on: %i)
Documentation=man:tmux(1)
Requires=tmux@%i.socket

[Service]
Environment=TMUX_SERVER_ARGS=
ExecStart=tmux -D $TMUX_SERVER_ARGS
ExecStartPost=tmux -L%i start
Slice=app-tmux-%i.slice

[Install]
WantedBy=default.target
Also=tmux@%i.socket
(O colóquelos en
~/.config/systemd/user
). Esto crea un proceso de tmux por cada instancia del servicio, cada uno con un socket independiente.
tmux -D
inicia un servidor de tmux que no realiza un fork, al cual se le pasa correctamente el descriptor de archivo (FD) de activación; pero este proceso no ejecutará las directivas del archivo de configuración.
tmux start
ejecuta un cliente transitorio que obliga al servidor a ejecutar la sesión, si existe alguna.
Para habilitar únicamente la activación,
systemctl --user enable tmux@
NOMBRE
.socket
; inicie el cliente de forma normal con
tmux -L
NOMBRE
(simplemente
tmux
cuando
NOMBRE
sea
default
). La activación por socket, por sí sola, simplemente asegura que el servidor de tmux se mueva a su propio slice (
tmux.slice/tmux-
NOMBRE
.slice
). Esto es equivalente a lo que sugieren los desarrolladores de systemd (vea
systemd-run(1) § EXAMPLES
, under
screen
), y evita que el proceso sea finalizado por el
mecanismo de limpieza de sesión
. Esto también permite actuar sobre todo el grupo, por ejemplo:
systemctl --user freeze tmux-
NOMBRE
.slice
.
Para habilitar el inicio del servidor, ejecute
systemctl --user enable tmux@
NOMBRE
.service
. Si la instancia de de usuario de systemd es persistente
(lingering)
, esto ejecutará tmux al arrancar el sistema; de lo contrario, lo hará al iniciar sesión. Para que el servidor se inicialice y ejecute programas, defina las sesiones en su archivo de configuración de tmux.
Tenga en cuenta que el proceso tmux iniciado de esta manera hereda el entorno de systemd; a menos que inicie login shells para cada panel, consulte
Systemd/User#Environment variables
sobre cómo configurarlas.
Para cambiar el archivo de configuración de una sola instancia,
drop-in
:
/etc/systemd/user/tmux@topic.service.d/override.conf
[Service]
Environment="TMUX_SERVER_ARGS=-f %h/.tmux-topic.conf"
Inicialización de sesiones
Puede hacer que tmux abra una sesión con ventanas precargadas incluyendo esos detalles en su archivo ~
~/.tmux.conf
:
new  -n WindowName Command
neww -n WindowName Command
neww -n WindowName Command
Para iniciar una sesión con ventanas divididas (múltiples paneles), incluya el comando splitw debajo del comando neww que desee dividir; de esta manera:
new  -s SessionName -n WindowName Command
neww -n foo/bar foo
splitw -v -p 50 -t 0 bar
selectw -t 1 
selectp -t 0
...abriría 2 ventanas; la segunda de ellas se llamaría foo/bar y estaría dividida verticalmente a la mitad (50%), con foo ejecutándose arriba de bar. El foco se situaría en la ventana 2 (foo/bar), en el panel superior (foo).
Nota
La numeración de sesiones, ventanas y paneles comienza en cero, a menos que haya especificado un base-index de 1 en su archivo
.conf
.
Para gestionar múltiples sesiones, cargue archivos de sesión independientes desde su archivo de configuración:
# initialize sessions
bind F source-file ~/.tmux/foo
bind B source-file ~/.tmux/bar
Integración con el portapapeles
Sugerencia
El complemento de tmux
tmux-yank
proporciona una funcionalidad similar.
Es posible copiar una selección de tmux al portapapeles del servidor de visualización (tanto a la selección primaria como a la secundaria) y pegar desde él hacia tmux. Los siguientes fragmentos del archivo de configuración de tmux integran el portapapeles y la selección de X11 y Wayland con la selección actual de tmux.
Nota
Es posible que sea necesario desvincular el atajo de «ventana anterior» (previous window) con
unbind p
para que los ejemplos de estilo Vim funcionen correctamente.
En Xorg
La primera posibilidad es utilizar
xsel
:
Estilo Emacs:
bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
bind-key C-y run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
Estilo Vim:
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel -i -p && xsel -o -p | xsel -i -b"
bind-key p run "xsel -o | tmux load-buffer - ; tmux paste-buffer"
xclip
también podría utilizarse para este propósito. A diferencia de xsel, funciona mejor al imprimir un flujo de bits en bruto (raw bitstream) que no se ajusta a la configuración regional (locale) actual. Sin embargo, es más limpio usar xsel porque xclip no cierra la salida estándar
STDOUT
después de haber leído del búfer de tmux. Debido a esto, tmux no sabe que la tarea de copiado ha finalizado y continúa esperando a que xclip termine, lo que provoca que tmux deje de responder. Una solución es redirigir
STDOUT
a
/dev/null
:
Estilo Emacs:
bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "xclip -i -sel clip > /dev/null"
bind-key C-y run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"
Estilo Vim:
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -i -sel clip > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"
En Wayland
Asegúrese de tener instalado
wl-clipboard
.
Estilo Emacs:
bind-key -T copy-mode y send-keys -X copy-pipe-and-cancel "wl-copy && wl-paste -n | wl-copy -p"
bind-key C-y run "wl-paste -n | tmux load-buffer - ; tmux paste-buffer"
Estilo Vim:
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy && wl-paste -n | wl-copy -p"
bind-key p run "wl-paste -n | tmux load-buffer - ; tmux paste-buffer"
Clic central en urxvt
Nota
Para utilizar esto, es necesario activar el soporte para el ratón.
Existe una extensión de Perl no oficial (
mencionada en las preguntas frecuentes
,
en el FAQ oficial
) para habilitar el copiado y pegado hacia dentro y fuera de urxvt con tmux mediante el clic central del ratón.
En primer lugar, deberá descargar el script de Perl y colocarlo en la biblioteca de Perl de urxvt:
wget
http://anti.teamidiot.de/static/nei/*/Code/urxvt/osc-xterm-clipboard
mv osc-xterm-clipboard /usr/lib/urxvt/perl/
También deberá habilitar dicho script de Perl en su archivo .Xdefaults:
~/.Xdefaults
...
*URxvt.perl-ext-common:		osc-xterm-clipboard
...
A continuación, deberá informar a tmux sobre la nueva función y activar el soporte para el ratón (si aún no lo ha hecho):
~/.tmux.conf
...
set-option -ga terminal-override ',rxvt-uni*:XT:Ms=\E]52;%p1%s;%p2%s\007'
set -g mouse on
...
Eso es todo. Asegúrese de cerrar todas las instancias de tmux antes de probar la nueva funcionalidad del clic central.
Dentro de tmux, Shift+Clic central pegará la selección del portapapeles, mientras que el Clic central por sí solo pegará el búfer de tmux. Fuera de tmux, simplemente use el Clic central para pegar el búfer de tmux y el estándar
Ctrl+c
para copiar.
Véase también
Hilo del foro
Comparación de características entre Screen y tmux
powerline
, barra de estado dinámica para tmux
Complementos para tmux
Oh My Tmux!
tmux Wiki
Tutoriales
Practicar Tmux
página del manual
tmux(1)
Tutorial de tmux: Parte 1
y
Parte 2
The Tao of tmux
, un libro electrónico de Tony Narlock, autor de
tmuxp
y
libtmux