菜单

自定义规则

相关源文件

本页介绍了如何在 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

  1. match(command):确定规则是否适用于失败的命令。

    • 接收一个 Command 对象作为输入
    • 如果规则应被应用,则返回 True,否则返回 False
  2. get_new_command(command):生成修正后的命令。

    • 接收一个 Command 对象作为输入
    • 返回一个包含修正后命令的字符串,或者一个包含多个可能修正的字符串列表

可选组件

此外,规则还可以包含

  1. side_effect(old_command, fixed_command):规则应用时执行副作用的可选函数。

    • 接收原始命令和修正后的命令作为输入
    • 对于文件操作或权限更改等操作非常有用
  2. enabled_by_default:一个布尔变量,用于确定规则是否默认启用。

    • 默认为 True
  3. requires_output:一个布尔变量,指示规则是否需要匹配命令输出。

    • 默认为 True
    • 如果设置为 False,即使命令没有产生输出,规则也可以匹配
  4. priority:一个整数变量,用于设置规则的优先级。

    • 默认为 1000
    • 值越小,优先级越高,越先匹配

来源:thefuck/types.py85-128 README.md397-398

Command 对象

在开发自定义规则时,您将使用 Command 对象,它代表失败的命令。此对象有三个主要属性:

  1. script:用户输入的命令文本
  2. output:来自失败命令的输出(stdout/stderr)
  3. script_parts:将命令拆分为各个部分(单词)

在规则中不应直接修改 Command 对象。

来源:thefuck/types.py12-82 README.md400-401

规则处理流程

当 TheFuck 处理失败的命令时,它会遵循以下步骤:

来源:thefuck/corrector.py8-92

规则加载过程

TheFuck 从多个位置加载规则:

  1. TheFuck 安装目录中的捆绑规则
  2. 来自 ~/.config/thefuck/rules 的自定义规则
  3. 来自名为 thefuck_contrib_* 的包的第三方规则

规则按优先级顺序加载,优先级值越低,处理越靠前。

来源:thefuck/corrector.py22-48

示例:创建一个简单的规则

这是一个简单的规则示例,当命令因权限问题失败时,它会在命令前添加 sudo

此规则

  1. 匹配因“权限被拒绝”或“EACCES”错误而失败的命令
  2. 通过在命令开头添加 sudo 来纠正它们
  3. 默认启用,具有标准的 1000 优先级
  4. 需要命令输出来匹配

来源:README.md412-429

高级示例

带副作用的规则

有些规则可能需要做的不仅仅是纠正命令。例如,您可以创建一个规则,在遇到权限问题后修复权限。

带多个纠正的规则

一条规则可以提供多个纠正选项

当用户将“git”误键入为“gti”时,此规则提供两个纠正。

访问设置

要在您的规则中与 TheFuck 的配置进行交互,请导入设置

设置可以在用户的 ~/.config/thefuck/settings.py 文件中配置。

来源:README.md404-408

自定义规则注意事项

创建自定义规则时,请牢记以下几点:

  1. 性能:规则应高效,尤其是在 match 函数中,该函数对每个失败命令的每条规则都会调用。

  2. 特异性:使您的规则足够具体,以避免误报。

  3. 错误处理:添加错误处理以防止您的规则导致 TheFuck 崩溃。

  4. 测试:使用各种输入测试您的规则,以确保它们正常工作。

  5. 优先级:设置适当的优先级值来控制规则的应用顺序。

规则发现与选择

当命令失败时,TheFuck 会加载所有启用的规则,检查每条规则是否匹配失败的命令,并收集所有可能的纠正。然后,纠正会按优先级排序并呈现给用户。

来源:thefuck/corrector.py8-92

调试自定义规则

要调试自定义规则,您可以启用调试模式:

这提供了关于规则匹配和命令纠正的额外输出,帮助您理解为什么您的规则可能无法按预期工作。

来源:README.md449 README.md466 README.md482

规则组件表

组件必填默认描述
match-用于确定规则是否适用的函数
get_new_command-提供纠正的函数
side_effect用于执行额外操作的函数
enabled_by_defaultTrue规则是否自动启用
requires_outputTrue匹配是否需要命令输出
priority1000决定规则的执行顺序

来源:thefuck/types.py88-108

结论

自定义规则提供了一种强大的方法来扩展 TheFuck 的功能,以满足您的特定需求。通过为经常遇到的错误创建规则,您可以显著提高命令行工作流的效率。

有关特定规则类型的更多信息,请参阅关于内置规则Git 特定规则包管理器规则的页面。