mcfly

mcfly

智能优化shell历史搜索 提升命令行效率

McFly是一款智能shell历史搜索工具,采用小型神经网络优化搜索结果。该工具考虑工作目录和近期命令上下文,实时为历史命令排序。McFly取代默认的ctrl-r搜索,提供全屏界面和更智能的结果,方便快速定位所需命令。支持Unicode,可记录命令退出状态、时间戳和执行目录,同时保留原有shell历史文件。McFly旨在提高命令行使用效率,为用户提供更精准的历史命令搜索体验。

McFly命令行工具历史搜索Shell智能搜索Github开源项目

寻找共同维护者: 最近我没有太多时间来维护这个项目。如果有人愿意加入成为共同维护者,我将不胜感激!

构建状态

McFly - 畅游你的shell历史记录

<img src="https://yellow-cdn.veclightyear.com/ab5030c0/0843645a-6bae-445a-bc37-de25c58aae07.png" alt="截图" width="400">

McFly用智能搜索引擎替换了你默认的ctrl-rshell历史搜索,它会考虑你的工作目录和最近执行命令的上下文。McFly的建议通过一个小型神经网络实时进行优先级排序。

简而言之:一个升级版的ctrl-r,其历史结果与你当前正在进行的工作高度相关。

特性

  • 重新绑定ctrl-r,调出全屏反向历史搜索,通过小型神经网络进行优先级排序。
  • 增强你的shell历史记录,在SQLite数据库中跟踪命令退出状态、时间戳和执行目录。
  • 同时保留你的普通shell历史文件,以便你随时可以停止使用McFly。
  • 全面支持Unicode。
  • 包含一个简单的操作,可以从McFly数据库和你的shell历史文件中删除任何历史项目。
  • 设计为可扩展,以便未来支持其他shell。
  • 用Rust编写,因此快速且安全。
  • 搜索时可以使用%匹配任意数量的字符。

优先级排序

McFly的关键特性是由实时运行的小型神经网络驱动的智能命令优先级排序。目标是让你想要运行的命令始终位于顶部建议之列。

在建议命令时,McFly会考虑以下因素:

  • 你运行命令的目录。你可能会在将来的同一目录中再次运行该命令。
  • 你在运行该命令之前输入的命令(即命令的执行上下文)。
  • 你运行该命令的频率。
  • 你最后一次运行该命令的时间。
  • 你是否在McFly中之前选择过该命令。
  • 命令的历史退出状态。你可能不想运行以前失败的命令。

安装

使用Homebrew安装(macOS或Linux)

  1. 安装mcfly

    brew install mcfly
  2. 将以下内容添加到你的~/.bashrc~/.zshrc~/.config/fish/config.fish文件的末尾:

    Bash:

    eval "$(mcfly init bash)"

    Zsh:

    eval "$(mcfly init zsh)"

    Fish:

    mcfly init fish | source
  3. 运行. ~/.bashrc / . ~/.zshrc / source ~/.config/fish/config.fish或重启你的终端模拟器。

使用Homebrew卸载

  1. 移除mcfly
    brew uninstall mcfly
  2. ~/.bashrc / ~/.zshrc / ~/.config/fish/config.fish中删除你添加的那些行。

使用MacPorts安装(macOS)

  1. 更新ports树

    sudo port selfupdate
  2. 安装mcfly

    sudo port install mcfly
  3. 根据情况,将以下内容添加到你的~/.bashrc~/.zshrc~/.config/fish/config.fish文件的末尾:

    Bash:

    eval "$(mcfly init bash)"

    Zsh:

    eval "$(mcfly init zsh)"

    Fish:

    mcfly init fish | source
  4. 运行. ~/.bashrc / . ~/.zshrc / source ~/.config/fish/config.fish或重启你的终端模拟器。

使用MacPorts卸载

  1. 移除mcfly
    sudo port uninstall mcfly
  2. ~/.bashrc / ~/.zshrc / ~/.config/fish/config.fish中删除你添加的那些行。

使用我们的安装脚本安装(macOS或Linux)

  1. curl -LSfs https://raw.githubusercontent.com/cantino/mcfly/master/ci/install.sh | sh -s -- --git cantino/mcfly(如果当前用户没有权限编辑/usr/local/bin,则使用sudo sh -s。)

  2. 根据情况,将以下内容添加到你的~/.bashrc~/.zshrc~/.config/fish/config.fish文件的末尾:

    Bash:

    eval "$(mcfly init bash)"

    Zsh:

    eval "$(mcfly init zsh)"

    Fish:

    mcfly init fish | source
  3. 运行. ~/.bashrc / . ~/.zshrc / source ~/.config/fish/config.fish或重启你的终端模拟器。

