tmux
What's tmux?
tmux’s authors describe it as a terminal multiplexer. Behind this fancy term hides a simple concept: Within one terminal window you can open multiple windows and split-views (called “panes” in tmux lingo). Each pane will contain its own, independently running terminal instance. This allows you to have multiple terminal commands and applications running visually next to each other without the need to open multiple terminal emulator windows.
On top of that tmux keeps these windows and panes in a session. You can exit a session at any point. This is called “detaching”. tmux will keep this session alive until you kill the tmux server (e.g. when you reboot)2. This is incredibly useful because at any later point in time you can pick that session up exactly from where you left it by simply “attaching” to that session. -- Ham Vocke, in the Quick And Easy Guide to Tmux linked below.
I've been using tmux for a couple months, and I recommend it to anyone who does lots of terminal work.1 I'm in the position where I use just a fraction of the features, and still find it quite useful, so you shouldn't be worried by the quantity of options.
Introductions
A Quick and Easy Guide to tmux
Introduction, with some links to other resources
dayid's tmux & screen cheat-sheet
Purely a list of commands.
A minimalist guide to tmux – Actualize – Medium
Makes the suggestion that you should start using tmux without panes. I came from emacs, which also has support for panes, so I found them easy to use, but it might be good advice for people who find tmux overwhelming.
Tips
tmux Integration - Documentation
iTerm2 has tmux integration using
tmux -CC
which maps tmux panels to iTerm tabs, with the effect that you can properly select text. In hindsight, this is obvious, but this command didn't do what I originally hoped, which was let me use tmux commands to split panels, and have text selection work naturally.
Running Specs from Vim, Sent to tmux via Tslime
Sending a subset of tests to a tmux pane. Uses rspec and vim, neither of which I use, but I assume that you could create something similar for other editors/testing environments.
Configuration
Making tmux Pretty and Usable - A Guide to Customizing your tmux.conf
Customizing tmux. I have done none of this.
A Minimalist Guide to tmux (HN Comments)
Comments on an article recomended earlier, but it contains a lot of people's opinions on key bindings.
More Sources
A tmux Crash Course
Heap
tmuxinator
Unused, for creating complex sessions
tmux-Resurrect
Unused, plugin to let you persist tmux sessions across reboots
-
There is also GNU Screen, which predates tmux by 20 years. I've never tried it, and for all I know, it's as good or better.↩