(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