Seeing panes while switching is not helpful enough with our naming scheme for panes. Just show sessions and use exact option with fzf to switch quickly.
165 lines
6.1 KiB
Bash
165 lines
6.1 KiB
Bash
# change the prefix from 'C-b' to 'M-a'
|
|
unbind C-b
|
|
set-option -g prefix M-a
|
|
bind-key M-a send-prefix
|
|
|
|
# start with window 1 (instead of 0)
|
|
set -g base-index 1
|
|
|
|
# start with pane 1
|
|
set -g pane-base-index 1
|
|
|
|
# split panes using | and -, make sure they open in the same path
|
|
bind | split-window -h -c "#{pane_current_path}"
|
|
bind - split-window -v -c "#{pane_current_path}"
|
|
|
|
unbind '"'
|
|
unbind %
|
|
|
|
# open new windows in the current path
|
|
bind c new-window -c "#{pane_current_path}"
|
|
|
|
# reload config file
|
|
bind r source-file ~/.tmux.conf \; display "Reloaded tmux.conf!"
|
|
|
|
# shorten command delay
|
|
set -sg escape-time 1
|
|
|
|
# Increase scrollback buffer size
|
|
set -g history-limit 131072
|
|
|
|
# don't rename windows automatically
|
|
set-option -g allow-rename off
|
|
|
|
# mouse control (clickable windows, panes, resizable panes)
|
|
set -g mouse on
|
|
set -g focus-events on
|
|
|
|
# Smart pane switching with awareness of Vim splits.
|
|
# See: https://github.com/christoomey/vim-tmux-navigator
|
|
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
|
|
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
|
|
|
|
bind-key -n 'C-Left' if-shell "$is_vim" 'send-keys C-Left' 'select-pane -L'
|
|
bind-key -n 'C-Down' if-shell "$is_vim" 'send-keys C-Down' 'select-pane -D'
|
|
bind-key -n 'C-Up' if-shell "$is_vim" 'send-keys C-Up' 'select-pane -U'
|
|
bind-key -n 'C-Right' if-shell "$is_vim" 'send-keys C-Right' 'select-pane -R'
|
|
|
|
tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
|
|
if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
|
|
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'"
|
|
if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
|
|
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'"
|
|
|
|
bind-key -T copy-mode-vi 'C-Left' select-pane -L
|
|
bind-key -T copy-mode-vi 'C-Down' select-pane -D
|
|
bind-key -T copy-mode-vi 'C-Up' select-pane -U
|
|
bind-key -T copy-mode-vi 'C-Right' select-pane -R
|
|
|
|
# Pane resizing with arrow keys
|
|
bind Left resize-pane -L 10
|
|
bind Down resize-pane -D 10
|
|
bind Up resize-pane -U 10
|
|
bind Right resize-pane -R 10
|
|
|
|
# Move windows back/forward
|
|
bind -n S-left swap-window -t -1
|
|
bind -n S-right swap-window -t +1
|
|
bind m command-prompt -p "Merge pane to:" "join-pane -t '%%'"
|
|
bind M command-prompt -p "Merge pane from:" "join-pane -s '%%'"
|
|
|
|
bind e setw synchronize-panes on \; display "Synchronize panes ON (E: off)"
|
|
bind E setw synchronize-panes off \; display "Synchronize panes OFF (e: on)"
|
|
|
|
bind -n M-0 select-window -t 0
|
|
bind -n M-1 select-window -t 1
|
|
bind -n M-2 select-window -t 2
|
|
bind -n M-3 select-window -t 3
|
|
bind -n M-4 select-window -t 4
|
|
bind -n M-5 select-window -t 5
|
|
bind -n M-6 select-window -t 6
|
|
bind -n M-7 select-window -t 7
|
|
bind -n M-8 select-window -t 8
|
|
bind -n M-9 select-window -t 9
|
|
|
|
bind 0 select-pane -t 0
|
|
bind 1 select-pane -t 1
|
|
bind 2 select-pane -t 2
|
|
bind 3 select-pane -t 3
|
|
bind 4 select-pane -t 4
|
|
bind 5 select-pane -t 5
|
|
bind 6 select-pane -t 6
|
|
bind 7 select-pane -t 7
|
|
bind 8 select-pane -t 8
|
|
bind 9 select-pane -t 9
|
|
|
|
bind P paste-buffer
|
|
bind -T copy-mode-vi v send-keys -X begin-selection
|
|
bind -T copy-mode-vi y send-keys -X copy-selection
|
|
bind -T copy-mode-vi r send-keys -X rectangle-toggle
|
|
|
|
# Save scrollback buffer to a file
|
|
bind S command-prompt -p 'Save history to filename:' -I '/tmp/tmux.history' 'capture-pane -S - -E -; save-buffer %1 ; delete-buffer'
|
|
|
|
# Session selector
|
|
bind T display-popup -E "tmux list-sessions -F '#{session_name}' \
|
|
| grep -v \"^$(tmux display-message -p '#S')\$\" \
|
|
| fzf --reverse --exact \
|
|
| sed -E 's/\s-.*$//' \
|
|
| xargs tmux switch-client -t"
|
|
|
|
# Last command output
|
|
set -g @command-capture-key t
|
|
set -g @command-capture-prompt-pattern '] % '
|
|
set -g @command-capture-editor-cmd 'nvim -R'
|
|
|
|
# Fuzzback
|
|
set -g @fuzzback-popup 1
|
|
set -g @fuzzback-popup-size '90%'
|
|
|
|
# This effects color rendering and typing on terminal.
|
|
set-option -g default-terminal "tmux-256color"
|
|
|
|
## Status Bar settings
|
|
# Gruvbox dark color scheme
|
|
set-option -g status "on"
|
|
# Default statusbar color
|
|
set-option -g status-style bg=colour237,fg=colour223 # bg=bg1, fg=fg1
|
|
# Default window title colors
|
|
set-window-option -g window-status-style bg=colour214,fg=colour237 # bg=yellow, fg=bg1
|
|
# Default window with an activity alert
|
|
set-window-option -g window-status-activity-style bg=colour237,fg=colour248 # bg=bg1, fg=fg3
|
|
# Active window title colors
|
|
set-window-option -g window-status-current-style bg=red,fg=colour237 # fg=bg1
|
|
# Pane border
|
|
set-option -g pane-active-border-style fg=colour250 #fg2
|
|
set-option -g pane-border-style fg=colour237 #bg1
|
|
# Message infos
|
|
set-option -g message-style bg=colour239,fg=colour223 # bg=bg2, fg=fg1
|
|
# Writing commands inactive
|
|
set-option -g message-command-style bg=colour239,fg=colour223 # bg=fg3, fg=bg1
|
|
# Pane number display
|
|
set-option -g display-panes-active-colour colour250 #fg2
|
|
set-option -g display-panes-colour colour237 #bg1
|
|
# Clock
|
|
set-window-option -g clock-mode-colour colour109 #blue
|
|
# Bell
|
|
set-window-option -g window-status-bell-style bg=colour167,fg=colour235 # bg=red, fg=bg
|
|
# Theme settings mixed with colors (unfortunately, but there is no cleaner way)
|
|
set-option -g status-justify "centre"
|
|
set-option -g status-left-style none
|
|
set-option -g status-left-length "80"
|
|
set-option -g status-right-style none
|
|
set-option -g status-right-length "80"
|
|
set-window-option -g window-status-separator ""
|
|
set-option -g status-left "#[bg=colour248,fg=colour237] #S #[bg=colour237,fg=colour241,nobold,noitalics,nounderscore]"
|
|
set-option -g status-right "#[bg=colour248,fg=colour237] %d-%m-%Y %H:%M "
|
|
set-window-option -g window-status-current-format "#[bg=colour214,fg=colour237,nobold,noitalics,nounderscore]#[bg=colour214,fg=colour239] #I #[bg=colour214,fg=colour239,bold] #W #[bg=colour237,fg=colour214,nobold,noitalics,nounderscore]"
|
|
set-window-option -g window-status-format "#[bg=colour239,fg=colour237,noitalics]#[bg=colour239,fg=colour223] #I #[bg=colour239,fg=colour223] #W #[bg=colour237,fg=colour239,noitalics]"
|
|
|
|
# Plugins
|
|
run-shell '~/.tmux/plugins/tmux-yank/yank.tmux'
|
|
run-shell '~/.tmux/plugins/tmux-open/open.tmux'
|
|
run-shell '~/.tmux/plugins/tmux-butler/tmux-butler.tmux'
|
|
run-shell '~/.tmux/plugins/tmux-fuzzback/fuzzback.tmux'
|
|
run-shell '~/.tmux/plugins/tmux-cmd-capture/tmux_capture_last_command_output.tmux'
|