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 在 命令行工具 中排名
201 每月下载次数
53KB
1K SLoC
fixit
fixit
是一个终端应用程序,用于修复命令中的错误,灵感来源于 The Fuck。它也被设计为 非常快(更多关于这一点在“为什么?”部分中介绍)。
查看贡献指南这里。如果您想帮助 fixit
前进,请查看路线图。
它是如何工作的?
当您运行 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_64
和 aarch64
的预构建二进制文件
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转义序列。这将有助于确定命令输出边界。
- 通过终端模拟器/多路复用器API
- 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