Why Learn Tmux
When VSCode came out with split terminal function I was surprised, why not just
tmux? It’s one of those tools which is commonly found, but a lot of
people think it’s sourcery, every time people see me using it I get hacker
points ™️ by default.
The config A.K.A. .tmux.conf
One of the obstacles in getting started is the ancient default config. The
mouse doesn’t work and key bindings are a bit off. To fix that you’ll need to
The first thing which causes panic in most of the people is the missing mouse scroll and resize. To fix that add:
# Allow mouse usage set -g mouse on
Another thing I personally prefer is getting the better shortcut for calling
tmux commands. I remap it to
# Remap <Ctrl-A> as modifier. unbind C-b set -g prefix C-a bind C-a send-prefix
If you are not using
zshell you should. And to make it work with the
you will need to set it as default like:
# Use `zshell` or whatever is used set -g default-shell $SHELL
This would also work for other shells as long as it is set to be your default shell.
Vim users might see a weird lag then pressing
Esc fix for that:
# Kill the weird lag set -sg escape-time 0
And colours might look a bit off, fix is there as well:
# Vim colour fix set -g default-terminal "screen-256color"
Once the config is done it’s time to use it.
tmux launch if with:
Further down I will use
Prefix for the keys we bound as hotkey. E.G. `Prefix
will mean pressingCtrl + b
Tmux is a terminal multiplexer, which is a fancy word for the split screen…
I remember it as
% sign looks like some fruit chopped in half from the top.
And the other one is horizontal 😅. In practice mostly using vertical split.
There are a few ways to jump between panes. The one I use the most often is
Prefix + o which just cycles through the panes in the current window.
If you want to be more precise you can use
Prefix + <arrow key> with the
direction you want to focus on. But this forces you to move the fingers from
Another option is to use pane numbers. To do this press
Prefix + q, then
press the number of the pane while they are displayed. Kind of feels like a
wack a mole, but it works.
To close the pane you can use the same shortcut you would use for closing the
Ctrl + d.
The area you can split the pane is called window in
tmux. And just like you
can have multiple panes, you can create multiple windows with
Prefix + c.
Quite simple there
C for create.
At the bottom left of the window, you will be able to see the numbers next to
the pane names. To use them simply press
Prefix + <number>. While this is a
more precise way to navigate the windows I prefer to cycle through the panes
Prefix+ n and
Prefix + p.
Like panes live in windows, windows live in sessions. Just by running
the terminal we spin up a session. Now to put the session in the background you
Prefix + d.
Once back in your usual shell there you can see that session is still up with:
To get back to the session:
This will attach to the last active session.
If you have multiple sessions running you can attach by its number or name:
tmux attach -t <number>
To make sessions more useful you can add a name when starting a session
tmux new -s <name>
If you are working on multiple projects you might want to have a session per project. One of the handiest shortcuts I’ve found out just recently was `Prefix
, then you can navigate up and down between windows and sessions withj
andk` similar to vim.
But Why use
You won’t accidentally kill processes. So many times I saw people running a job in the terminal and pressing
cmd+qor something similar, just to realize that they just killed a compiler or some migration they were running on their machine. Using
tmuxmeans that you will quit the terminal app but you won’t kill processes which you are running in that session. So If you have to run a batch job or a server then you don’t risk killing it by closing a terminal
It makes terminal close to ide, in the sense of ability to run debuggers, loggers, runners and etc. The ability to have multiple panes means you can run whatever you want. It’s like lego IDE. I personally will have one pane with web server logs another one for git, and something like node interpreter running for quick exploration.
It’s universal, at least on Unix type systems. I’ve used Linux, macOS and even windows Linux subsystem, with the same config and same muscle memory sharing my config files as well. Learn once use almost ever which is always great.
You don’t need that much to get started. You could start with the single pane for long running jobs or servers and then work from there to learn shortcuts and so, but after you use it’s irreplaceable.
I’m not a pro at
tmux and there probably are even more shortcuts and tricks
to it. But this is a list of configs, shortcuts and flows which worked for me
to achieve my
Plateau of Productivity
Bonus - Tmuxinator
If you are working on the same projects a lot you can create custom IDE experience by using tmuxinator. An excellent tool to define the sessions, windows and so on in declarative yaml file.