Utilities

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.

bash-ctrl-r

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.

Installation

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
fi

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
AbricotineMarkdown editor with inline preview functionality
AnanicyShell daemon created to manage processes’ IO and CPU priorities
brootNext gen tree explorer and customizable launcher
cheat.shCommunity driven unified cheat sheet
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
exaA 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
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
McFlyNavigate through your bash shell history
mdlessFormatted and highlighted view of Markdown files
OCRmyPDFAdd OCR text layer to scanned PDFs
PaperworkDesigned to simplify the management of your paperwork
PDF Mix ToolPerform common editing operations on PDF files
pecoSimple interactive filtering tool that's remarkably useful
ripgrepRecursively search directories for a regex pattern
scrcpyDisplay and control Android devices
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
Share this article

Share your Thoughts

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