Love, Hate, & tmux

Dan Croak

Many at thoughtbot run their editor+shell combos inside of tmux. Some remote pair program with ssh, vim, and tmux.

Getting started with tmux, these are the questions I’ve had.

How do I get started

Install tmux, read the documentation, and fire it up.

brew install tmux
man tmux
tmux -u

Can I make the environment look good

Yes. We have these lines in tmux.conf in thoughtbot/dotfiles:

# improve colors
set -g default-terminal "screen-256color"

# soften status bar color from harsh green to light gray
set -g status-bg '#666666'
set -g status-fg '#aaaaaa'

# remove administrative debris (session name, hostname, time) in status bar
set -g status-left ''
set -g status-right ''

What’s a prefix

The “prefix” namespaces tmux commands. By default it is Ctrl+b. In our tmux.conf in thoughtbot/dotfiles, we bound it to Ctrl+a:

# act like GNU screen
unbind C-b
set -g prefix C-a

How can I scroll up to see my backtraces

This was non-obvious to me.

Enter “copy mode”:

prefix+[

Use vim bindings to page up and down:

Ctrl+b
Ctrl+f

How can I copy text

Add this to your tmux.conf:

# enable copy-paste http://goo.gl/DN82E
# enable RubyMotion http://goo.gl/WDlCy
set -g default-command "reattach-to-user-namespace -l zsh"

How can I make tmux act more like vim

Add this to your tmux.conf to use vim’s home-row keys for movement between windows and panes:

# act like vim
setw -g mode-keys vi
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind-key -r C-h select-window -t :-
bind-key -r C-l select-window -t :+

How do I name sessions

One day I might work on Airbrake. Another day, a client project. I’d like to name my tmux sessions so I can leave one, drop into another, and go back to the original with all my state maintained (files still open in my editor, console/logs I want open, etc.).

Create a new session:

tmux new -s airbrake

Attach to a session:

tmux attach -t airbrake

How do I split and move between windows

Create a window:

prefix c

Move to window 1:

prefix 1

Move to window 2:

prefix 2

Kill a window:

prefix x

I believe in setting my mouse free but it takes time for muscle memory to make this fast.

How do I reload ~/.tmux.conf

After editing ~/.tmux.conf, execute this from a shell:

tmux source-file ~/.tmux.conf

Give it a shot

I’ve had a love-hate relationship with tmux in my first week using it, but the brief moments of flow I’ve experienced so far are enough to keep trying it.

Give tmux a shot and if you have any other tips, I’d love to hear them.

About thoughtbot

We've been helping engineering teams deliver exceptional products for over 20 years. Our designers, developers, and product managers work closely with teams to solve your toughest software challenges through collaborative design and development. Learn more about us.