5 个不稳定版本

0.6.0 2024年8月20日
0.5.1 2024年8月18日
0.5.0 2024年8月16日
0.4.0 2024年7月3日

123命令行工具 中排名

Download history 244/week @ 2024-07-02 4/week @ 2024-07-09 201/week @ 2024-08-13

201 每月下载次数

MIT 许可证

53KB
1K SLoC

fixit

GitHub Release Build status Coverage Status

Open in GitHub Codespaces

fixit 是一个终端应用程序,用于修复命令中的错误,灵感来源于 The Fuck。它也被设计为 非常快(更多关于这一点在“为什么?”部分中介绍)。

查看贡献指南这里。如果您想帮助 fixit 前进,请查看路线图

demo

它是如何工作的?

当您运行 fix 命令时,它会从 shell 历史记录中获取最后一个命令。然后发生以下两种情况之一

  • 重新运行之前的命令以获取其输出。
  • 通过您的终端模拟器/多路复用器 API(在 tmux、kitty 和 WezTerm 上可用)检索之前命令的输出。

一旦 fixit 获取了命令输出,它就会通过一系列规则来运行命令及其输出,以确定适当的修复方案。在您选择了一个修复方案后,它将自动运行并将其添加到您的 shell 历史记录中。

安装

任何使用 apt 的 Linux 发行版(Ubuntu、Debian、Mint 等)

echo "deb [arch=$(dpkg --print-architecture) trusted=yes] https://eugene-babichenko.github.io/fixit/ppa ./" | sudo tee /etc/apt/sources.list.d/fixit.list > /dev/null
sudo apt update
sudo apt install fixit

对于 Arch Linux 用户,fixit 在 AUR(从源代码构建)上可用

yay -S fixit

还提供了 x86_64aarch64 的预构建二进制文件

yay -S fixit-bin

使用 Homebrew/Linuxbrew

brew install eugene-babichenko/fixit/fixit

使用 Cargo 安装(您需要 Rust 工具链

cargo install fixit-cli

您还可以从 发布 中下载 Linux(静态二进制文件)和 macOS 的预构建二进制文件。

Shell 设置

将相应的行添加到您的 shell 配置文件中

bash:

eval "$(fixit init bash)"

zsh:

eval "$(fixit init zsh)"

fish:

fixit init fish | source

终端模拟器/多路复用器设置

kitty

如果您在 Kitty 中使用 tmux,则可以跳过此部分。快速完成与 tmux 一起使用时是即插即用的。

这是可选的,但如果没有这个,fixit 将回退到仅重新运行命令,这将变得更慢。

要使快速完成功能正常工作,您需要启用远程控制。这是必需的,因为此应用程序使用kitty @ get-text来检索命令输出。为了获得最佳性能和稳定性,建议您设置shell集成

其他软件

您无需进行任何额外的设置。

使用方法

有一个损坏的命令吗?只需键入fix

配置

初始化

您可以通过向init命令提供--name参数来更改别名名称。

fixit init --name f fish | source

这将为名为f的命令生成,而不是fix

修复

环境变量

  • FIXIT_PAGE_SIZE调节每页显示的建议数量。默认值是5
  • FIXIT_QUICK_ENABLE - 当在支持的终端模拟器/多路复用器中运行时,尝试使用其API获取命令输出,而不是重新运行给定的命令。这通常要快得多,因此建议您保持默认设置,除非您遇到与查找修复相关的任何错误。可能存在问题的组合是支持的终端模拟器与不受支持的复用器,当失败命令不在屏幕上时。默认值为true。传递false以禁用。
  • FIXIT_QUICK_SEARCH_DEPTH设置从滚动缓冲区获取的行数,以及我们在屏幕上看到的行数。默认值是1000

日志记录

环境变量

  • FIXIT_LOG控制日志记录。默认日志级别是error。出于开发目的,您通常需要启用debug级别(FIXIT_LOG=debug)。记录器非常灵活,您可以从中了解更多信息env_logger文档页面
  • FIXIT_LOG_STYLE控制记录器样式。有关此信息,也请参阅env_logger文档。

可用规则

  • brew_update_upgrade - 在尝试更新Homebrew软件包时,用brew upgrade替换brew update
  • cargo_install_cwd - 修复不带参数的cargo install(它需要--path)。
  • cargo_wrong_command - 修复拼写错误的cargo命令。
  • command_not_found - 通过$PATH搜索拼写错误的命令。
  • cp_cwd - 当cp只有一个参数时,您可能想要将其复制到当前目录?
  • cp_dir - 在尝试复制目录时,向cp添加-R
  • git_add_all_lowercase - 将 git add -a 修改为 git add -A.
  • git_commit_no_changes - 建议使用 git commit -a.
  • git_no_upstream - 推送时设置上游分支。
  • git_wrong_command - 修复拼写的git命令错误。
  • mkdir_missing_parent - 建议使用 mkdir -p 创建缺失的中间目录。
  • rm_dir - 在尝试删除目录时,向 rm 添加 -r
  • sudo - 当执行命令权限被拒绝时,在命令前添加 sudo

路线图

  • 自动更新检查
  • 处理复杂命令(例如:包含环境变量指定的命令:FOO=bar command -arg
  • 快速建议,无需重新运行命令
    • 通过终端模拟器/多路复用器API
      • tmux
      • kitty
        • 通过shell集成获取最后一个命令输出。
      • WezTerm
      • iTerm2
      • Zellij
    • 通过运行任意命令来获取终端日志。
    • 通过运行任意命令来获取上一个命令的输出。
    • 将shell包装起来以读取其日志(类似于The Fuck即时模式)。
    • 识别OSC 133转义序列。这将有助于确定命令输出边界。
  • shell支持
    • bash
    • zsh
    • fish
    • Powershell
  • 自动测试
    • 支持shells的集成测试(无头)
    • 支持模拟器/多路复用器的集成测试。
  • 可选地从历史记录中删除失败的命令。
  • 打包
    • Homebrew
    • AUR
    • deb
    • rpm
    • NixOS
    • 其他

为什么?

虽然The Fuck无疑是出色的,但它确实有一个致命的缺陷:它是用Python编写的。尽管如此,Python速度较慢,这以两种方式损害了用户体验

  • 因为它是用Python编写的,所以在shell启动时会产生明显的、令人烦恼的减速。
  • 修复本身可能相当慢。

除此之外,有时系统范围内的Python包会损坏。事实上,在我编写这个页面并尝试进行基准测试的时候,这发生在我身上。

fixit 的目的是通过用本地编译语言重写来解决这一问题。具体来说,是用Rust。这消除了Python解释器的开销,并打开了利用所有CPU核心搜索修复的可能性。

关于“即时模式”

“The Fuck”有一个名为“即时模式”的功能,它将你的shell包装起来,以记录输出并读取它,而不是重新运行之前的命令。虽然这种方法确实很有用,并且具有在每个本地终端模拟器、远程SSH以及无需任何额外终端配置的情况下都可用的好处,但我不太喜欢它。这种方式可能会搞乱你的shell输出,并创建一个嵌套进程的混乱。我并不完全反对它,如果有人为我实现它,我会非常乐意,但对于这个应用程序,如果可用的首选方式是与终端模拟器API集成。我所知道的有适当API的包括WezTerm、kitty和iTerm2。这样,你不会在shell和用户之间创建额外的层,而回退到仅重新运行命令也非常直接,无需编辑shell配置文件。

依赖项

~9–19MB
~272K SLoC