|
# Bind escape to copy mode
|
|
unbind [
|
|
bind v copy-mode
|
|
|
|
# p = paste
|
|
unbind p
|
|
bind p paste-buffer
|
|
|
|
# no escape delay
|
|
set -sg escape-time 0
|
|
|
|
# remap prefix to Control + a
|
|
set -g prefix C-a
|
|
unbind C-b
|
|
bind C-a send-prefix
|
|
|
|
# Start window numbering at 1 (default => 0)
|
|
set -g base-index 1
|
|
|
|
set -g clock-mode-style 12
|
|
|
|
# Renumber windows after removing one
|
|
set -g renumber-windows on
|
|
|
|
# Set the thumbs key to f, I don't use find-window anyways
|
|
unbind f
|
|
set -g @thumbs-key f
|
|
|
|
# use 256 colors
|
|
set -g default-terminal "tmux-256color"
|
|
set -ag terminal-overrides ",xterm-256color:RGB"
|
|
|
|
# Keep plenty of history for scrollback
|
|
set -g history-limit 50000
|
|
|
|
# mouse
|
|
set -g mouse on
|
|
|
|
|
|
# Act like vim in copy mode
|
|
set -g status-keys vi
|
|
setw -g mode-keys vi
|
|
|
|
set -g set-clipboard on
|
|
set -ag terminal-overrides "vte*:XT:Ms=\\E]52;c;%p2%s\\7,xterm*:XT:Ms=\\E]52;c;%p2%s\\7"
|
|
|
|
bind-key -Tcopy-mode-vi 'v' send -X begin-selection
|
|
bind-key -Tcopy-mode-vi 'y' send -X copy-selection
|
|
|
|
# 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-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"
|
|
bind-key -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D"
|
|
bind-key -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"
|
|
bind-key -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
|
|
bind-key -n C-\\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l"
|
|
|
|
# Secondary binding for C-l to retain redraw
|
|
bind C-l send-keys 'C-l'
|
|
|
|
# Easy rotating of panes
|
|
bind C-k swap-pane -U
|
|
|
|
# increase display time
|
|
set -g display-panes-time 1200
|
|
|
|
# status bar stuff
|
|
set -g status-left-length 40
|
|
|
|
# Dismiss current pane to background window
|
|
bind b break-pane -d
|
|
bind-key j command-prompt -p "join pane from: " "join-pane -h -s '%%'"
|
|
|
|
set -g default-command zsh
|
|
|
|
# more intuitive keybindings for splitting
|
|
bind \\ split-window -h -c "#{pane_current_path}"
|
|
bind - split-window -v -c "#{pane_current_path}"
|
|
|
|
# Easy return to Vim from tmux runner zoom runner pane
|
|
bind C-p run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim$' && tmux send-keys ':VtrZoomRunnerPane' 'C-m') || tmux send-keys 'C-c' && tmux select-pane -l"
|
|
|
|
# Make C-j display a selectable list of sessions
|
|
bind C-j choose-tree
|
|
|
|
# Keep window names as I set them
|
|
setw -g automatic-rename off
|
|
|
|
# Reload tmux.conf with prefix-r
|
|
bind C-r source-file ~/.config/tmux/tmux.conf \; display "Reloaded ~/.config/tmux/tmux.conf"
|
|
|
|
# Provide access to the clipboard for pbpaste, pbcopy (details: http://goo.gl/DN82E)
|
|
set-window-option -g automatic-rename on
|
|
|
|
# Enable VI mode
|
|
set-window-option -g mode-keys vi
|
|
|
|
# Set ability to capture on start and restore on exit window data when running an application
|
|
setw -g alternate-screen on
|
|
|
|
# bind resizing of panes to H,J,K,L (resizes by steps of 10 lines/columns)
|
|
# # Note, bindings are repeatable (within the default 500ms time limit) so that
|
|
# # you don't have to keep entering the prefix. (Prefix-H-H-H resizes by 15)
|
|
bind -n S-Left resize-pane -L 2
|
|
bind -n S-Right resize-pane -R 2
|
|
bind -n S-Down resize-pane -D 1
|
|
bind -n S-Up resize-pane -U 1
|
|
unbind -n C-Left
|
|
unbind -n C-Down
|
|
unbind -n C-Up
|
|
unbind -n C-Right
|
|
bind -n C-Left resize-pane -L 10
|
|
bind -n C-Right resize-pane -R 10
|
|
bind -n C-Down resize-pane -D 5
|
|
bind -n C-Up resize-pane -U 5
|
|
|
|
unbind %
|
|
unbind '"'
|
|
# Split panes
|
|
bind | split-window -h -c "#{pane_current_path}"
|
|
bind _ split-window -v -c "#{pane_current_path}"
|
|
bind-key "\\" split-window -fh -c "#{pane_current_path}"
|
|
bind-key "_" split-window -fv -c "#{pane_current_path}"
|
|
|
|
# Disable status bar for weechat sessions
|
|
set-hook -g session-created 'if -F "#{==:#{session_name},weechat}" "set status off" "set status on"'
|
|
set-hook -g session-created 'if -F "#{==:#{session_name},weechat}" "set status off" "set status on"'
|
|
|
|
# Plugins
|
|
set -g @plugin 'tmux-plugins/tpm'
|
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
|
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
|
set -g @plugin 'fcsonline/tmux-thumbs'
|
|
set -g @plugin 'wfxr/tmux-fzf-url'
|
|
set -g @plugin 'tmux-plugins/tmux-yank'
|
|
set -g @plugin 'wfxr/tmux-power'
|
|
set -g @plugin 'wfxr/tmux-web-reachable'
|
|
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
|
set -g @plugin 'wfxr/tmux-net-speed'
|
|
|
|
set -as terminal-overrides ',*:indn@' # This fixes the clear bug on tmate
|
|
|
|
# status bar theme
|
|
|
|
set -g status-bg 'colour235'
|
|
set -g status-justify 'centre'
|
|
set -g status-left-length '100'
|
|
set -g status 'on'
|
|
set -g status-right-length '100'
|
|
|
|
# Capture contents on tmux-ressurect save
|
|
set -g @resurrect-capture-pane-contents 'on'
|
|
|
|
# tmux-power config
|
|
set -g @tmux_power_theme 'sky'
|
|
set -g @tmux_power_show_upload_speed true
|
|
set -g @tmux_power_show_download_speed true
|
|
set -g @tmux_power_prefix_highlight_pos 'L'
|
|
set -g @tmux_power_show_web_reachable true
|
|
|
|
if "test ! -d ~/.local/share/tmux/plugins/tpm" \
|
|
"run 'git clone https://github.com/tmux-plugins/tpm ~/.local/share/tmux/plugins/tpm && ~/.local/share/tmux/plugins/tpm/bin/install_plugins'"
|
|
|
|
run -b '~/.local/share/tmux/plugins/tpm/tpm'
|
|
|