从GitHub手动安装(macOS或Linux)

  1. GitHub 下载最新版本

  2. 安装到 $PATH 中的某个位置。(例如,你可以在 ~/bin 创建一个目录,将 mcfly 复制到这个位置,然后在 .bashrc / .zshrc 中添加 export PATH="$PATH:$HOME/bin",或者对于 fish shell 运行 set -Ua fish_user_paths "$HOME/bin"。)

  3. 根据你使用的 shell,在 ~/.bashrc~/.zshrc~/.config/fish/config.fish 的末尾添加以下内容:

    Bash:

    eval "$(mcfly init bash)"

    Zsh:

    eval "$(mcfly init zsh)"

    Fish:

    mcfly init fish | source
  4. 运行 . ~/.bashrc / . ~/.zshrc / source ~/.config/fish/config.fish 或重启你的终端模拟器。

从源码手动安装(macOS、Linux 或 Windows)

  1. 安装 Rust 1.40 或更高版本

  2. 运行 git clone https://github.com/cantino/mcflycd mcfly

  3. 运行 cargo install --path .

  4. 确保 ~/.cargo/bin 在你的 $PATH 中。

  5. 根据你使用的 shell,在 ~/.bashrc~/.zshrc~/.config/fish/config.fish 或 powershell 的 $PROFILE 末尾添加以下内容:

    Bash:

    eval "$(mcfly init bash)"

    Zsh:

    eval "$(mcfly init zsh)"

    Fish:

    mcfly init fish | source

    Powershell Core (pwsh)

    Invoke-Expression -Command $(mcfly init powershell | out-string)
  6. 运行 . ~/.bashrc / . ~/.zshrc / source ~/.config/fish/config.fish / . $PROFILE 或重启你的终端模拟器。

通过 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 中的滚动历史,请确保取消勾选以下选项:

<img src="https://yellow-cdn.veclightyear.com/ab5030c0/97258ea5-03da-4775-9c04-706fbc59abea.jpeg" alt="iterm2 UI instructions">

导出历史记录

McFly 可以将命令历史导出到标准输出。

例如:

mcfly dump --since '2023-01-01' --before '2023-09-12 09:15:30'

将导出从 2023-01-01 00:00:00.02023-09-12 09:15:30(不包含)之间运行的命令,格式为 json。 你也可以通过 --format csv 指定导出格式为 csv

导出的每条命令包含以下字段:

  • cmd:运行的命令。
  • when_run:命令运行的时间(以你的本地时区为准)。

你可以不带任何参数导出所有命令历史:

mcfly dump

时间戳格式

McFly 使用 chrono-systemd-time-ng 解析时间戳。

chrono-systemd-time-ngsystemd.time 的非严格实现,有以下例外:

  • 所有时间跨度值必须附带时间单位。
  • 不支持时区后缀。
  • 不支持星期前缀。

McFly 用户只需了解在时间戳中不允许指定时区。 McFly 将始终使用你的本地时区

更多详情,请参考 chrono-systemd-time-ng 的文档

正则表达式

导出功能支持使用正则表达式过滤命令。 正则表达式语法遵循 crate regex

例如:

mcfly dump -r '^cargo run'

将导出所有以 cargo run 开头的命令。

你可以同时使用 -r/--regex 和时间选项。

例如:

mcfly dump -r '^cargo run' --since '2023-09-12 09:15:30'

将导出从 2023-09-12 09:15:30 开始运行的所有以 cargo run 开头的命令。

设置

可以通过环境变量设置多个选项。要设置选项,你应该将以下代码片段添加到 ~/.bashrc / ~/.zshrc / ~/.config/fish/config.fish 中。

亮色模式

要在亮色终端中切换颜色方案,设置环境变量 MCFLY_LIGHT

bash / zsh:

export MCFLY_LIGHT=TRUE

fish:

set -gx MCFLY_LIGHT TRUE

powershell:

$env: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

powershell:

$env:MCFLY_KEY_SCHEME="vim"

模糊搜索

要启用模糊搜索,请将MCFLY_FUZZY设置为一个整数。0表示关闭;数值越高,越倾向于更短的匹配。目前2-5的范围效果较好;可以尝试几个数值,并报告最适合你的设置

bash / zsh:

export MCFLY_FUZZY=2

fish:

set -gx MCFLY_FUZZY 2

powershell:

$env:MCFLY_FUZZY=2

结果数量

要更改显示的最大结果数,请设置MCFLY_RESULTS(默认值:10)。

bash / zsh:

export MCFLY_RESULTS=50

fish:

set -gx MCFLY_RESULTS 50

powershell:

$env:MCFLY_RESULTS=50

无需确认删除

要无需确认即可删除,请将MCFLY_DELETE_WITHOUT_CONFIRM设置为true。

bash / zsh:

export MCFLY_DELETE_WITHOUT_CONFIRM=true

fish:

set -gx MCFLY_DELETE_WITHOUT_CONFIRM true

powershell:

$env:MCFLY_DELETE_WITHOUT_CONFIRM="true"

界面视图

要更改界面视图,请设置MCFLY_INTERFACE_VIEW(默认值:TOP)。 可用选项:TOPBOTTOM

