tmux conf

13 Sep 2021

Everybody's gotta have a tmux conf. This one has been working for me.

# Make ctrl-k the prefix
set -g prefix C-k
# Make ctrl-b no longer a prefix
unbind C-b

# vim mode
setw -g mode-keys vi

# copy paste
unbind-key -T prefix Escape
bind-key   -T prefix Escape copy-mode
bind-key   -T copy-mode-vi 'v' send-keys -X begin-selection
bind-key   -T copy-mode-vi 'y' send-keys -X copy-selection-and-cancel
bind-key   -T copy-mode-vi Escape send-keys -X cancel
# use 'p' to paste buffer
unbind-key -T prefix p
bind-key   -T prefix p paste-buffer

# First have to yank with y but then Leader, Ctrl-c will copy to system clibpoard.
# Though there seems to be a system freeze after doing so.
# $ sudo apt install xclip
# bind C-c run "tmux save-buffer - | xclip -i -sel clipboard"

# lots and lots of history
set -g history-limit 100000

# 256 colors of course
set -g default-terminal "screen-256-color"

# Turn off mouse support
set -g mouse off

# Style things better
set -g status-style fg=white,bold,bg=black
set -g window-status-style fg=white,bg=black
#set -g window-status-current-style fg=black,bold,bg=yellow
set -g window-status-current-style fg=black,bold,bg=colour11
set -g message-style fg=white,bold,bg=black
# Don't particularly care about showing the session name
set -g status-left "[#S] "
# This was a neat way to show the current dir, but current
# dir is already in my bash prompt.
# set -g status-right "[#{=-38:pane_title}]"
set -g status-right ""

# Set delay between prefix and command
# to ideally not miss with vim
set -s escape-time 1

# Set base index for windows to 1 instead of 0
set -g base-index 1
# Set the base index for panes to 1 instead of 0
set -g pane-base-index 1

# ------------ keys -------------------

# Remember current bindings:
# prefix w --> brings up a navigable list of windows.
# prefix Esc --> go to scroll/copy mode.
# prefix p --> paste from selection.
# prefix d --> detach from session.

# Use 'n' to mean "new window"
unbind-key -T prefix n
bind-key   -T prefix n command-prompt -p "window name:" "new-window; rename-window '%%'"

# Use 'r' to mean "rename window"
unbind-key -T prefix r
bind-key   -T prefix r command-prompt -p "rename #W to:" "rename-window -- '%%'"

# split panes
unbind-key -T prefix \\
bind-key   -T prefix \\ split-window -h
unbind-key -T prefix -
bind-key   -T prefix - split-window -v

# "Evict" a pane into its own window
unbind-key -T prefix e
bind-key   -T prefix e command-prompt -p "evict to window:" "break-pane -d -n '%%'"

# "Grab" a window by making it a pane in the current window
unbind-key -T prefix g
bind-key   -T prefix g command-prompt -p "grab window:" "join-pane -h -s '%%'"

# navigate panes
unbind-key -T prefix h
bind-key   -T prefix h select-pane -L
unbind-key -T prefix j
bind-key   -T prefix j select-pane -D
unbind-key -T prefix k
bind-key   -T prefix k select-pane -U
unbind-key -T prefix l
bind-key   -T prefix l select-pane -R

# Layout panes like books (vertically beside each other on a shelf)
unbind-key -T prefix |
bind-key   -T prefix | select-layout even-horizontal
# Layout panes like cake (horizontally stacked layers of a layer cake)
unbind-key -T prefix _
bind-key   -T prefix _ select-layout even-vertical

# Clear terminal and clear tmux history for window
unbind-key -T prefix c
bind-key   -T prefix c send-keys clear Enter \; clear-history