I’ve been using GNU screen for years now as a way to deal with all the terminals I need to use at once (terminal multiplexing is what I talk to my wife about when I know she doesn’t want to hear about work). I started out using it, as many do, because I needed to do some work over ssh on a remote terminal, and losing that connection was painful without using screen. After getting used to it, I found I liked using it even when I wasn’t working over ssh because it gave me a way to easily manage a bunch of terminal sessions.
Then one day I wanted to do remote pairing and had heard of people doing this in screen. It’s a bit of a pain to setup with screen (shared login or chmod to set uid bit), but then I discovered tmux – and realized how many things screen didn’t have that I now don’t want to live without. The main thing being vertical splits. I used to think vertical splits were just for vim sessions, but I was wrong. The tmux faq has a much fuller list of differences from screen that are nice (auto naming windows, more intuitive help, easier multiuser, multiple sessions). In tmux vs screen tmux wins hands down. The only things I’ve found I miss about screen is that my vim sessions were part of the scrollback buffer, but in tmux they disappear from tmux’s scrollback when you exit vim.
Why not iTerm2, Terminator for Gnone, other OS specific terminal app here? Did I mention they’re OS specific? I want a terminal solution that works on any terminal the same way, and over ssh connections. Oh, and open source and BSD licensed is nice too even if I never look at the source code.