Skip to content

Instantly share code, notes, and snippets.

@LuisPalacios
Last active July 25, 2024 09:22
Show Gist options
  • Save LuisPalacios/065f4f0491d472d65ef62f67f1f418a1 to your computer and use it in GitHub Desktop.
Save LuisPalacios/065f4f0491d472d65ef62f67f1f418a1 to your computer and use it in GitHub Desktop.
My .tmux.conf 2024
# .tmux.conf LuisPa 2024
#
# Referencias:
# - https://www.luispa.com/administraci%C3%B3n/2024/04/25/tmux.html
# - https://www.luispa.com/administraci%C3%B3n/2024/04/23/zsh.html
#
# LuisPa: -------------------------------------------------------------- START
#
# Pongo Ctrl+A como PREFIX_KEY y dejo Ctrl+B como backup.
unbind C-b
set-option -g prefix C-a
set-option -g prefix2 C-b
bind-key C-a send-prefix
## Opciones
# Uso screen-256color para $TERM
set -g default-terminal "screen-256color"
# Soporte de True color
set -ga terminal-overrides ",xterm-256color:Tc"
# History
set -g history-limit 100000
# Las numeración de las sesiones empiezan con 1
#set -g base-index 1
set-option -g base-index 1 # window index will start with 1
set-window-option -g pane-base-index 1 # pane index will start with 1
set-option -g renumber-windows on
# No molestes (sin pitidos)
set -g bell-action any
# Bell
set-window-option -g window-status-bell-style bg=colour167,fg=colour235 # bg=red, fg=bg
# Mostrar los mensajes un poco más en patalla
set -g display-time 2000
# Título
set -g set-titles on
set -g set-titles-string "#T"
# Redimensionar ventanas al cliente más pequeño
setw -g aggressive-resize on
# Gestión del ratón
setw -g mouse on
# Esto controla qué variables de entorno se actualizarán en las nuevas sesiones de Tmux.
# Se establece inicialmente para actualizar varias variables relacionadas con la visualización,
# pero luego se desactiva para evitar conflictos o problemas con sesiones ya existentes
set -g update-environment "DISPLAY SSH_CONNECTION SSH_TTY SSH_AUTH_SOCK XAUTHORITY"
set -g update-environment ""
# Esto define los caracteres que se consideran separadores de palabras dentro de Tmux,
# lo que puede afectar al comportamiento de la navegación y la selección de texto.
# Por defecto es: !"#$%&'()*+,-./:;<=>?@[\\]^`{|}~. Quito -./?%&_=+@~:.
set -g word-separators "!\"#$'()*,;<>?[\\]^`{|} "
## Asignaciones de teclas
# Recargar el fichero de configuración
bind-key r source-file ~/.tmux.conf \; display-message "recargado el fichero ~/.tmux.conf"
# Estas asignaciones de teclas controlan el comportamiento al crear nuevos paneles
# y ventanas dentro de Tmux, asegurando que se abran en el directorio actual.
bind '-' split-window -v -c "#{pane_current_path}"
bind '|' split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
## Portapapeles (Work in Progress...)
# Estas líneas definen cómo se maneja la selección y copia de texto dentro de Tmux,
# asegurando que se integre correctamente con el portapapeles del sistema.
#bind-key -T copy-mode MouseDragEnd1Pane \
# send -X copy-pipe "sed -e 's/.*/❱/' -e 's/^ *//' | xsel --clipboard --input" \;\
# send -X clear-selection \; display-message "Se salvó la selección en el portapapeles!"
#bind-key -T copy-mode M-w \
# send -X copy-pipe "sed -e 's/.*/❱/g' -e 's/^ *//' | xsel --clipboard --input" \;\
# display-message "Se salvó la selección en el portapapeles!"
#bind p paste-buffer -p # Pegar
# Configuro la tecla Enter para salir fácilmente del modo de copia en Tmux.
# Cuando estás en modo de copia (por ejemplo, después de presionar prefix + [ para ingresar al modo de copia),
# presionar Enter cancelará el modo de copia, lo que te permitirá volver al modo normal
#bind-key -T copy-mode Enter send -X cancel
# To navigating through output in quick way, enable vim navigation keys
#set-window-option -g mode-keys vi
setw -g mode-keys vi
# Vim Style in Copy-Mode "<prefix> ["
# Interacting with Paste Buffer
#bind-key Escape copy-mode
#bind-key -T copy-mode-vi 'v' send-keys -X begin-selection -N "start visual mode for selection"
#bind-key -T copy-mode-vi 'y' send-keys -X copy-selection-and-cancel -N "yank text into the buffer"
#bind-key C-b choose-buffer # view the buffer stack
#unbind-key p
#bind-key p paste-buffer # default "<prefix> ]"
# Alt+C: To copy from the current buffer to the sys clipboard .
#bind-key M-c run "tmux save-buffer - | xclip -i -sel clipboard"
# Alt+V: To paste text from sys clipboard into current buffer
#bind-key M-v run "tmux set-buffer \"$(xclip -o -sel clipboard)\""
# Ctr+C: Make it even better -just one step to move from sys->buffer->editor vice versa
#bind-key -Tcopy-mode-vi C-c send -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c" \; display-message "copied to system clipboard"
# Ctr+V: To paste text from sys clipboard into the view
#bind-key C-v run "tmux set-buffer \"$(xclip -o -sel clipboard)\";tmux paste-buffer"
# To take ASCII screenshots (tmux-resurrect uses C-s for saving, here binding to Alt-s ) .
# create the dir for storing screenshots
#bind-key M-s run "tmux capture-pane; tmux save-buffer ~/.mytmux/pane_screenshots/\"$(date +%FT%T)\".screenshots"
# Activar la sincronización de paneles, lo que permite replicar la entrada
# en todos los paneles de la ventana actual simultáneamente. PREFIX_KEY Ctrl+s
bind C-s setw synchronize-panes
# Anulo el menú de contexto con el ratón
unbind-key -n M-MouseDown3Pane
unbind-key -n MouseDown3Pane
unbind-key -n MouseDown3Status
unbind-key -n MouseDown3StatusLeft
# Kill panel y sesión
unbind-key x # unbind-key “x” de su opción por defecto "preguntar y luego cerrar"
bind-key x kill-pane # rebind-key a cerrar sin preguntar (PREFIX_KEY + x)
bind-key X kill-session # cuando la X es en mayúsculas cierra la sesión entera (PREFIX_KEY + Shift + x)
bind-key k choose-tree "kill-session -t '%%'" # Mostrar sesiones para poder matar una sesión concreta
# Paneles: Movimiento con las flechas
bind-key Up select-pane -U
bind-key Down select-pane -D
bind-key Left select-pane -L
bind-key Right select-pane -R
# Window: movimiento
bind-key L last-window
#bind-key -r C-h select-window -t :- # cycle through the windows for quick window selection
#bind-key -r C-l select-window -t :+
# Creación y ubicación de los paneles
# https://gist.github.com/sdondley/b01cc5bb1169c8c83401e438a652b84e
# set-hook -g session-created '\
# split-window -h -l 100 -t 1;\
# split-window -v;\
# selectp -t 1'
if-shell '[ "$(uname)" = "Darwin" ]' \
'set-hook -g session-created "split-window -h -l 70 -t 1; split-window -v; selectp -t 1"' \
'set-hook -g session-created "split-window -h -p 40 -t 1; split-window -v; selectp -t 1"'
## Mensajes de estado y ayuda
set -g message-style fg=colour16,bg=colour221,bold
## Divisores de paneles
set-window-option -g pane-border-style fg=colour248 #,bg=colour234
set-window-option -g pane-active-border-style fg=colour118,bg="#380C2A"
set-window-option -g window-style fg=colour248,dim,bg="#280C2A"
# Panel desactivado (dimmed), más apagado que el activo
set-window-option -g window-active-style fg=colour255,bold,bg="#380C2A"
## Línea de estado
###################
#
# Condicionales {?xxx} man 1 tmux -> buscar por "Variable name Ta Alias Ta Replaced with"
#
# Estas configuraciones controlan el estilo y la longitud de la línea de estado de Tmux,
# incluidos aspectos como la longitud de la parte izquierda y derecha de la línea de estado,
# los estilos de los diferentes elementos y los bordes de las divisiones de paneles.
set -g status-left-length 52
set -g status-right-length 451
set -g status-style fg=white,bg=colour234
set -g window-status-activity-style bold
# LADO IZDO
# Nombre sesión y highlight si está pulsado PREFIX_KEY
#set-option -g status-left "\
#[fg=white,bg=black](@#[fg=green,bg=black]#h#[fg=white,bg=black]) \
set-option -g status-left "#I:#W#F" # Pongo el default porque a veces lo siguiente no funciona
set-option -g status-left "\
#[fg=colour235, bg=colour252]\
#{?client_prefix,#[fg=colour237 bg=colour221],} ❐ #S \
#[fg=colour252, bg=black]\
#{?client_prefix,#[fg=colour221 bg=black],}"
# Formato y el estilo de los paneles no activos.
set -g window-status-format "\
#[fg=black,bg=colour237]\
#[fg=white,bg=colour237] \
#I#{?pane_pipe,#[fg=red]●#[fg=white],} #W\
#{?window_last_flag,-, }\
#[fg=colour237,bg=black]"
# Formato y el estilo del separador entre paneles
set-window-option -g window-status-separator ""
# Formato y el estilo de los paneles activos.
set -g window-status-current-format "\
#{?window_zoomed_flag, 🔍,}\
#[fg=black, bg=colour39]\
#[fg=colour235,bg=colour39,noreverse,bold] #I\
#{?pane_pipe,#[fg=red]●#[fg=colour235],} \
#[nobold]#[bold] #W \
#{?#{==:#{window_index},#{session_windows}}, #[fg=colour39 bg=black nobold], #[fg=colour39 bg=black nobold]}"
# LADO DERECHO
# Configuración de la línea de estado según el OS en el que estemos.
if-shell '[[ "$(uname)" == "Darwin" ]]' \
'set -g status-right "#[fg=colour4,bg=black,nobold]#[fg=white,bg=colour4](@#[fg=yellow,bg=colour4,bold]#h#[fg=white,bg=colour4])"' \
'set -g status-right "#[fg=colour4,bg=black,nobold]#[fg=white,bg=colour4](@#[fg=green,bg=colour4,bold]#h#[fg=white,bg=colour4])"'
# Enable Activity Alerts
#set-option -g status-interval 60 # Update the status line every 60 seconds (15 is default)
#set-window-option -g monitor-activity on # highlights the window name in the status line
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment