Tmux: Instalación y primeros pasos. My configuración personal para desarrollo Parte 1

Tmux: Instalación y primeros pasos. My configuración personal para desarrollo Parte 1

Cuando comienzas a trabajar en el desarrollo de software, generalmente te enfocas en aprender un nuevo stack tecnológico. Sin embargo, no mucha gente se centra en mejorar sus habilidades con las herramientas.

Una de las herramientas que me ayuda cada día cuando trabajo con diferentes carpetas y proyectos es Tmux.

Tmux es un multiplexor de terminales que te permite ejecutar diferentes sesiones dentro de una sola ventana. Con Tmux, puedes crear múltiples paneles dentro de una única ventana de terminal, cada uno ejecutando su propia aplicación o shell. Esto facilita trabajar con varias tareas simultáneamente sin tener que cambiar entre pestañas o ventanas de tu terminal. Tmux admite la gestión de ventanas y sesiones, lo que te permite mover y redimensionar paneles, crear nuevas ventanas, y entrar y salir de las sesiones.

📦 Instalando Tmux

macOS

En Mac, es muy fácil instalar Tmux. Sólo necesitas Brew, y después ya puedes instalarlo.

Terminal window
brew install tmux

Linux y WSL

Dependiendo en la distribución en la que estés trabajando, la manera de instalar Tmux será diferente. Aquí algunos comandos para las distros que he utilizado en los últimos años.

Estos comandos son iguales entre tu distribución de Linux favorita y WSL, mientras pertenezcan a la misma versión del sistema operativo.

Terminal window
# Ubuntu
sudo apt install tmux
# Fedora
sudo dnf install tmux
# Arch Linux
sudo pacman -S tmux
Tmux session

👟 Sesiones, Ventanas y Paneles en breve

Imagina que tenemos que trabajar en dos proyectos: El Proyecto Patata 🥔 (Potatoe) y el Proyecto Girasol (Sunflower) 🌻.

Podemos tomar ventaja de las Sesiones para crear los dos.

Por cada proyecto, necesitamos trabajar con el backend y el frontend. Podemos usar una Ventana para cada uno de ellos. Por cada proyecto, también necesitmoas tener dos Paneles lado a lado para ejectuar npm run start y npm test al mismo tiempo.

Pero antes, el atajo <Prefijo>

La combinación prefijo es el atajo de teclado principal para combinarlo con otros atajos de Tmux. Por defecto, es una combinación de Ctrl + b o ^ + b en Mac.

Para los siguientes tutoriales, usa este prefijo. Si ya lo has cambiado antes, úsalo como lo hayas configurado.

Sesiones

Vamos a encargarnos de la configuración de Tmux después en este post, pero al leer algunos comandos, ya podemos imaginar como funciona. Utilizo nombres de sesion cortos porque si quiero entrar a una sesión específica, es mucho más fácil de escribirla.

Terminal window
tmux new-session -s <nombre-de-tu-sesion>
# Para los proyectos de antes
tmux new-session -d -s patata
tmux new-session -d -s girasol
# Y después, puedes escoger a cual sesión quieres entrar
tmux attach-session -t girasol
# o
tmux a -t girasol
Tmux tabs

Ahora, nuestro server de Tmux tiene dos sesiones corriendo. La opción -d , es usada para evitar entrar en la sesión una vez creada, así que podemos seguir trabajando sobre nuestra terminal. Remueve la opción si quieres entrar a la sesión una vez creada.

Ventanas

Cuando entramos a nuestra sesión, entramos a nuestra primera ventana al mismo tiempo. El título de esa ventana es usualmente el nombre del shell que estés usando. En mi caso es zsh , pero en tu caso, podría ser bash u otro más.

Ahora, recuerda que estamos dentro del proyecto girasol . Necesitamos crear una ventana para el backend y otra para el frontend.

Un truco para recordar las ventanas, es compararlas con pestañas de navegador.

Renombrando ventanas

# Dentro de tu sesion girasol, usa el siguiente atajo
<Prefijo> + ,

