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:
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
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]
I personally think
ctrl+b + [key] is horrible. I have it remapped to
ctrl+a and have my Caps Lock key remapped to
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.
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
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
- prefix + " - split view horizontally
- prefix + [arrow keys] select active pane
- prefix + c - create new tab
- prefix + , - rename tab
- prefix + x - kill pane
- prefix + & - kill window
- prefix + p or n - go to previous / next tab
- prefix + [0-9] - go to tab 0 - 9
- prefix + ( or ) - go to previous / next session*
- prefix + d - 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.
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.