本页介绍了如何在 TheFuck 中创建和使用自定义规则。自定义规则允许您通过定义特定命令行错误的自定义纠正模式来扩展 TheFuck 的功能。有关 TheFuck 内置规则的信息,请参阅内置规则。
TheFuck 通过分析失败的命令并将其与一组规则进行匹配来工作。每条规则都定义了一个用于识别特定错误以及为这些错误提供纠正的模式。当您在出现错误后键入 fuck 时,TheFuck 会应用这些规则来查找合适的纠正。
自定义规则与内置规则一起集成到规则匹配过程中,使您能够为工作流特定的工具和错误模式添加支持。
来源:thefuck/corrector.py22-37 thefuck/corrector.py81-92
要创建自定义规则,您需要在 ~/.config/thefuck/rules 目录中创建一个 Python 文件。文件名(不带 .py 扩展名)将成为规则的名称。
每个规则文件必须至少包含两个函数
来源:README.md389-390 README.md394-398
match(command):确定规则是否适用于失败的命令。
Command 对象作为输入True,否则返回 Falseget_new_command(command):生成修正后的命令。
Command 对象作为输入此外,规则还可以包含
side_effect(old_command, fixed_command):规则应用时执行副作用的可选函数。
enabled_by_default:一个布尔变量,用于确定规则是否默认启用。
Truerequires_output:一个布尔变量,指示规则是否需要匹配命令输出。
TrueFalse,即使命令没有产生输出,规则也可以匹配priority:一个整数变量,用于设置规则的优先级。
1000来源:thefuck/types.py85-128 README.md397-398
在开发自定义规则时,您将使用 Command 对象,它代表失败的命令。此对象有三个主要属性:
script:用户输入的命令文本output:来自失败命令的输出(stdout/stderr)script_parts:将命令拆分为各个部分(单词)在规则中不应直接修改 Command 对象。
来源:thefuck/types.py12-82 README.md400-401
当 TheFuck 处理失败的命令时,它会遵循以下步骤:
TheFuck 从多个位置加载规则:
~/.config/thefuck/rules 的自定义规则thefuck_contrib_* 的包的第三方规则规则按优先级顺序加载,优先级值越低,处理越靠前。
这是一个简单的规则示例,当命令因权限问题失败时,它会在命令前添加 sudo。
此规则
sudo 来纠正它们有些规则可能需要做的不仅仅是纠正命令。例如,您可以创建一个规则,在遇到权限问题后修复权限。
一条规则可以提供多个纠正选项
当用户将“git”误键入为“gti”时,此规则提供两个纠正。
要在您的规则中与 TheFuck 的配置进行交互,请导入设置
设置可以在用户的 ~/.config/thefuck/settings.py 文件中配置。
创建自定义规则时,请牢记以下几点:
性能:规则应高效,尤其是在 match 函数中,该函数对每个失败命令的每条规则都会调用。
特异性:使您的规则足够具体,以避免误报。
错误处理:添加错误处理以防止您的规则导致 TheFuck 崩溃。
测试:使用各种输入测试您的规则,以确保它们正常工作。
优先级:设置适当的优先级值来控制规则的应用顺序。
当命令失败时,TheFuck 会加载所有启用的规则,检查每条规则是否匹配失败的命令,并收集所有可能的纠正。然后,纠正会按优先级排序并呈现给用户。
要调试自定义规则,您可以启用调试模式:
这提供了关于规则匹配和命令纠正的额外输出,帮助您理解为什么您的规则可能无法按预期工作。
来源:README.md449 README.md466 README.md482
| 组件 | 必填 | 默认 | 描述 |
|---|---|---|---|
match | 是 | - | 用于确定规则是否适用的函数 |
get_new_command | 是 | - | 提供纠正的函数 |
side_effect | 否 | 无 | 用于执行额外操作的函数 |
enabled_by_default | 否 | True | 规则是否自动启用 |
requires_output | 否 | True | 匹配是否需要命令输出 |
priority | 否 | 1000 | 决定规则的执行顺序 |
自定义规则提供了一种强大的方法来扩展 TheFuck 的功能,以满足您的特定需求。通过为经常遇到的错误创建规则,您可以显著提高命令行工作流的效率。