Una vez abierto, escribe el nuevo nombre de la ventana: backend y presiona <Enter> .

Creando una nueva ventana

# Dentro de la sesion girasol, utilisa el siguiente atajo
<Prefijo> + c
# Después que hayas entrado a la sesión, renómbrala a frontend
<Prefijo> + , # después escribe frontend y presiona <Enter>
Tmux Window

Moviéndose entre ventanas

Si quieres moverte entre las ventanas de tu proyecto backend y frontend, puedes usar:

# Moverse a la siguiente ventana
<Prefijo> + n # n de next (siguiente)
# Moverse a la ventana previa
<Prefijo> + p # p de previous (previa)

Paneles

Los paneles son divisiones de una ventana. Diría que son la principal razón por la cual uso Tmux, como desarrollador de NodeJS. Es un requerimiento diario de manejar o ejecutar más de un comando al mismo tiempo para proyectos en NodeJS.

Ahora, queremos tener dos paneles paralelos, para ejecutar npm start en uno y npm test a su lado. Puedes crear una panel horizontal con.

<Prefijo> + " # No tengo idea por qué para ser honesto

Pero si prefieres la orientación vertical, usa este comando.

Terminal window
<Prefijo> + % # supongo porque se compara a 0|0
Vertical split

Moverse entre paneles

Para moverte entre los paneles que has creado, puedes usar <Prefijo> combinado con las flechas de dirección. Esto nos da cuatro combinaciones en total: arriba, izquierda, derecha y abajo.

Terminal window
<Prefijo> + <flecha-de-dirección>

📦 Mi configuración personal

Después de un año de usar Tmux, traté de buscar diversas maneras para mejorar mi flujo de trabajo. He descubierto algunas mejoras que podrían ser útiles para ti.

Cada una de ellas requiere que crees un archivo llamado .tmux.conf en tu directorio raíz. Esto aplica para cada sistema operativo excepto Windows, pero si WSL.

Cambiando el prefijo

Sabiendo que presionar Ctrl + b (o equivalente en Mac) puede ser dificil ya que ambas teclas están lejos una de otra. Lo reemplacé con Ctrl + Espacio porque puedo presionar ambas teclas con el primer y último dedo de mi mano izquierda.

Para realizar este cambio, actualiza tu archivo ~/.tmux.conf con el siguiente contenido. Vamos a deshabilitar Ctrl + b antes de usar el nuevo prefijo.

tmux.conf
unbind C-b
set-option -g prefix C-Space
bind-key C-Space send-prefix

Una simple manera de recargar la configuración

Ya que vamos a hacer distintas modificaciones a este archivo, necesitamos una manera rápida de recargar la configuración. Vamos a mostrar la manera original primero y después el atajo que yo tengo.

La manera original

Puedes usar <Prefijo> + : parar abrir Tmux en modo comando y escribir lo siguiente:

source-file ~/.tmux.conf # Presiona <Enter> después

Mi atajo personal

En tu archivo ~/.tmux.conf , agrega la siguiente línea. Después de escribirla, si aún sigues dentro de tu sesión Tmux, usa el método original para recargar la configuración. Sólo por esta vez.

bind-key r source-file ~/.tmux.conf \; display-message "Configuración recargada"

Actualizando el índice de cero a uno

Tal vez conozcas, o no, la broma popular de que los desarrolladores usan 0 en lugar de 1 como número índice principal para comenzar a contar. Sin embargo, cuando usas Tmux, si quieres navegar directamente a la primera ventana, necesitas cruzar tus dedos en el teclado para ejecutar tal atajo. Afortunadamente, puedes usar 1 como tu número índice. Además, si eliminas una ventana, por defecto Tmux dejará ese número de ventana vacío. Puedes cambiarlo también, lo cual es algo que yo recomiendo.

Automáticamente renumerar una ventana si una de ellas es eliminada

tmux.conf
set -g renumber-windows on

Poner el índice de las ventanas a 1, y también para los paneles

tmux.conf
set -g base-index 1
setw -g pane-base-index 1

