菜单

即时模式

相关源文件

即时模式是 TheFuck 的一项实验性功能,旨在通过避免在生成建议时重新运行先前命令来显著提高更正速度。它采用命令输出日志记录方法来实时捕获和分析命令结果。

概述与目的

在使用 TheFuck 的标准模式时,由于需要重新运行先前命令来分析其输出,会有明显的延迟。即时模式通过在执行命令时使用 Unix 的 script 工具记录命令输出来解决此性能瓶颈,然后在需要更正时从该日志中读取。

由此产生的性能提升可能非常显著,特别是对于执行时间较长的命令。

来源

即时模式如何工作

技术架构

即时模式不重新执行命令来获取输出,而是

  1. 创建一个特殊的 shell 环境,记录所有命令输出
  2. 当用户调用 TheFuck 时,它从日志中检索命令输出
  3. 然后,更正过程正常进行,无需重新运行命令

来源

提示符修改

即时模式修改 shell 提示符,包含一个特殊的标记,帮助 TheFuck 在输出日志中识别用户命令

用户命令标记会添加到 shell 提示符中,然后用退格字符隐藏,使其对用户不可见,但仍存在于日志中。

来源

特定 Shell 实现

支持的 Shell

即时模式目前仅在以下 Shell 中支持:

  • Bash
  • Zsh

Fish 和 Tcsh 等其他 Shell 没有即时模式的特定实现,它们将回退到常规模式并显示警告。

来源

Bash 实现

在 Bash 中,即时模式实现会

  1. 修改 PS1 提示符以包含用户命令标记
  2. 在系统的临时目录中设置一个临时日志文件
  3. 启动 shell 日志记录器来捕获命令输出

如果即时模式已激活,它会增强常规的 app 别名。

来源

Zsh 实现

Zsh 的实现与 Bash 类似,但包含对 Zsh 的提示符转义语法(%{...%})的特殊处理。

export PS1="%{USER_COMMAND_MARK\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b%}$PS1"

此外,为了让 TheFuck 正常工作,需要禁用 Zsh 的自动更正功能。

来源

Shell 日志记录系统

首次启用即时模式时,TheFuck 会

  1. 使用 UUID 创建唯一的日志文件路径
  2. 设置 THEFUCK_INSTANT_MODE=True 环境变量
  3. THEFUCK_OUTPUT_LOG 设置为日志文件路径
  4. 启动 shell 日志记录器进程来捕获命令输出
  5. 在退出时删除日志文件

来源

用法和配置

启用即时模式

要启用即时模式,请将 --enable-experimental-instant-mode 标志添加到您的 shell 别名配置中。

此命令配置您的 shell 以便 TheFuck 使用即时模式。

来源

要求

即时模式有特定要求

要求详情
Python 版本Python 3+
支持的 ShellBash, Zsh
Zsh 配置必须禁用自动更正
Unix/Linux依赖 script 工具

来源

技术限制

即时模式有几项技术限制:

  1. 在代码库中被视为“实验性”
  2. 仅适用于 Python 3 和 Bash/Zsh Shell
  3. 需要特定的 shell 配置
  4. 并非在所有平台上都可用

对于标准、更具兼容性的更正功能,用户可以继续使用 基本用法 中描述的常规模式。

来源

性能比较

即时模式的优势主要是速度。通过避免重新执行命令,更正几乎可以即时呈现给用户。

模式如何获取输出速度兼容性
常规重新执行先前命令较慢(取决于命令)所有支持的 Shell
即时从命令日志读取即时仅 Bash, Zsh

来源