tmux is great, as a web developer I use it all the time. At first I thought "who needs a terminal multiplexer" but after having used tmux for a while now, I can't go without it. If you find yourself switching projects and restarting the same tools over and over again, this post is for you.

What is tmux?

So, tmux is a terminal multiplexer. It means that you can have different terminal sessions (for different projects) and easily switch between them. Even more interesting is that with a plugin, you can even keep those sessions when you restart your computer.

A quick demo:

Installing tmux

To install tmux on OS X you should use homebrew. You can easily install tmux with brew install tmux . On any other *nix distro you would use the associated package manager respectively.

You can now start a new tmux session by just typing tmux .

However, I like to start a named session. It's easier to remember and easier to attach to. To start a named session run:

tmux new -s [name]

You can detach from that session by pressing ctrl+b + d (we'll change these later on). If you want to reattach to that session later you run:

tmux attach -t [name]

Configuring tmux

I personally think ctrl+b + [key] is horrible. I have it remapped to ctrl+a and have my Caps Lock key remapped to ctrl .

To remap Caps Lock to ctrl on OS X go to System Preferences -> Keyboard -> Modifier Keys and set Caps Lock key to "^ Control".

Your Caps Lock key will behave as a ctrl key from now on.

Great, this helps a bit but Caps Lock + b is still horrible. Fire up your editor and create ~/.tmux.conf - this is your tmux config file as you might have guessed.

To change Caps Lock + b (from now on called ctrl) to Ctrl+a add this to your ~/.tmux.conf

# use ctrl+a rather than ctrl+b unbind C-b set-option -g prefix C-a bind C-a send-prefix

The changes will take effect next time you start a new session. If you already have a session active you press ctrl+b + : and type source ~/.tmux.conf . From that moment on you can use ctrl+a .

The important shortcuts

As with most tools there are shortcuts. I will list the ones I use all the time below. Prefix means ctrl+a or whatever key you have set it to. Keep in mind that you can change any key binding yourself in tmux.conf.

prefix + % - split view vertically

- split view vertically prefix + " - split view horizontally

- split view horizontally prefix + [arrow keys] select active pane

select active pane prefix + c - create new tab

- create new tab prefix + , - rename tab

- rename tab prefix + x - kill pane

- kill pane prefix + & - kill window

- kill window prefix + p or n - go to previous / next tab

- go to previous / next tab prefix + [0-9] - go to tab 0 - 9

- go to tab 0 - 9 prefix + ( or ) - go to previous / next session*

- go to previous / next session* prefix + d - detach from current session

- detach from current session prefix + [ - go in copy mode (press q to leave copy mode)

* At the beginning of the post you see me using tmux attach -t [name] , you can switch much faster by using prefix + ( / ) .

There are of course a lot more shortcuts but I think these are essential. If you want a nice overview of all shortcuts you should check this gist out.

Copying

The first thing I ran into with tmux is that I can't use | pbcopy (a command to copy output from the terminal). Luckily there's a fix for that.

You need reattach-to-user-namespace. Install it with brew ( brew install reattach-to-user-namespace ) and add the following line to ~/.tmux.conf

set-option -g default-command "reattach-to-user-namespace -l zsh"

I personally use vim-like keybindings for copying specific lines. It works like this:

In this demo I am pressing ctrl+a + [, navigating to the lines using hjkl (vim bindings) and selecting using v . To copy the actual lines to my clipboard I just press y like in vim.

The config for this:

# use vim keybindings in copy mode set-option -g mode-keys vi # setup 'v' to begin selection like in Vim bind-key -t vi-copy v begin-selection bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

Using the mouse

After showing some of my friends and colleagues tmux that have never used vim, they complained about it. Whilst I believe that hjkl is a skill for life much like walking, you might prefer to use the mouse to switch between panes and to scroll. If so, add this to your ~/.tmux.conf.

# enable mouse set-option -g -q mouse on

Plugins, plugins and more plugins

There are a few plugins that make tmux even more awesome. To install plugins you need tpm (tmux package manager).

To install run:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

This will create a .tmux directory in your home directory where it saves your plugins.

At the beginning of this article I promised that you could restart your computer and keep your terminal sessions, I wasn't lying. The plugin you need is called tmux-resurrect. If you want to automatically save your sessions you need another plugin tmux-continuum and the setting set -g @continuum-restore 'on' .

To install all these plugins at once add the following to the bottom of your ~/.tmux.conf and press prefix + I (in tmux) to install the plugins.

# List of plugins set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tmux-resurrect' set -g @plugin 'tmux-plugins/tmux-continuum' # last saved environment is automatically restored when tmux is started. set -g @continuum-restore 'on' # initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) run '~/.tmux/plugins/tpm/tpm'

If you restart tmux now ( tmux kill-server ) you will have tpm and your sessions will be saved. You can restart your computer and run tmux , it will restore all your sessions, windows and running tools (vim, grunt, gulp, maven etc).

Another plugin that I use frequently is tmux-open. To install add set -g @plugin 'tmux-plugins/tmux-open' to your ~/.tmux.conf and prefix + I again.

You can open files / urls by selecting the path / url and pressing o (without prefix because you are in select mode). Or edit the highlighted file by pressing ctrl+o.

That's a wrap!

So that's tmux. It takes a few hours to get used to but you will never want to go back to a "normal" terminal. If you liked this post don't hesitate to share it or leave some feedback on twitter.

My personal and minimal ~/.tmux.conf is hosted on GitHub as a gist.

Follow @Jilles