Excellent Utilities: McFly – navigate through your shell history

Last Updated on May 22, 2022

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
AES CryptEncrypt files using the Advanced Encryption Standard
AnanicyShell daemon created to manage processes’ IO and CPU priorities
brootNext gen tree explorer and customizable launcher
CerebroFast application launcher
cheat.shCommunity driven unified cheat sheet
CopyQAdvanced clipboard manager
crocSecurely transfer files and folders from the command-line
DeskreenLive streaming your desktop to a web browser
dufDisk usage utility with more polished presentation than the classic df
ezaA turbo-charged alternative to the venerable ls command
Extension ManagerBrowse, install and manage GNOME Shell Extensions
fdWonderful alternative to the venerable find
fkillKill processes quick and easy
fontpreviewQuickly search and preview fonts
horcruxFile splitter with encryption and redundancy
KoohaSimple screen recorder
KOReaderDocument viewer for a wide variety of file formats
ImagineA simple yet effective image optimization tool
LanguageToolStyle and grammar checker for 30+ languages
Liquid PromptAdaptive prompt for Bash & Zsh
lnavAdvanced log file viewer for the small-scale; great for troubleshooting
lsdLike exa, lsd is a turbo-charged alternative to ls
Mark TextSimple and elegant Markdown editor
McFlyNavigate through your bash shell history
mdlessFormatted and highlighted view of Markdown files
notiMonitors a command or process and triggers a notification
NushellFlexible cross-platform shell with a modern feel
nvitopGPU process management for NVIDIA graphics cards
OCRmyPDFAdd OCR text layer to scanned PDFs
Oh My ZshFramework to manage your Zsh configuration
PaperworkDesigned to simplify the management of your paperwork
pastelGenerate, analyze, convert and manipulate colors
PDF Mix ToolPerform common editing operations on PDF files
pecoSimple interactive filtering tool that's remarkably useful
ripgrepRecursively search directories for a regex pattern
RnoteSketch and take handwritten notes
scrcpyDisplay and control Android devices
StickySimulates the traditional “sticky note” style stationery on your desktop
tldrSimplified and community-driven man pages
tmuxA terminal multiplexer that offers a massive boost to your workflow
TuskAn unofficial Evernote client with bags of potential
UlauncherSublime application launcher
WatsonTrack the time spent on projects
Whoogle SearchSelf-hosted and privacy-focused metasearch engine
ZellijTerminal workspace with batteries included
Notify of

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

Inline Feedbacks
View all comments