Command Line Productivity
I describe my minimal, focused, keyboard-centric workflow where I do my best work. In other words: I shill Vim.
Motivation
I’m not here to convince you to radically overhaul your workflow overnight, or to knock “mainstream” editors and IDEs. I just want to share an alternative (and in my opinion, more performant) set of tools that have worked well for me.
In my view, there are two distinct areas of technical productivity:
-
On one side, you have tools for version control (Git) and repository hosting (GitHub, GitLab) – your safety net and scaffolding when things go wrong. Every developer should use them. They let teams of any size coordinate effectively. But they aren’t our focus.
-
On the other side, you have tools that genuinely speed up how you write and ship code. These are what I’ll highlight today.
Multiplexing
When you spend a lot of time in your terminal, it gets cumbersome fast. In a web browser, you can create new tabs and swiftly ALT-TAB between them. You can bookmark and return to your workspace at will. There’s a parallel here—you can open multiple terminal windows, and that works… sort of. But you still have to reopen everything with each new terminal instance.
I found something much better. It does exactly what I want. It’s called TMUX.
A terminal multiplexer is a program that transparently “sits between” your active terminal connection and k spawned terminal sessions. With TMUX, you can start a session, open new windows, and hotkey between them. You can detach and reattach to sessions at will. In other words, you can set a session aside and return to it later, and everything will be exactly how you left it.
With a plugin, these sessions can even persist across system restarts.
TMUX is incredibly useful, and if you plan on doing any serious work in the terminal, it will save you a huge amount of time. Go ahead and install it.
pacman -S tmux # Arch Linux
apt install tmux # Debian or Ubuntu
brew install tmux # macOS (using Homebrew)
You can create a new session with tmux new -s session_name, detach with CTRL-B D, and reattach with tmux attach -t session_name.
Some other useful commands include:
tmux ls # list sessions
tmux kill-session -t session_name # kill a session
tmux kill-server # kill the server
tmux a -t session_name # attach to a session
tmux a # attach to the last session
Customization
When you start TMUX, the program looks for a .dotfile11 Many programs store their configuration files in plain text files. These
are usually (but not always) in your ~ or ~/.config/~ directories. Dotfiles
are configuration files for various programs. What sets them apart
from regular files and directories is their prefix: a dot (.).
Note: On Unix based systems, dotfiles are hidden by the OS by default. at ~/.tmux.conf. This plain-text file is where you can configure and “rice out”22 Ricing is a process in which one customizes their OS or programs to improve the aesthetics or refine their workflow. your multiplexer. You’ll begin by adding a plugin manager, tpm, and then use it to load a few plugins and a nice theme33 I highly reccommend rose-pine or catppuccin (mocha)..
Vim As Your Editor
I’ve been using Vim for about two years. When we mention Vim, it’s usually in one of two contexts: vim (the program), or Vim Motions.
Vim Motions are the keybindings that allow you to move around the text. They are the most important part of Vim. Everyone should use Vim Motions. They are extremely efficient. They’re available on all text editors and IDEs.
Vim, by contrast, is a highly configurable, extensible text editor built to make creating and changing any kind of text very efficient.
Vim Motions
Vim has one grammar: motions. They let you move around and manipulate text.
Here’s a quick reference of some common Vim Motions:
| Category | Command | Description |
|---|---|---|
| motion | h | Left |
| j | Down | |
| k | Up | |
| l | Right | |
| w | Move forward to the beginning of the next word | |
| } | Jump to the next paragraph | |
| $ | Go to the end of the line | |
| operator | y | Yank text (copy) |
| d | Delete text and save to register | |
| c | Delete text, save to register, and start insert mode |
More generally, the syntax looks like: [count] + operator + motion. For example, 3dw would delete three words. 2yy would yank two lines. c$ would delete to the end of the line and start insert mode. dap would delete a paragraph.
Notice how, for some, the phonetic sound of the command matches the action. d for delete, y for yank, c for change. This is a mnemonic device to help you remember the commands. Delete a paragraph? dap. Change a word? caw.
Vim (The Program)
My friend Lucas rather aptly put:
Vim is the bliss of Ctrl C/V but applied to every facet of the editor.
Vim recognizes and eliminates the vast majority of typing inefficiencies. The result is blazingly fast precision, and a workflow that feels like a dance.
A contention I often receive is, “well, how do I debug in Vim?” You don’t. You have separate programs44 In the case of debugging, one might opt for gdb, the browser, or the python debugger, etc.. Each program is good at what it does. If you build a hodgepodge of functionality you end up with an IDE and that’s precisely what I’m trying to escape.
I will concede that Vim is not beginner friendly. There’s a learning curve. But Vim is exceptionally user friendly55 I’m paraphrasing ThePrimeagen, a Neovim enjoyer and popular streamer.. Once you get the hang of things, and it clicks, it’s really, really fun to use.
A lot of people recommend learning Vim Motions on your current editor first before switching to Vim full time. I didn’t do this, but it’s the path most people take. I’m a bit weird. I like to cold turkey and learn things from the ground up right away. But that’s a digression.
Neovim
Vim’s extensibility opens the door to something better. Enter: Neovim. Taken from the Neovim Charter:
Neovim is a refactor, and sometimes redactor, in the tradition of Vim. It is not a rewrite but a continuation and extension of Vim. Many clones and derivatives exist, some very clever—but none are Vim. Neovim is built for users who want the good parts of Vim, and more.
Neovim’s component-like plugin structure allows you to drop in and take out functionality easily. You can bring in an LSP, completions, snippets, git, and testing infrastructure. You can get new things too: Treesitter, Telescope FZF (fuzzy finding), Scoped grep string searches, and Harpoon anchor points to jump around.
What’s more, since YOU configure Neovim, you understand exactly how each tool works and how they fit together. Other editors and IDEs abstract this away.
I know I just said a lot of words. The takeaway is this: With Neovim, you know exactly why everything works the way it does, and you can make it work exactly the way you want it to. The possibilities are, in fact, endless.
Want functionality but there’s no plugin for it? Your config is in Lua and everything in Lua is easy. Make it, maintain it, push it to the Neovim community! The Neovim community is vibrant and full of passionate creators and maintainers who work hard to support the editor they love.
Wrapping up
A minimal, keyboard-centric workflow strips away distractions and lets you focus on the code. Tmux keeps your sessions organized. Vim gives you a language for editing text. Neovim lets you build exactly the editor you need. Yes, there’s a learning curve — but once these tools click, you’ll write code faster, understand your environment deeply, and actually enjoy the process.
And as always, remember: Life is like Vim: There are a lot of shortcuts and you should take them.