McFly replaces your default ctrl-r shell history search with an intelligent search engine that takes into account
your working directory and the context of recently executed commands. McFly's suggestions are prioritized
in real time with a small neural network.
TL;DR: an upgraded ctrl-r where history results make sense for what you're working on right now.
- Rebinds
ctrl-rto bring up a full-screen reverse history search prioritized with a small neural network. - Augments your shell history to track command exit status, timestamp, and execution directory in a SQLite database.
- Maintains your normal shell history file as well so that you can stop using McFly whenever you want.
- Unicode support throughout.
- Includes a simple action to scrub any history item from the McFly database and your shell history files.
- Designed to be extensible for other shells in the future.
- Written in Rust, so it's fast and safe.
The key feature of McFly is smart command prioritization powered by a small neural network that runs in real time. The goal is for the command you want to run to always be one of the top suggestions.
When suggesting a command, McFly takes into consideration:
- The directory where you ran the command. You're likely to run that command in the same directory in the future.
- What commands you typed before the command (e.g., the command's execution context).
- How often you run the command.
- When you last ran the command.
- If you've selected the command in McFly before.
- The command's historical exit status. You probably don't want to run old failed commands.
-
Install the tap:
brew tap cantino/mcfly https://github.com/cantino/mcfly
-
Install
mcfly:brew install mcfly
-
Add the following to the end of your
~/.bashrc,~/.zshrc, or~/.config/fish/config.fishfile, as appropriate, changing/usr/localto yourbrew --prefixif needed:Bash:
eval "$(mcfly init bash)"
Zsh:
eval "$(mcfly init zsh)"
Fish:
mcfly init fish | source
-
Run
. ~/.bashrc/. ~/.zshrc/source ~/.config/fish/config.fishor restart your terminal emulator.
- Remove
mcfly:brew uninstall mcfly
- Remove the tap:
brew untap cantino/mcfly
- Remove the lines you added to
~/.bashrc/~/.zshrc/~/.config/fish/config.fish.
-
Update the ports tree
sudo port selfupdate
-
Install
mcfly:sudo port install mcfly
-
Add the following to the end of your
~/.bashrc,~/.zshrc, or~/.config/fish/config.fishfile, as appropriate:Bash:
eval "$(mcfly init bash)"
Zsh:
eval "$(mcfly init zsh)"
Fish:
mcfly init fish | source
-
Run
. ~/.bashrc/. ~/.zshrc/source ~/.config/fish/config.fishor restart your terminal emulator.
- Remove
mcfly:sudo port uninstall mcfly
- Remove the lines you added to
~/.bashrc/~/.zshrc/~/.config/fish/config.fish.
-
Download the latest release from GitHub.
-
Install to a location in your
$PATH. (For example, you could create a directory at~/bin, copymcflyto this location, and addexport PATH="$PATH:$HOME/bin"to your.bashrc/.zshrc, or runset -Ua fish_user_paths "$HOME/bin"for fish.) -
Add the following to the end of your
~/.bashrc,~/.zshrc, or~/.config/fish/config.fishfile, respectively:Bash:
eval "$(mcfly init bash)"
Zsh:
eval "$(mcfly init zsh)"
Fish:
mcfly init fish | source
-
Run
. ~/.bashrc/. ~/.zshrc/source ~/.config/fish/config.fishor restart your terminal emulator.
-
Run
git clone https://github.com/cantino/mcflyandcd mcfly -
Run
cargo install --path . -
Ensure
~/.cargo/binis in your$PATH. -
Add the following to the end of your
~/.bashrc,~/.zshrc, or~/.config/fish/config.fishfile, respectively:Bash:
eval "$(mcfly init bash)"
Zsh:
eval "$(mcfly init zsh)"
Fish:
mcfly init fish | source
-
Run
. ~/.bashrc/. ~/.zshrc/source ~/.config/fish/config.fishor restart your terminal emulator.
To avoid McFly's UI messing up your scrollback history in iTerm2, make sure this option is unchecked:
A number of settings can be set via environment variables. To set a setting you should add the following snippets to your ~/.bashrc / ~/.zshrc / ~/.config/fish/config.fish.
To swap the color scheme for use in a light terminal, set the environment variable MCFLY_LIGHT.
bash / zsh:
export MCFLY_LIGHT=TRUEfish:
set -gx MCFLY_LIGHT TRUEBy default Mcfly uses an emacs inspired key scheme. If you would like to switch to the vim inspired key scheme, set the environment variable MCFLY_KEY_SCHEME.
bash / zsh:
export MCFLY_KEY_SCHEME=vimfish:
set -gx MCFLY_KEY_SCHEME vimTo enable fuzzy searching, set MCFLY_FUZZY.
bash / zsh:
export MCFLY_FUZZY=truefish:
set -gx MCFLY_FUZZY trueIf you have a very large history database and you notice that McFly launches slowly, you can set MCFLY_HISTORY_LIMIT to something like 10000 to limit how many records are considered when searching. In this example, McFly would search only the latest 10,000 entries.
- Add a screencast to README.
- Learn common command options and autocomplete them in the suggestion UI?
- Sort command line args when coming up with the template matching string.
- Possible prioritization improvements:
- Cross validation & explicit training set selection.
- Learn command embeddings
cargo test
- Edit
Cargo.tomland bump the version. - Edit CHANGELOG.txt
- Recompile (
cargo build). git add -pgit ci -m 'Bumping to vx.x.x'git tag vx.x.xgit push origin head --tags- Let the build finish.
- Edit the new Release on Github.
- Edit
pkg/brew/mcfly.rband update the version and SHAs. (shasum -a 256 ...) git pushcargo publish