I have been using tmux for several years now and it has since become a central part of my workflow as a software developer. Since I am constantly writing code, executing shell commands or accessing server instances via SSH, most of these things are done in the terminal. I am always on the lookout for cool and new tools that could potentially improve my workflow, so I checked tmux out. I knew I just have to get some hands on experience with it to find out just where it fits in my current flow.
tmux is being described as a terminal multiplexer. When I was first starting out, it was such a big word that added appeal to it. I thought it was leet, especially when I was still new to it. During my first days, I was using it solely for the sake of using it.
At this time, it became so ingrained into my system that the first thing I do upon arriving at work is spawn a terminal window into full screen and set the tmux windows that I will be using throughout the day.
Before I start with the basic commands though, I have to clear up a preconception that some people have about it. No, it does not manage your SSH connections. I need to stress this out because I have a certain colleague in the past who told me it was an ancient tool and dismissed it as a trend among hipster developers. He said he's better off using PAC Manager for all his SSH needs. These tools are apples and oranges. They complement each other; I also use PAC Manager because there is no way I will remember all the usernames and the host addresses I need to work with throughout the day.
To give a simple description as to what tmux is, you have to think of it as a server that serves terminal sessions. That allows you to
detach from it at will, and also gives other people a chance to
attach to your existing tmux
session. That is the main feature that makes it so awesome for everyone who works with remote stuff. Let us say that you have a VPS instance somewhere and you need to do some maintenance work. You SSH into your server, tell tmux to create a
new terminal session and proceed with your work. After fifteen minutes or so, you remember that you have an important meeting to attend. The problem is that you aren't quite yet done with your work. As a contrived example, perhaps the server is doing a vulnerability scan or building something from source. Since you are
attached to a tmux session, you can just kill your SSH connection. In tmux terms, it is referred to as
detaching. After the meeting, you can
attach back to your session and you will be presented with exactly the same screen as when you left. This enables you to see the scan results or the build progress without digging into the logs or trying to remember how it was doing before you left.
Another benefit of using tmux is, you will use your mouse less often once you get the hang of it. If you spend most of the day coding, reaching for the mouse to switch files or scroll through your code breaks the cadence. These are small personal idiosyncrasies, however, if you are plagued by the same quirk, you might want to learn VIM as well.
The good thing is that you only need to know a few commands to use tmux effectively. There are a whole lot of features and customization options available but you can learn them along the way. If you have used Emacs before, these commands will make you feel at home as the key combinations are somehow similar.
Outside a tmux session
Creating a new session
tmux new -s [session name]
Attaching to an existing session
tmux attach -t [session name]
Inside a tmux session
Splitting the screen vertically
Ctrl - b %
Splitting the screen horizontally
Ctrl - b "
Ctrl - arrow keys
Maximize a pane (from splitting)
Ctrl - b z
Closing a pane (from splitting)
Ctrl - d
Opening a new window
Ctrl - b c
Renaming a window
Ctrl - b ,
Ctrl - b n
Ctrl -b p
Closing a window
Ctrl - b &
Detaching from a session
Ctrl - b d
I hope I have covered enough of the basics to get you started. Happy hacking!