Tmux tips and tricks
Published on 17/07/2017
4 min read
I'm a heavy tmux user. Mostly because of the way I launch and monitor my dev servers/compilers/transpilers while coding.
Configuring Tmux in a right way for your needs is really important if you want to have a distraction free workflow.
Better Tmux prefix
Prefix key is, of course, going to be the most used one. Setting it right is crucial. For me
Meta-z combination works really well, since both keys are easy to press and I don't use any other keybinds that can interfere with it.
# Better prefix set -g prefix M-z unbind C-b bind M-z send-prefix
At some point you'll also face a sitution when you need to use the prefix key in nested sessions, so let's handle that too by setting
Meta-a as a keybind.
# Nested Tmux keybinds bind-key -n M-a send-prefix
Use Meta+arrow keys without prefix key to switch panes.
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
Use shift+arrow keys to switch windows.
bind -n S-Left previous-window bind -n S-Right next-window
Vim user specific keybinds
You can skip this part if you don't plan on using Vi/Vim or their keybinds. Otherwise comments are pretty self-explainatory.
# Instant vim-mode change set -s escape-time 0 # Enable modifier keys in vim set-option -g xterm-keys on # Use vi keybinds setw -g mode-keys vi set -g status-keys vi
You mostly shouldn't be using your mouse if you want to be extra productive, but sometimes using mouse wheel is nice.
# Mouse support set -g mouse on bind -n WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M bind -n WheelDownPane select-pane -t= \; send-keys -M
Copy mode keybinds
This snippet creates a vi-like experience in copy mode.
# Copy mode settings unbind p bind p paste-buffer bind -Tcopy-mode v send -X begin-selection bind -Tcopy-mode y send -X copy-selection
Increase the history size
# Bigger history set -g history-limit 10000
Change pane/window counting index
If you prefer keeping 0-index pane/window for special purposes, this might come in handy.
# Start counting windows/panes from 1 set -g base-index 1 setw -g pane-base-index 1
Turn on the aggressive resize
When using the same session on multiple screens, you'll be limited by the smallest screen resolution on all screens. This can be mostly fixed by aggressive resize.
setw -g aggressive-resize on
Use a plugin manager
TPM is a really great way of managing Tmux plugins.
I'm personally using the following ones:
- Tmux Resurrect to restore the session after rebooting
- Tmux Copycat for regex bassed searches in copymode
- Tmux net-speed to monitor network usage
##Plugins set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tmux-resurrect' set -g @plugin 'tmux-plugins/tmux-copycat' set -g @plugin 'tmux-plugins/tmux-net-speed' ##Plugin location set-environment -g TMUX_PLUGIN_MANAGER_PATH '~/.dotfiles/tmux/plugins/' ##Init run '~/.dotfiles/tmux/plugins/tpm/tpm'
I'm using a custom Powerline-like tmux theme I've made myself.
You can read more about that in Creating a native Powerline theme for Tmux.
Is it worth investing time into this?
If you are using SSH to manage multple computers/servers, or would like to emulate Terminator like features in normal terminals, then yes.
Tmux also can be a good terminal workspace manager.
My full Tmux configuration is in my dotfiles repo.