浏览您的 shell 历史记录工具 mcfly
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/cantino/mcfly
寻求共同维护者:这几天我没有太多时间来维护这个项目。如果有人愿意加入并成为共同维护者,我们将不胜感激!
McFly - 浏览你的 shell 历史

McFly 将您的默认 ctrl-r shell 历史搜索替换为智能搜索引擎,该引擎会考虑您的工作目录和最近执行的命令的上下文。 McFly 的建议通过小型神经网络实时进行优先排序。
TL;DR:升级后的 ctrl-r 历史结果对您当前的工作有意义。
特征
- 重新绑定
ctrl-r以显示全屏反向历史搜索,该搜索优先使用小型神经网络。 - 增强您的 shell 历史记录以跟踪 SQLite 数据库中的命令退出状态、时间戳和执行目录。
- 还维护您的正常 shell 历史文件,以便您可以随时停止使用 McFly。
- 始终支持 Unicode。
- 包括一个简单的操作,可以从 McFly 数据库和您的 shell 历史文件中清除任何历史项目。
- 设计为将来可扩展到其他 shell。
- 用 Rust 编写,所以它又快又安全。
- 您可以在搜索时键入
%以匹配任意数量的字符。
优先次序
McFly 的关键特性是由实时运行的小型神经网络支持的智能命令优先级排序。 目标是让您要运行的命令始终成为最重要的建议之一。
在建议命令时,McFly 会考虑:
- 运行命令的目录。 将来您可能会在同一目录中运行该命令。
- 您在命令之前键入的命令(例如,命令的执行上下文)。
- 您运行命令的频率。
- 上次运行命令时。
- 如果您之前在 McFly 中选择过该命令。
- 命令的历史退出状态。 您可能不想运行旧的失败命令。
安装
使用 Homebrew 安装(在 OS X 或 Linux 上)
- 安装
tap:brew tap cantino/mcfly - 安装
mcfly:brew install cantino/mcfly/mcfly - 将以下内容添加到您的
~/.bashrc,~/.zshrc或~/.config/fish/config.fish文件的末尾: 重击:eval "$(mcfly init bash)"Zsh:eval "$(mcfly init zsh)"鱼:mcfly init fish | source - 运行
. ~/.bashrc//. ~/.zshrc或source ~/.config/fish/config.fish重新启动您的终端仿真器。
使用 Homebrew 卸载
- 删除
mcfly:brew uninstall mcfly - 删除
tap:brew untap cantino/mcfly - 删除您添加到
~/.bashrc/~/.zshrc/的行~/.config/fish/config.fish。
使用 MacPorts 安装(在 OS X 上)
- 更新端口树
sudo port selfupdate - 安装
mcfly:sudo port install mcfly - 根据需要,将以下内容添加到您的
~/.bashrc、~/.zshrc或~/.config/fish/config.fish文件的末尾: 重击:eval "$(mcfly init bash)"Zsh:eval "$(mcfly init zsh)"鱼:mcfly init fish | source - 运行
. ~/.bashrc//. ~/.zshrc或source ~/.config/fish/config.fish重新启动您的终端仿真器。
使用 MacPorts 卸载
- 删除
mcfly:sudo port uninstall mcfly - 删除您添加到
~/.bashrc/~/.zshrc/的行~/.config/fish/config.fish。
使用我们的安装脚本安装
curl -LSfs https://raw.githubusercontent.com/cantino/mcfly/master/ci/install.sh | sh -s -- --git cantino/mcfly- 分别将以下内容添加到您的
~/.bashrc、~/.zshrc或~/.config/fish/config.fish文件的末尾: 重击:eval "$(mcfly init bash)"Zsh:eval "$(mcfly init zsh)"Fish:mcfly init fish | source - 运行
. ~/.bashrc//. ~/.zshrc或source ~/.config/fish/config.fish重新启动您的终端仿真器。
从 GitHub 手动安装
- 从 GitHub下载 最新版本 。
- 安装到您的
$PATH. (例如,您可以在 处创建一个目录~/bin,复制mcfly到该位置,然后添加export PATH="$PATH:$HOME/bin"到您的.bashrc/.zshrc,或者运行set -Ua fish_user_paths "$HOME/bin"for fish。) - 分别将以下内容添加到您的
~/.bashrc、~/.zshrc或~/.config/fish/config.fish文件的末尾: 重击:eval "$(mcfly init bash)"Zsh:eval "$(mcfly init zsh)"Fish:mcfly init fish | source - 运行
. ~/.bashrc//. ~/.zshrc或source ~/.config/fish/config.fish重新启动您的终端仿真器。
从源代码手动安装
- 安装 Rust 1.40 或更高版本
- 运行
git clone https://github.com/cantino/mcfly并cd mcfly - 跑步
cargo install --path . - 确保
~/.cargo/bin在您的$PATH. - 分别将以下内容添加到您的
~/.bashrc、~/.zshrc或~/.config/fish/config.fish文件的末尾: 重击:eval "$(mcfly init bash)"Zsh:eval "$(mcfly init zsh)"Fish:mcfly init fish | source - 运行
. ~/.bashrc//. ~/.zshrc或source ~/.config/fish/config.fish重新启动您的终端仿真器。
通过 Zinit安装
- 将以下代码添加到您的 zshrc。
zinit ice lucid wait"0a" from"gh-r" as"program" atload'eval "$(mcfly init zsh)"' zinit light cantino/mcfly - 它将下载 mcfly 并为您安装。
$(mcfly init zsh)将在提示后执行
iTerm2
为了避免 McFly 的 UI 弄乱你在 iTerm2 中的回滚历史记录,请确保未选中此选项:

