This is a new series highlighting best-of-breed utilities. We’re covering a wide range of utilities including tools that boost your productivity, help you manage your workflow, and lots more besides.
I spend an inordinate amount of time tapping away at the command line. My default shell is bash. Like other shells, bash keeps a history of all the commands I’ve typed. For bash, this history is stored in the ~/.bash_history file. While the up arrow traverses through your history, it’s often not an efficient way of locating commands. Step forward ctrl-r. Anything that reduces the number of keystrokes improves my efficiency.
Press ctrl-r. The shell prompt changes to (reverse-i-search). Now start typing the command or a part of the command. In the example below, I’ve typed ss. There’s no need to remember long complicated commands.
Even though ctrl-r is a time-saver, you may not be aware of an improved method of navigating through your shell history. The tool is called McFly. No, not the English pop band. Instead, it’s a tiny utility that replaces the functionality offered by ctrl-r with an intelligent search engine. Unlike bash’s ctrl-r, it also takes into account your working directory and the context of recently executed commands. The tool’s suggestions are prioritized in real time with a small neural network instead of a simple linear function.
McFly is written in the Rust programming language. If you want to help the project, you might want to learn Rust. We’ve compiled an article recommending great free books to learn Rust.
I distro hop more often than the lifespan of the common fruit fly (~ 40-50 days). Currently my distro of the month is Arch Linux. There’s a package for McFly in the Arch User Repository. This packages installs mcfly.bash into /usr/share/doc/mcfly/
After installing the package, edit ~/.bashrc and add the following lines to the end of the file:
if [[ -r /usr/share/doc/mcfly/mcfly.bash ]]; then
The directory path to mcfly.bash depends on how the software is installed.
Run . ~/.bashrc or restart your terminal emulator. The first time this bash script is run you receive the following notification:
McFly: Importing Bash history for the first time. This may take a minute or two…done.
Now you’re ready to efficiently navigate your shell history.
Complete list of articles in this series:
|tmux||A terminal multiplexer that offers a massive boost to your workflow|
|lnav||Advanced log file viewer for the small-scale; great for troubleshooting|
|Paperwork||Designed to simplify the management of your paperwork|
|Abricotine||Markdown editor with inline preview functionality|
|mdless||Formatted and highlighted view of Markdown files|
|fkill||Kill processes quick and easy|
|Tusk||An unofficial Evernote client with bags of potential|
|Ulauncher||Sublime application launcher|
|McFly||Navigate through your bash shell history|
|LanguageTool||Style and grammar checker for 30+ languages|
|peco||Simple interactive filtering tool that's remarkably useful|
|Liquid Prompt||Adaptive prompt for Bash & Zsh|
|Ananicy||Shell daemon created to manage processes’ IO and CPU priorities|
|cheat.sh||Community driven unified cheat sheet|
|ripgrep||Recursively search directories for a regex pattern|
|exa||A turbo-charged alternative to the venerable ls command|
|OCRmyPDF||Add OCR text layer to scanned PDFs|
|Watson||Track the time spent on projects|
|fontpreview||Quickly search and preview fonts|
|fd||Wonderful alternative to the venerable find|
|scrcpy||Display and control Android devices|