As a programmer, it is expected to spend a significant time using UNIX shells. However out of the box the vanilla UNIX experience can be clunky and inefficient. There are many terminal based tools (CLI tools) that address this issue, one being Tmux. I have been using Tmux for only a few weeks, but its been so useful that I have already integrated it into my workflow. In this post I will go over what I personally have found useful about Tmux, and why its worth considering if you use the terminal frequently.
“(tmux — terminal multiplexer) tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. tmux may be detached from a screen and continue running in the background, then later reattached”. – TMUX man(1) page
The main benefit of Tmux is that it minimizes cognitive overhead by containerizing terminal sessions, to illustrate this, consider an example: You’re working on 3 programming projects and for each of those projects you’re actively working on 3 files, plus a shell for testing/running code. That’s already potentially 12 windows that you would have to manage on a daily basis if you were not using Tmux. Not only would you have to manage these windows on the screen but you would also have to navigate to that location everyday, this would be tedious and a waste of time.

Now, consider the same example but with using Tmux. You can create a Tmux session for each of the projects you’re working on. After creating a session for each project, the current state of each session is saved, even after reboot. This saves time and frustration by: not having to think about what you were working on over a long period of time (potentially months working on a software project), not having to repetitively navigate to what you were working on, and acts as a safe guard against unexpected reboots like a power outage.
Consider the following two videos. The first is a workflow without using Tmux, the second is one using Tmux.
The way that I have been using Tmux, is to have a session for each of my classes. This allows me to work on muliple written assignments at once without having to remember exactly what I was working on, I can just attach to the session and continue working. This will be a game changer for me, because I was wasting a lot of time before just using cd and lf to navigate files.
The following posts will explore more CLI tools, and a deep dive into NeoVim. Thanks for stopping by!
Resources:
https://github.com/omerxx/dotfiles/tree/master/tmux
https://upload.wikimedia.org/wikipedia/commons/e/e4/Tmux_logo.svg