Configuración para un shell diferente

Yo uso Zsh en lugar de Bash. Siempre puedes iniciar tus sesiones de Tmux con Zsh haciendo referencia a la dirección del shell.

Puedes ejecutar which zsh de antemano para saber el directorio de tu shell y reemplazarlo en Tmux con el siguiente script. Para mí es /bin/zsh .

tmux.conf
set-option -g default-shell "/bin/zsh"

Moverse entre paneles como en Vim

Otro paso adicional. Puedes moverte entre paneles usando <Prefijo> + <Flecha> . Sin embargo, si prefieres tener un entorno similar a Vim, puedes usar <Prefijo> + <h | j | k | l> como atajos de movimiento.

Como habrás visto, después de usar <Prefijo> la primera vez, no necesitamos hacerlo otra vez. Esto es por la opción -r , que te evita de presionar otra vez el prefijo.

bind -r k select-pane -U
bind -r j select-pane -D
bind -r h select-pane -L
bind -r l select-pane -R

Redimensionando paneles desde el teclado

Además, si no quieres usar el ratón para redimensionar tus paneles, puedes usar la versión en mayúsculas de las mismas letras usadas para moverse en Vim. En adición, usar la opción -r nos permite no tener que usar el prefijo por un tiempo limitado.

El número 5 en el siguiente ejemplo, representa la medida que estás redimensionando, puedes incrementarlo y disminuirlo de acuerdo a tus necesidades.

tmux.conf
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r U resize-pane -U 5
bind -r L resize-pane -R 5

Mis atajos personales

Agregar soporte de true colors para tus sesiones Tmux

Para hacer que tu sesión de Tmux funcione con todos esos temas y colores modernos que has visto en diferentes publicaciones de Reddit, necesitas configurarlo. Vamos a indicar a Tmux como podemos agregar soporte para true color.

tmux.conf
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"

Usando el ratón

Si quieres usar el ratón para redimensionar tus paneles, o para hacer click sobre el nombre de una ventana. Puedes habilitarlo con la siguiente línea.

tmux.conf
set -g mouse on

Formato a la barra de estado

Si quieres mostrar la barra de estado y el número de ventana con el comando ejecutado, utiliza el siguiente código.

tmux.conf
set -g pane-border-format "#P: #{pane_current_command}"
set -g status on

Modo Vi

Si quieres tener atajos similares a Vim para copiar y pegar, puedes habilitar el modo Vi.

tmux.conf
setw -g mode-keys vi

Abrir un panel en el mismo directorio del panel de origen

Si quieres abrir una división vertical u horizontal en el mismo directorio donde estabas trabajando, tengo dos atajos personales para hacerlo. Uso la tecla | para crear un panel vertical y - para uno horizontal. Además pienso que ésta es una mejor combinación que % y ".

tmux.conf
bind-key | split-window -h -c "#{pane_current_path}"
bind-key - split-window -v -c "#{pane_current_path}"

🛠️ Instalando TPM y plugins

Instalando TPM

TPM es el Tmux Plugin Manager. Así como tu lenguaje favorito, puedes usar plugins para agregar o extender características de Tmux.

Para instalarlo, copia las siguientes líneas de código y pégalas al final de tu ~/.tmux.conf . Asegúrate de recargar la configuración después.

# Cargar TPM en la siguiente recarga de configuración
set -g @plugin 'tmux-plugins/tpm'
# Si TPM no está instalado, hacerlo
if "test ! -d ~/.tmux/plugins/tpm" \
"run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'"
# Inicializar TPM (pon esta línea al último en tu .tmux.conf)
run '~/.tmux/plugins/tpm/tpm'

Algunos plugins útiles

En algún punto, querrás extender las características de Tmux. Aquí está mi lista preferida de plugins que te ayudarán con eso.

Tmux sensible

Provee muchos atajos y mejoras a la configuración que viene por defecto, que en mi opinión es mucho mejor a la que viene con la instalación.

Date una vuelta por el repositorio original: https://github.com/tmux-plugins/tmux-sensible

