How and When to Start Using tmux
Over the past week, I've been trying to start using tmux in earnest.
On a typical day, I don't need to start a process in more than two or three terminal tabs. But this past week, I reached a breaking point and possibly a new record when I had to get practically the entire system I develop on working locally!
This included the following:
- the main Rails monolith
- a message broker app written in Sinatra
- A sneakers process to manage workers
- A Dockerized version of some other assorted dependencies, including elasticsearch, postgres, redis, and rabbitMQ
- a Phoenix app for our IDE backend
- a Rails console
- localtunnel to expose localhost to the world
Navigating between all these windows became rather onerous, especially since I am just awful at tab management. And then there's the trouble that I've been using vim as my text editor lately, so that takes yet another window, or two, since my work was spanning multiple codebases.
Tmux solves most of that problem while also giving you the opportunity to attach and detach from sessions. There are even plugins that allow you to persist your layout between sessions or system reboots, which I hope to look more into soon.
My secondary reason was to remote pair with tmate, which is way more performant than trying to screenshare and give remote control to someone using software like Zoom.us or Screenhero.
Okay, so that's why you might want to start using tmux. I wouldn't start using it until you really need it. Here's how you would get started and essential things you need to know.
- Assuming you have Homebrew installed, install tmux using
brew install tmux
- Do yourself a favor and set up some basic configs in your
- I turned on vi bindings so that I can copy and paste easier. Add this line to that file if you too want to reap the benefits:
set-window-option -g mode-keys vi
- I also switched my default shell to
zsh, which is another work in progress, but anyway, this is the config for that
set-option -g default-shell /bin/zsh.
tmux essential commands
Great, now that you've got tmux installed, it's time to learn some basic commands.
Once you're in a tmux session, anything you do to talk to tmux will require
that you use a prefix key. The default prefix key is
To start a session with a name, which you most likely want to do, run the following command:
tmux new -s [name of session]
Woohoo, now that should put you in a tmux session. Now you might want to split the pane so you can look at multiple programs at the same time.
This is where the prefix key comes in. If you want to split the pane
If you want to split the pane vertically, use
Now, you'll probably want to navigate between those panes. You can write
more bindings if you want, but the default allows you to navigate using
ctrl+b [arrow key]. If you wanted to go right, for example, you'd type
ctrl+b then the right arrow.
There's a good chance that there are some programs you just want to glance at while there are others you want to see more detail from. Resizing your pane might be a good idea. To do this, you get into the tmux prompt.
ctrl+b : gets you the prompt.
To resize the pane, you type
resize-pane with a direction flag and the
number of lines to move.
resize-pane -D 10
That's all well and good, but now you might want to create different windows with layouts to see even more programs!
Enter windows. To create a new tab, use
ctrl+b c. This should place you into
another window, where you can create new panes. To navigate between windows, you
can use the prefix with the window number.
You can even name your windows. I like
naming my windows because as I mentioned, I'm terrible at remembering where
things are. To name your window, use
ctrl+b , and enter the name.
What's that? You need to copy and paste. With vi bindings, this is a little
simpler. First, enter scroll mode using
ctrl+b [. Then hit the spacebar
and use the arrow keys to select your desired output and hit enter. To paste, use
So now you've got your workspace all set up, but you want to detach from
your tmux session. Sounds chill, you can detach using
Whoops, but you forgot you had to make one more change before leaving for
the day. Go ahead and reattach to that session using
tmux -a -t [name of
Tmux can be especially useful when you ssh onto remote boxes and want to reattach to a session you were in before.
So that's great! You're using tmux. And now you're thinking to yourself, but wouldn't it be great if I could pair remotely with a colleague while using tmux.
This is where tmate comes in! Tmate is a fork of tmux that lets you share
your terminal with whomever you want. I honestly haven't dug too deep into
how it works, but you install it with homebrew (
brew install tmate) and
launch it using
tmate. That'll give you an address that other people can
ssh into. It's pretty awesome. I recommend trying it out if you need to
pair remotely and other solutions are too laggy.
All right, so that is pretty much all for now. This is just the beginning, the essentials for getting started with tmux, but I'm pretty excited to learn more and find more applications for it.