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:
|Abricotine||Markdown editor with inline preview functionality|
|AES Crypt||Encrypt files using the Advanced Encryption Standard|
|Ananicy||Shell daemon created to manage processes’ IO and CPU priorities|
|broot||Next gen tree explorer and customizable launcher|
|cheat.sh||Community driven unified cheat sheet|
|CopyQ||Advanced clipboard manager|
|croc||Securely transfer files and folders from the command-line|
|Deskreen||Live streaming your desktop to a web browser|
|duf||Disk usage utility with more polished presentation than the classic df|
|exa||A turbo-charged alternative to the venerable ls command|
|Extension Manager||Browse, install and manage GNOME Shell Extensions|
|fd||Wonderful alternative to the venerable find|
|fkill||Kill processes quick and easy|
|fontpreview||Quickly search and preview fonts|
|horcrux||File splitter with encryption and redundancy|
|Kooha||Simple screen recorder|
|Imagine||A simple yet effective image optimization tool|
|LanguageTool||Style and grammar checker for 30+ languages|
|Liquid Prompt||Adaptive prompt for Bash & Zsh|
|lnav||Advanced log file viewer for the small-scale; great for troubleshooting|
|lsd||Like exa, lsd is a turbo-charged alternative to ls|
|McFly||Navigate through your bash shell history|
|mdless||Formatted and highlighted view of Markdown files|
|OCRmyPDF||Add OCR text layer to scanned PDFs|
|Paperwork||Designed to simplify the management of your paperwork|
|PDF Mix Tool||Perform common editing operations on PDF files|
|peco||Simple interactive filtering tool that's remarkably useful|
|ripgrep||Recursively search directories for a regex pattern|
|scrcpy||Display and control Android devices|
|Sticky||Simulates the traditional “sticky note” style stationery on your desktop|
|tldr||Simplified and community-driven man pages|
|tmux||A terminal multiplexer that offers a massive boost to your workflow|
|Tusk||An unofficial Evernote client with bags of potential|
|Ulauncher||Sublime application launcher|
|Watson||Track the time spent on projects|
|Whoogle Search||Self-hosted and privacy-focused metasearch engine|