(C-x means ctrl+x, M-x means alt+x)
The default prefix is C-b. If you (or your muscle memory) prefer C-a, you need to add this to ~/.tmux.conf
:
# remap prefix to Control + a
set -g prefix C-a
# bind 'C-a C-a' to type 'C-a'
bind C-a send-prefix
unbind C-b
I'm going to assume that C-a is your prefix.
Session is a set of windows, plus a notion of which window is current.
Window is a single screen covered with panes. (Once might compare it to a ‘virtual desktop’ or a ‘space’.)
Pane is a rectangular part of a window that runs a specific command, e.g. a shell.
Display a list of keyboard shortcuts:
C-a ?
Navigate using Vim or Emacs shortcuts, depending on the value of mode-keys
. Emacs is the default, and if you want Vim shortcuts for help and copy modes (e.g. j, k, C-u, C-d), add the following line to ~/.tmux.conf
:
setw -g mode-keys vi
Any command mentioned in this list can be executed as tmux something
or C-a :something
(or added to ~/.tmux.conf
).
Creating a session:
tmux new-session -s work
Create a new session that shares all windows with an existing session, but has its own separate notion of which window is current:
tmux new-session -s work2 -t work
Attach to a session:
tmux attach -t work
Detach from a session: C-a d
.
Switch between sessions:
C-a ( previous session
C-a ) next session
C-a L ‘last’ (previously used) session
C-a s choose a session from a list
Other:
C-a $ rename the current session
C-a
Create a window:
C-a c create a new window
Switch between windows:
C-a 1 ... switch to window 1, ..., 9, 0
C-a 9
C-a 0
C-a p previous window
C-a n next window
C-a l ‘last’ (previously used) window
C-a w choose window from a list
Switch between windows with a twist:
C-a M-n next window with a bell, activity or
content alert
C-a M-p previous such window
Other:
C-a , rename the current window
C-a & kill the current window
Creating a new pane by splitting an existing one:
C-a " split vertically (top/bottom)
C-a % split horizontally (left/right)
Switching between panes:
C-a left go to the next pane on the left
C-a right (or one of these other directions)
C-a up
C-a down
C-a o go to the next pane (cycle through all of them)
C-a ; go to the ‘last’ (previously used) pane
Moving panes around:
C-a { move the current pane to the previous position
C-a } move the current pane to the next position
C-a C-o rotate window ‘up’ (i.e. move all panes)
C-a M-o rotate window ‘down’
C-a ! move the current pane into a new separate
window (‘break pane’)
C-a :move-pane -t :3.2
split window 3's pane 2 and move the current pane there
Resizing panes:
C-a M-up, C-a M-down, C-a M-left, C-a M-right
resize by 5 rows/columns
C-a C-up, C-a C-down, C-a C-left, C-a C-right
resize by 1 row/column
Applying predefined layouts:
C-a M-1 switch to even-horizontal layout
C-a M-2 switch to even-vertical layout
C-a M-3 switch to main-horizontal layout
C-a M-4 switch to main-vertical layout
C-a M-5 switch to tiled layout
C-a space switch to the next layout
Other:
C-a x kill the current pane
C-a q display pane numbers for a short while
Force a reload of the config file on C-a r:
unbind r
bind r source-file ~/.tmux.conf
Some other settings that I use:
setw -g xterm-keys on
tmux new [-s name] [cmd]
(:new
) - new session
tmux ls
(:ls
) - list sessionstmux switch [-t name]
(:switch
) - switches to an existing sessiontmux as [id] [-t name]
(:attach
) - attaches to an existing session<C-a>c
(:detach
) - detach the currently attached session
<C-a>s
- list sessions<C-a>$
- name session
tmux kill-session [-t name]
(:kill-session
)
<C-a>c
(:neww [-n name] [cmd]
) - new window
<C-a>[i]
(:selectw -t [i]
) - go to window[i]
<C-a>l
- go to last window<C-a>p
- go to previous window<C-a>n
- go to next window
<C-a>T
- rename window<C-a>,
- rename window<C-a>w
- list all windows<C-a>f
- find window by name<C-a>.
- move window to another session (promt):movew
- move window to next unused number
<C-a>&
(:kill-window
) - kill window
- (%)
<C-a>|
(:splitw [-v] [-p width] [-t focus] [cmd]
) - split current pane vertically - (")
<C-a>s
(:splitw -h [-p width] [-t focus] [cmd]
) - split current pane horizontally
- (o)
<C-a><Tab>
(:selectp -t :.+
) - move cursor to the next pane <C-a><Up>
(:selectp -U
) - move cursor to the pane above<C-a><Down>
(:selectp -D
) - move cursor to the pane below<C-a><Left>
(:selectp -L
) - move cursor to the pane to the left<C-a><Right>
(:selectp -R
) - move cursor to the pane to the right:selectp [i]
- move cursor to the pane[i]
- (
:swap-pane -U
) - move current pane up - (
:swap-pane -D
) - move current pane down <C-a>{
(:swap-pane -L
) - move current pane to the left<C-a>}
(:swap-pane -R
) - move current pane to the right<C-a>q
- show pane numbers (type number to move cursor)<C-a><Space>
- toggle pane arrangements
:resize-pane -U [i]
- move horizontal divider up by[i]
lines:resize-pane -D [i]
- move horizontal divider down by[i]
lines:resize-pane -L [i]
- move vertical divider left by[i]
columns:resize-pane -R [i]
- move vertical divider right by[i]
columns
resize-pane [-DLRUZ] [-x width] [-y height] [-t target-pane] [adjustment]
<C-a>x
(:kill-pane
) - kill current pane
<C-a>t
- show time<C-a>r
- reload config