# ========================== # === General settings === # ========================== set-option -ga terminal-overrides ",*256col*:Tc" set -g default-terminal "screen-256color" # Change prefix key to C-a, easier to type, same to "screen" unbind C-b set -g prefix C-a # Set parent terminal title to reflect current window in tmux session set -g set-titles on set -g set-titles-string "#I:#W" # Start index of window/pane with 1, because we're humans, not computers set -g base-index 1 setw -g pane-base-index 1 # Enable mouse support set -g mouse on set-option -g status-position bottom # ================================================ # === Copy mode, scroll and clipboard === # ================================================ set -g @copy_use_osc52_fallback on # Prefer vi style key table setw -g mode-keys vi bind p paste-buffer bind C-p choose-buffer # trigger copy mode by bind -n M-Up copy-mode # Scroll up/down by 1 line, half screen, whole screen bind -T copy-mode-vi M-Up send-keys -X scroll-up bind -T copy-mode-vi M-Down send-keys -X scroll-down bind -T copy-mode-vi M-PageUp send-keys -X halfpage-up bind -T copy-mode-vi M-PageDown send-keys -X halfpage-down bind -T copy-mode-vi PageDown send-keys -X page-down bind -T copy-mode-vi PageUp send-keys -X page-up # When scrolling with mouse wheel, reduce number of scrolled rows per tick to "2" (default is 5) bind -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 2 scroll-up bind -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 2 scroll-down # split panes using | and - bind | split-window -h bind - split-window -v unbind '"' unbind % # switch panes using Alt-arrow without prefix bind -n M-Left select-pane -L bind -n M-Right select-pane -R bind -n M-Up select-pane -U bind -n M-Down select-pane -D # wrap default shell in reattach-to-user-namespace if available # there is some hack with `exec & reattach`, credits to "https://github.com/gpakosz/.tmux" # don't really understand how it works, but at least window are not renamed to "reattach-to-user-namespace" if -b "command -v reattach-to-user-namespace > /dev/null 2>&1" \ "run 'tmux set -g default-command \"exec $(tmux show -gv default-shell) 2>/dev/null & reattach-to-user-namespace -l $(tmux show -gv default-shell)\"'" #yank="~/.tmux/yank.sh" # Copy selected text bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "$yank" bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "$yank" bind -T copy-mode-vi Y send-keys -X copy-line \;\ run "tmux save-buffer - | $yank" bind-key -T copy-mode-vi D send-keys -X copy-end-of-line \;\ run "tmux save-buffer - | $yank" bind -T copy-mode-vi C-j send-keys -X copy-pipe-and-cancel "$yank" bind-key -T copy-mode-vi A send-keys -X append-selection-and-cancel \;\ run "tmux save-buffer - | $yank" # Copy selection on drag end event, but do not cancel copy mode and do not clear selection # clear select on subsequence mouse click bind -T copy-mode-vi MouseDragEnd1Pane \ send-keys -X copy-pipe "$yank" bind -T copy-mode-vi MouseDown1Pane select-pane \;\ send-keys -X clear-selection # iTerm2 works with clipboard out of the box, set-clipboard already set to "external" # tmux show-options -g -s set-clipboard # set-clipboard on|external # List of plugins set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tmux-sensible' set -g @plugin 'tmux-plugins/tmux-yank' # Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) run '~/.tmux/plugins/tpm/tpm' set -g @plugin "arcticicestudio/nord-tmux"