# .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 " [" # 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 " ]" # 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