Excellent Utilities: McFly – navigate through your shell history

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
source /usr/share/doc/mcfly/mcfly.bash

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.

Next page: Page 2 – In Operation

Pages in this article:
Page 1 – Introduction / Installation
Page 2 – In Operation
Page 3 – Other Features
Page 4 – Summary

Complete list of articles in this series:

Excellent Utilities
tmuxA terminal multiplexer that offers a massive boost to your workflow
lnavAdvanced log file viewer for the small-scale; great for troubleshooting
PaperworkDesigned to simplify the management of your paperwork
AbricotineMarkdown editor with inline preview functionality
mdlessFormatted and highlighted view of Markdown files
fkillKill processes quick and easy
TuskAn unofficial Evernote client with bags of potential
UlauncherSublime application launcher
McFlyNavigate through your bash shell history
LanguageToolStyle and grammar checker for 30+ languages
pecoSimple interactive filtering tool that's remarkably useful
Liquid PromptAdaptive prompt for Bash & Zsh
AnanicyShell daemon created to manage processes’ IO and CPU priorities
cheat.shCommunity driven unified cheat sheet
ripgrepRecursively search directories for a regex pattern
exaA turbo-charged alternative to the venerable ls command
OCRmyPDFAdd OCR text layer to scanned PDFs
WatsonTrack the time spent on projects
fontpreviewQuickly search and preview fonts
fdWonderful alternative to the venerable find
Share this article

Share your Thoughts

This site uses Akismet to reduce spam. Learn how your comment data is processed.