bash / zsh:

export MCFLY_INTERFACE_VIEW=BOTTOM

fish:

set -gx MCFLY_INTERFACE_VIEW BOTTOM

powershell:

$env:MCFLY_INTERFACE_VIEW="BOTTOM"

禁用菜单界面

要禁用菜单界面,请设置环境变量MCFLY_DISABLE_MENU

bash / zsh:

export MCFLY_DISABLE_MENU=TRUE

fish:

set -gx MCFLY_DISABLE_MENU TRUE

powershell:

$env:MCFLY_DISABLE_MENU=true

结果排序

要更改显示结果的排序方式,请设置MCFLY_RESULTS_SORT(默认值:RANK)。 可选值为RANKLAST_RUN

bash / zsh:

export MCFLY_RESULTS_SORT=LAST_RUN

fish:

set -gx MCFLY_RESULTS_SORT LAST_RUN

powershell:

$env:MCFLY_RESULTS_SORT="LAST_RUN"

自定义提示符

要更改提示符,请设置MCFLY_PROMPT(默认值:$)。

bash / zsh:

export MCFLY_PROMPT="❯"

fish:

set -gx MCFLY_PROMPT "❯"

powershell:

$env:MCFLY_PROMPT=">"

注意,只允许单字符提示符。将MCFLY_PROMPT设置为"<str>"会将其重置为默认提示符。

数据库位置

McFly将其SQLite数据库存储在操作系统的标准位置。在OS X上,这是~/Library/Application Support/McFly;在Linux上,是$XDG_DATA_DIR/mcfly/history.db(默认为~/.local/share/mcfly/history.db);在Windows上,是%LOCALAPPDATA%\McFly\data\history.db。为了兼容旧版本,如果~/.mcfly/存在,则会使用该目录。

启动缓慢

如果你的历史数据库非常大,并且注意到McFly启动缓慢,你可以将MCFLY_HISTORY_LIMIT设置为类似10000的值,以限制搜索时考虑的记录数。在这个例子中,McFly只会搜索最新的10,000条记录。

Bash TIOCSTI

从Linux内核版本6.2开始,一些系统禁用了TIOCSTI(McFly之前用于写入选定命令)。McFly通过使用两个"虚拟"键绑定来解决这个问题,默认为ctrl-x 1ctrl-x 2。如果你将其中任何一个用于其他目的,你可以分别设置MCFLY_BASH_SEARCH_KEYBINDINGMCFLY_BASH_ACCEPT_LINE_KEYBINDING为你没有使用的其他键。如果你更喜欢使用旧的TIOCSTI行为,你可以在系统上将sysctl变量dev.tty.legacy_tiocsti设置为1,并将bash变量MCFLY_BASH_USE_TIOCSTI设置为1

HISTTIMEFORMAT

McFly目前不解析或使用HISTTIMEFORMAT

可能的未来功能

  • 在README中添加屏幕录像。
  • 学习常用命令选项并在建议UI中自动完成它们?
  • 在生成模板匹配字符串时对命令行参数进行排序。
  • 可能的优先级改进:
    • 交叉验证和显式训练集选择。
    • 学习命令嵌入

开发

贡献

欢迎贡献和错误修复!然而,我们可能不会合并那些显著增加项目复杂性的PR。如果你有疑问,可以随时开一个issue询问。

运行测试

cargo test

发布(@cantino的注释)

  1. 编辑Cargo.toml并更新版本号。
  2. 编辑CHANGELOG.txt
  3. 运行cargo clippycargo fmt
  4. 重新编译(cargo build)并测试(cargo test
  5. git add -p
  6. git ci -m 'Bumping to vx.x.x'
  7. git tag vx.x.x
  8. git push origin head --tags
  9. 等待构建完成。
  10. 在Github上编辑新的Release。
  11. cargo publish
  12. 待定:更新homebrew-core Formula,地址:https://github.com/Homebrew/homebrew-core/blob/master/Formula/m/mcfly.rb 旧版:
  13. 编辑 pkg/brew/mcfly.rb 并更新版本号和SHA值。(使用 shasum -a 256 ... 命令)
  14. 同时也要编辑 ../homebrew-mcfly/pkg/brew/mcfly.rb
    1. 执行 cp pkg/brew/mcfly.rb ../homebrew-mcfly/pkg/brew/mcfly.rb
    2. 使用以下命令比较差异:diff ../homebrew-mcfly/pkg/brew/mcfly.rb ../mcfly/pkg/brew/mcfly.rb ; diff ../homebrew-mcfly/HomebrewFormula/mcfly.rb ../mcfly/HomebrewFormula/mcfly.rb
  15. 执行 git add -p && git ci -m 'Update homebrew' && git push
  16. 执行 cd ../homebrew-mcfly && git add -p && git ci -m 'Update homebrew' && git push && cd ../mcfly

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多