tmux/tmux.conf
Kenneth Benzie (Benie) b5526ca42b Remove zsh check from vim window flag
Make using the `@vim$TMUX_PANE` window flag much more robust by
unsetting it every time the zsh prompt is drawn and setting it again
using a `FocusGained` `autocmd` in vim. This removes the need for the
hacky check for zsh in the conditional defined in the `in_vim` variable.
2019-08-16 21:54:52 +01:00

116 lines
3.6 KiB
Bash

# Set the tmux version to check for command support
run 'tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-8)'
# Use vim keybindings in copy mode
set -g mode-keys vi
# Change prefix to C-Space
unbind C-b
set -g prefix C-Space
bind Space send-prefix
# Address vim mode switching delay
set -s escape-time 0
# Increase scrollback buffer size
set -g history-limit 1000000
# Set tmux messages display time to 4 seconds
set -g display-time 4000
# Refresh 'status-left' and 'status-right' more often
set -g status-interval 5
# Upgrade $TERM
set -g default-terminal "tmux-256color"
# Focus events enabled for terminals that support them
set -g focus-events on
# TODO: Change this comment to something that explains the setting
# super useful when using "grouped sessions" and multi-monitor setup
setw -g aggressive-resize on
# Start window & pane index at 1
set -g pane-base-index 1
# Enable mouse support
set-option -g mouse on
# Enable changing cursor shape per pane, vim or zsh should emit escape
# sequences to change cursor shape.
# iTerm2 only requires this before tmux 2.9
if '[ -n $ITERM_PROFILE ] && [[ "$TMUX_VERSION" < "2.9" ]]' \
'set -ga terminal-overrides "*:Ss=\E]1337;CursorShape=%p1%d\7"'
# VTE compatible terminals.
if '[ ! -n $ITERM_PROFILE ]' \
'set -ga terminal-overrides "*:Ss=\E[%p1%d q:Se=\E[2 q"'
# Enable strikethrough on VTE compatible terminals.
set -ga terminal-overrides 'xterm*:smxx=\E[9m'
# Set only on macOS where it's required
if -b '[ "`uname`" = "Darwin" ]' \
'set -g default-command "reattach-to-user-namespace -l $SHELL"'
# Restore old next/previous window bindings
bind C-n next-window
bind C-p previous-window
# Make new splits open in current directory
bind '"' split-window -c '#{pane_current_path}'
bind '%' split-window -h -c '#{pane_current_path}'
# Integrate pane selection with vim
in_vim='tmux show-window-options | grep -q "@vim#{pane_id}"'
bind -n C-h if $in_vim 'send-keys C-h' 'select-pane -L'
bind -n C-j if $in_vim 'send-keys C-j' 'select-pane -D'
bind -n C-k if $in_vim 'send-keys C-k' 'select-pane -U'
bind -n C-l if $in_vim 'send-keys C-l' 'select-pane -R'
bind -n C-\ if $in_vim 'send-keys C-\\' 'select-pane -l'
# Integrate urlview
bind u capture-pane \; split-window 'tmux show-buffer | urlview -'
# Unbind copy mode defaults so pane selection works
unbind -T copy-mode-vi C-h
unbind -T copy-mode-vi C-j
# Enter copy mode with C-U
bind C-u copy-mode -u
# Begin selection in copy mode with v not Space
bind -T copy-mode-vi v send-keys -X begin-selection
# Yank to the system clipboard in copy mode
if -b '[ "`uname`" = "Darwin" ]' \
'bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel \
"reattach-to-user-namespace pbcopy"' \
'bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel \
"xsel -i -p && xsel -o -p | xsel -i -b"'
# Left status style
setw -g status-left " #{session_name}"
setw -g status-left-style fg=colour240,bg=colour233
# Centre status style
setw -g status-style fg=colour240,bg=colour233
# Right status style
setw -g status-right "%a %d-%m-%y %H:%M "
setw -g status-right-style fg=white,bg=colour233
# Active window status style
setw -g window-status-current-format " #{window_index}: #{window_name}"
setw -g window-status-current-style fg=white,bg=colour233
# Inactive window status style
setw -g window-status-format " #{window_index}: #{window_name}"
setw -g window-status-style fg=colour240,bg=colour233
# Pane border style
set -g pane-border-style fg=colour233,bg=colour233
set -g pane-active-border-style fg=colour235,bg=colour235
# Command line window list selection
set-window-option -g mode-style fg=white,bg=colour237
set-option -g message-style fg=white,bg=colour237