To list all current key bindings, including any custom bindings you’ve added and bindings added by plugins:
- Ctrl + b ?
tmux list-keys
ortmux lsk
in a shell inside tmuxlist-keys
orlsk
at tmux’s command prompt (Ctrl + b :)
The bind-key
and unbind-key
commands (aliases bind
and unbind
) change key bindings in tmux. Like all tmux commands a bind
or unbind
command can be
entered in three different ways:
- By running
tmux bind ...
in a shell inside tmux - By hitting Ctrl + b : in tmux and then entering
bind ...
into tmux’s command prompt - By adding a
bind ...
line to your~/.tmux.conf
file to bind the key at startup
For example:
bind C-t new-window
Now Ctrl + b Ctrl + t will open a new window.
To remove the key binding:
unbind C-t
The C-
stands for Control. There’s also S-
for Shift and M-
for Alt, e.g. bind M-t new-window
, bind -n M-S-Left swap-window -t +1
. There are several special key names for use in
bind
commands, including: Up
, Down
, Left
, Right
, BSpace
, Delete
, End
, Enter
, Escape
, F1
… F12
, Home
, Insert
, PageDown
or PgDn
,
PageUp
or PgUp
, Space
and Tab
.
S-
doesn’t work with keys that send a different character when Shift‘ed.
bind S-n ...
, bind S-1 ...
, etc don’t work.
Use bind N ...
, bind ! ...
, etc instead.
But if you want to bind Alt + Shift + ←, for example, then it is bind M-S-Left ...
.
Shift‘d keys also don’t work with Ctrl because Ctrl-modified keys are case-insensitive in terminals.
So while you can do bind C-N ...
the binding will be triggered by either Ctrl + Shift + n
or just Ctrl + n.
There are various other modifier key limitations as well, see Modifier Keys on the tmux wiki.
Every keybinding lives in a key table. There are three built-in key tables:
-
prefix
: Keys in this table must be pressed after the prefix Ctrl + b to trigger the binding. This is the table that thebind
command uses by default. Example:bind C-t new-window
-
root
: Keys in this table can just be pressed, without any prefix. Use-n
(a shortcut for-T root
) to bind keys in this table. Example:bind -n C-t new-window
-
copy-mode
orcopy-mode-vi
for when in copy mode, depending on whether you’re using emacs- or vi-style key bindings mode (addset-window-option -g mode-keys vi
to your~/.tmux.conf
file to force vi-style). Use-T copy-mode-vi
to bind keys in this table. Example:bind -T copy-mode-vi C-t new-window
Repeatable prefix key bindings
For key bindings in the prefix
table the -r
option can be used to make them repeatable.
For example with tmux bind -r t new-window
Ctrl + b t is needed to open a first new window, then you can
keep hitting t to open more without having to hit Ctrl + b each time. The repeat-time
setting decides how much time
you have to repeat the key before the prefix times out (default: 500 milliseconds).
Binding a key to run multiple commands at once
You can use \;
to separate multiple commands in a single key binding:
bind t new-window \; display-message "new window opened"
If using the tmux bind
shell command you may need to quote the commands instead:
tmux bind t 'new-window; display-message "new window opened"'
A multiline format is also possible by ending each line with \
or (if the line is part of the command) \; \
. Example:
bind -n DoubleClick1Pane \
select-pane \; \
copy-mode -M \; \
send-keys -X select-word \; \
send-keys -X copy-pipe-no-clear "xsel -i"
Binding a sequence of keys: custom key tables
You can bind keys in custom named key tables and use the switch-client
command to move between key tables. This enables sequences of keys to be bound.
For example to make abc
in quick succession open a new window:
bind -T root a switch-client -T my_table_1
bind -T my_table_1 b switch-client -T my_table_2
bind -T my_table_2 c new-window
Binding "
and '
To bind "
or '
you need to put them in quotes:
bind '"' split-window
bind "'" new-window
Binding mouse events
If tmux’s mouse support is enabled (set -g mouse on
) then bind
can also bind mouse events. For example to make clicking the Left Mouse Button on a
pane open a new window:
bind -n MouseDown1Pane new-window
The mouse events are MouseDown1
, MouseUp1
, MouseDrag1
, MouseDragEnd1
, DoubleClick1
, TripleClick1
, MouseDown2
, MouseUp2
, MouseDrag2
,
MouseDragEnd2
, DoubleClick2
, TripleClick2
, MouseDown3
, MouseUp3
, MouseDrag3
, MouseDragEnd3
, DoubleClick3
, TripleClick3
, WheelUp
, WheelDown
.
Each event always needs to be suffixed with one of the target locations Pane
, Border
, Status
(the window list in the status line), StatusLeft
,
StatusRight
or StatusDefault
(any other part of the status line that isn’t the window list or left or right parts).
Mouse button 2 (MouseDown2
, MouseUp2
, …) is the middle mouse button and 3 (MouseDown3
, MouseUp3
, …) is the right button.
The special token {mouse}
or =
in a mouse event bind
command resolves to the target-window or target-pane that was clicked on, for when you need the target window
or pane in the bound command.
For example bind -n MouseDown1Pane select-pane -t {mouse}
makes clicking on a pane select that pane.
bind -n MouseDown1Status select-window -t =
makes clicking on a window in the status line select that window.