设置
可以通过环境变量设置许多设置。 要设置设置,您应该将以下代码片段添加到您的 ~/.bashrc / ~/.zshrc / ~/.config/fish/config.fish 中。
灯光模式
要交换用于轻型终端的配色方案,请设置环境变量 MCFLY_LIGHT 。
bash/zsh:
export MCFLY_LIGHT=TRUE
Fish:
set -gx MCFLY_LIGHT TRUE
提示:在 macOS 上,您可以使用以下代码段来根据系统范围的设置配置配色方案:
bash/zsh:
if [[ "$(defaults read -g AppleInterfaceStyle 2&>/dev/null)" != "Dark" ]]; then
export MCFLY_LIGHT=TRUE
fi
VIM 密钥方案
默认情况下,Mcfly 使用 emacs 受启发的密钥方案。 如果您想切换到 vim 启发式密钥方案,请设置环境变量 MCFLY_KEY_SCHEME 。
bash/zsh:
export MCFLY_KEY_SCHEME=vim
Fish:
set -gx MCFLY_KEY_SCHEME vim
模糊搜索
要启用模糊搜索,请设置 MCFLY_FUZZY 为整数。 0 关闭; 较高的数字倾向于较短的比赛。 到目前为止,在 2-5 范围内的值可以获得良好的结果; 尝试一些并 报告最适合您的方法 !
bash/zsh:
export MCFLY_FUZZY=2
Fish:
set -gx MCFLY_FUZZY 2
结果数
要更改显示的最大结果数,请设置 MCFLY_RESULTS (默认值:10)。
bash/zsh:
export MCFLY_RESULTS=50
Fish:
set -gx MCFLY_RESULTS 50
界面视图
要更改界面视图,请设置 MCFLY_INTERFACE_VIEW (默认值:) TOP 。 可用选项: TOP 和 BOTTOM
bash/zsh:
export MCFLY_INTERFACE_VIEW=BOTTOM
Fish:
set -gx MCFLY_INTERFACE_VIEW BOTTOM
禁用菜单界面
要禁用菜单界面,请设置环境变量 MCFLY_DISABLE_MENU 。
bash/zsh:
export MCFLY_DISABLE_MENU=TRUE
Fish:
set -gx MCFLY_DISABLE_MENU TRUE
结果排序
要更改显示结果的排序,请设置 MCFLY_RESULTS_SORT (默认值:RANK)。 可能的值 RANK 和 LAST_RUN
bash/zsh:
export MCFLY_RESULTS_SORT=LAST_RUN
Fish:
set -gx MCFLY_RESULTS_SORT LAST_RUN
数据库位置
McFly 将其 SQLite 数据库存储在操作系统的标准位置。 在 OS X 上,这是在 ~/Library/Application Support/McFly Linux 上 $XDG_DATA_DIR/mcfly/history.db (默认是 ~/.local/share/mcfly/history.db )。 对于遗留支持,如果 ~/.mcfly/ 存在,则使用它。
启动慢
如果您有一个非常大的历史数据库并且您注意到 McFly 启动缓慢,您可以设置 MCFLY_HISTORY_LIMIT 为 10000 之类的值来限制搜索时考虑的记录数。 在此示例中,McFly 将仅搜索最新的 10,000 个条目。
历史时间格式
McFly 目前不解析或使用 HISTTIMEFORMAT .
未来可能的功能
- 向 README 添加截屏视频。
- 了解常用命令选项并在建议 UI 中自动完成它们?
- 在提出模板匹配字符串时对命令行参数进行排序。
- 可能的优先级改进:
- 交叉验证和显式训练集选择。
- 学习命令嵌入