Tmux Crash Course

If you are still using multiple terminal's tab to manage your shells, this post may give you a new point of view.

The power of Tmux are following:

Config files

Like most dotfiles, the config file of Tmux local in $HOME/.tmux.conf with a global one in /etc/tmux.conf.

Prefix

First things first, prefix is the base of all the shortcuts, once the prefix is set, system knows that the following operation should be sent to to tmux.

the default prefix key is C-b, which conflict with emacs default keybinding, so you can set prefix as 'C-a=like most user. Of course=C-t` is another popular choice.

Here are some config about prefix:

set -g prefix C-a # setting the prefix
unbind C-b  # cancel the default prefix
set -s escape-time 1 # setting the escape time of prefix
bind C-a send-prefix # make sure C-a can be sent in other applications (like vim)

Common Operations

I will list my config in next sections. You may find that the description is longer than the config file since many shortcuts are the default ones so there is no need to define them explicitly.

Feel free to use prefix - ? whenever you want to lookup the shortcuts list

  1. Session

    config:

    bind C-c new-session # create new session
    bind C-f command-prompt -p find-session 'switch-client -t %%' # find session
    
    function shortcut
    new session prefix - C-c
    return session tmux attach -t session-name
    list sessions tmux list-sessions
    find session prefix - C-f
    rename session tmux rename-seesion session-name
    switch session tmux switch -t session-name
  2. Window

    config:

    bind -r C-h previous-window # choose previous window
    bind -r C-l next-window     # choose previous window
    
    functions shortcut
    new window prefix-c
    close window prefix-&
    rename window prefix-,
    list windows prefix-w
    switch window prefix-[0-9]
  3. Panel

    config:

    bind - splitw -v
    bind | splitw -h
    
    function shortcut
    horizontal split window prefix - ǀ
    vertical split window prefix - -
    maximum pane prefix-z
    change pane layout prefix-space
    resize pane prefix and hold (shift)FBNP
    switch pane in turn prefix - o
    switch pane by no prefix - q with no

Mode

Like vim, tmux has it's own modes.

default mode

Once you enter Tmux, you are in default mode.

copy mode

use prefix-[ to enter copy mode。In this mode you can lookup history, copy and past text just like the normal mode of vi.

command mode

Directly invoke command just like press M-x in emacs.

clock mode

This mode will show a clock. To be honest, I do not find this mode any helpful.

Advanced tips and plugins

Pair Programming

Did you ever feeling it's too crowded if two programmers head are behind one monitor? Tmux to the rescue. Start a server, and every programmer use a client to connect to the server, not only share a screen, but also share same file if the file is on server.

Since it's a common patten, there's already a tool named wemux, which support modes such as mirror, pair, rogue even with the ability of kicking.

Initial workspaces

Thinking about a project which needs a redis server with two ports, a sidekiq process besides common server such as mysql, es and guard, that's horrible.

Thanks to tmuxinator which is a ruby gem making initialing these servers very easy. It can also automate opening text editor, prepare extra windows for git or other tools and so on.

plugin manager and theme customize

The plugin system of tmux is very simple. You can install tpm to getting started. You can also checkout this repo which listing many tmux themes.