Tmux resurrect

Si tienes un espacio de trabajo con varias ventanas y paneles que no quieres perder cuando reinicies tu computadora. Tmux tiene este plugin que te permite almacenar tu organización de sesiones y restaurarlas después con un par de atajos de teclado.

Los atajos más importantes que debes de recordar de este plugin son: Guardar sesión <Prefijo> + Ctrl + s y para restaurarlas <Prefijo> + Ctrl + r .

Más información: https://github.com/tmux-plugins/tmux-resurrect

Tmux yank

Provee a Tmux de la capacidad de compartir el portapaleles con el sistema operativo. Ten en cuenta que vas a necesitas de librerías adicionales de acuerdo a tu sistema operativo. Después con <Prefijo> + y , tendrás la habilidad de copiar el contenido seleccionado en la terminal y pegarlo donde quieras.

Puedes leer más al respecto acá: https://github.com/tmux-plugins/tmux-yank

Vim Tmux Navigator

Si eres un usuario de Vim, como yo, querrás tener un flujo sencillo para moverte entre tus paneles y divisiones de Vim. Por defecto, no funcionará como esperarías. Por suerte, tenemos este plugin que necesita ser instalado en Vim y Tmux, y ambos se complementarán perfectamente. También funciona con Nvim.

Puedes seguir las instrucciones aquí: https://github.com/christoomey/vim-tmux-navigator

Todos los plugins en un sólo bloque de código

Aquí está la lista de todos los plugins, ponlos después de la línea set -g @plugin 'tmux-plugins/tpm' . Guárdalo, recarga tu configuración, y después presiona <Prefijo> + I para instalarlos. Si quieres actualizarlos después de cierto tiempo, usa <Prefijo> + U .

tmux.conf
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'christoomey/vim-tmux-navigator'

Instalando temas

Como otras herramientas de desarrollo, puedes configurar tu interfaz de Tmux con temas. Voy a mostrarte mi tema preferido. Adicionalmente voy a dejar un link al final donde puedes acceder a una gran variedad de temas.

Tema de Dracula

Es un tema agradable a la vista que se complementa con terminales claras y oscuras. Lo he probado en ambas. La combinación de gris oscuro con verde, rosa y naranja, hacen resaltar las secciones donde veo mis recursos del sistema. Lo configuré también para mostrar mi carga de CPU, GPU y uso de RAM. Además tiene soporte para Nerdfont, que es lo que uso en mi terminal.

Para instalar este tema, sigue los mismos pasos que usas para instalar plugins.

tmux.conf
set -g @plugin 'dracula/tmux'

Sobre mi configuración personalizada, así es como he configurado el tema de Dracula para acomodarse a mi uso diario. Copia y pega después de la línea después de donde instalas el plugin. Si ves cuadrados en lugar de íconos, igual puedes copiarlos también. Mientras tu terminal use Nerdfonts, los verás.

set -g @dracula-plugins "cpu-usage gpu-usage ram-usage network-vpn"
set -g @dracula-show-flags true
set -g @dracula-show-left-icon " #S"
set -g @dracula-show-powerline false
set -g @dracula-border-contrast true
set -g @dracula-show-empty-plugins false
set -g @dracula-cpu-usage-label " CPU"
set -g @dracula-gpu-usage-label " GPU"
set -g @dracula-ram-usage-label " RAM"z`

Más temas

Puedes encontrar más temas en este increíble repositorio de Tmux. .

Mis posts no son generados por la IA, sin embargo, podrían estar corregidos por ella. El primer borrador siempre es de mi creación

Tags

Autor

Escrito por Helmer Davila

En otros lenguajes

And how I increased my productivity

Tmux: Setup and first steps. My personal development setup Part 1

Et comment je l'utilise au quotidien

Tmux : Installation et premières étapes. Ma configuration personnelle, Partie 1

Posts relacionados

Una solución que a los usuarios de Tmux les gustará

Tmux: Prefijo Ctrl-Espacio no funciona en macOS