One of the beauties of tmux is its simplicity, in terms of configuration, right out-of-the-box. By default, tmux is fully functional and requires zero-configuration. However, most users eventually break away from the default settings and will begin to adjust and tweak tmux settings to personalize the tmux experience. These settings include key-bindings, prefix key, themes, among many other settings. Some changes can be made on the fly using the command line within tmux. However, such changes will be reset to default, the next time tmux is started. To make changes persistent, configuration changes should be placed in a tmux configuration file located in the user home folder.
~/.tmux.conf
To make a global tmux config file, place the config file in /etc.
/etc/tmux.conf
The content of the tmux config are tmux commands
Settings in the config file are read by the tmux server when it is initialized or reloaded using “source-file”. For example:
$ tmux source-file ~/.tmux.conf
Alternatively, you can use the command mode of tmux, as follows:
Prefix
+:
(will open the tmux prompt, then type:):source /path/to/config.conf
And hit return.
Advanced Tip!
Most saavy users bind a key to the command “source-file ~/.tmux.conf“. You can do this by putting the following line in the tmux config:
bind r source ~/.tmux.conf\\; display "~/.tmux.conf sourced!"
The latter part of the line above will give you a visual confirmation that the config file was sourced. With this, all you have to do is Prefix + r to reload the config file!!!
How tmux Processes Config
tmux processes the configuration file line-by-line, similar to run commands in .bashrc or .zshrc. A line in the configuration file can be run in the shell within tmux. The only caveat is that you must prefix the line with the word “tmux” before executing the command from the shell.
For example, to set the default-terminal variable in new panes to screen-256color, you can:
Put the following line in the ~/.tmux.conf:
set -g default-terminal "screen-256color"
Or, you can set it by executing the command below from the shell within tmux:
$ tmux set -g default-terminal "screen-256color"
What you change depends on your preference and use-case. We recommend that you begin with reviewing the available options in the online documentation. Once you identify an option that interests you, try it through the command line. If you decide to make it persistent, transfer it to your ~/.tmux.conf.
Types of tmux Configuration Options
The appearance and behaviour of tmux
may be modified by changing the value of various options. There are four types of option: server options, session options, window options, and pane options.
Server and Session Options
The tmux
server has a set of global server options which do not apply to any particular window or session or pane. These are altered with the set-option
-s
command, or displayed with the show-options
-s
command.
In addition, each individual session may have a set of session options, and there is a separate set of global session options. Sessions which do not have a particular option configured inherit the value from the global session options. Session options are set or unset with the set-option
command and may be listed with the show-options
command. The available server and session options are listed under the set-option
command.
Window and Pane Options
Similarly, a set of window options is attached to each window and a set of pane options to each pane. Pane options inherit from window options. This means any pane option may be set as a window option to apply the option to all panes in the window without the option set, for example these commands will set the background color to red for all panes except pane 0:
set -w window-style bg=red set -pt:.0 window-style bg=blue
There is also a set of global window options from which any unset window or pane options are inherited. Window and pane options are altered with set-option
-w
and -p
commands and displayed with show-
option
-w
and -p
User Options
tmux
also supports user options which are prefixed with a ‘@
’. User options may have any name, so long as they are prefixed with ‘@
’, and be set to any string. For example:
$ tmux setw -q @foo "abc123" $ tmux showw -v @foo abc123
For a list of all available options, consult the tmux online documentation.
If
-g
is given to set-option, the global session or window option is set.
Examples
Below are some examples of how to set various options. It takes some time to get comfortable with which switch to use with which option. We recommend that you review the “available options” section in the online documentation and review the various options that pertain to its respective type.
Server Options
- Tweak timing between key sequences
set -s escape-time 0
- If you’re having an issue with color detail in tmux, it may help to set
default-terminal
toscreen-256color.
This sets the TERM variable in new panes.
set -g default-terminal "screen-256color"
- Change the default server behavior and keep it running when there are no active sessions.
set -s exit-empty off
Session Options
- Start counting window number (base-index) at 1, rather than the default, 0.
set -g base-index 1
- Set the prefix to
<Ctrl-a>
, like GNU Screen, rather than default<Ctrl-b>
. This requires that we unbind Ctrl-b key.
set-option -g prefix C-a unbind-key C-b bind-key a send-prefix
Window Options
- Automatically name the window based on its active pane. Automatic renaming will be disabled for the window if you rename it manually.
set-window-option -g automatic-rename
- To switch off automatic-rename globally:
set-option -wg automatic-rename off
- Synchronize input of any pane to all other panes in the same window. Default is off.
set-option -w synchronize-panes on
Pane Options
Change the background of the current pane to black.
set-option -p window-active-style bg=black
User Options
tmux
also supports user options which are prefixed with a ‘@
’. User options may have any name, so long as they are prefixed with ‘@
’, and be set to any string. For example:
$ tmux setw -q @foo "abc123" $ tmux showw -v @foo abc123
Important Notes
- To unset any option, use the -u flag in the set-option line. For example, the line below will unset the black background that we set in the Pane Options section.
set-option -pu window-active-style bg=black
- To list the current set options, you can always use the show-option tmux command. For example, to show the set options for the current windows:
show-option -w
Or, the following for the global window set options:
show-option -wg
- You can configure tmux to prompt for window name upon creating a new window,
Prefix
+C
(capital C):
vi-Style Copy/Paste Mode
tmux offers an option to turn the navigation of the window buffer into a vi-like functionality. By binding few keys, you can navigate through the current buffer and search all the output generated on the screen thus far. Furthermore, you can select, copy, and paste to other windows in the tmux session, using vi keys. By default, tmux uses emacs style and this can be changed using the tmux set command as follows:
set-window-option -g mode-keys vi
You can confirm this is working by pressing Ctrl+B and then : in a tmux session to bring up the command line, and typing:
list-keys -T copy-mode-vi
This will bring up a complete list of the vi-like functionality available to you in this mode.
When vi-style is configured in tmux, you can enter the “copy mode” using the sequence:
Prefix (Ctrl + B by default) and then the symbol [
You can leave the copy mode by press the Enter key. Or, you can start a selection by pressing Space on a character, moving to another, and then pressing Enter. If you have text copied like this you can paste it into any tmux window in that session by pressing Ctrl+B and then ]
.
However, you can bind few keys to make the experience even more vi-like. This will entail binding keys to select, copy, and paste using vi-style. This is accomplish by putting the following lines inside your ~/.tmux.conf:
# Setup vi-style copy/paste set-window-option -g mode-keys vi bind P paste-buffer bind-key -T copy-mode-vi v send-keys -X begin-selection bind-key -T copy-mode-vi y send-keys -X copy-selection bind-key -T copy-mode-vi r send-keys -X rectangle-toggle
Now you can use v to select (visual-mode in vi), y to yank (copy), P to paste the buffer, and r to select multiple line!