用户手册

命令补全提示

在普通终端会话中输入命令时,命令补全提示会显示一个候选项列表,候选项取自 shell 自身的补全定义。命令仍在终端的常规输入行中编辑,选中候选项只会插入文本,不会运行命令。此功能不使用 AI 模型。

命令补全提示可在 macOS 和 Linux 上使用。在 Windows 上,此功能目前处于关闭状态(见下文的 Windows 一节)。

设置与操作

「设置 ▸ 终端 ▸ 命令补全提示」提供三种模式:

  • 自动提示(默认):VelaTerm 会先收集约 25 毫秒内的输入,再向 shell 请求候选项;在此期间继续输入不会重新开始计时。如果在请求进行期间继续输入,下一次请求只使用最新的输入,过时的结果会被丢弃。完全匹配的候选项会保留在列表中。
  • 按 Tab 提示:只有按下 Tab 时才显示候选项。
  • 完全关闭:不显示建议列表,Tab 保留 shell 的原生行为。

更改会立即在已打开的终端中生效,并且连接到同一 VelaTerm 后端的所有客户端共用这一设置。

键盘与鼠标操作:

  • 上下方向键用于选择候选项;列表较长时,可用 Page Up 和 Page Down 翻页。
  • 按 Tab 或用鼠标点击,即可插入选中的候选项。
  • Enter 始终交给 shell 处理,按已输入的内容运行当前命令,不会应用任何候选项。
  • 按 Esc 关闭列表。
  • 按 Ctrl+Space 可手动请求候选项。
  • 当选择无法继续移动时,上下方向键会交还给 shell。因此,在第一个候选项上按上方向键,会从历史记录中调出上一条命令。

候选项依次按完全匹配、前缀匹配、子串匹配以及 shell 给出的其他匹配排列。在完全匹配和前缀匹配中,大小写一致的匹配排在前面;在每一组中,较短的候选项排在前面,长度相同时按字母顺序排列。

列表会高亮每个候选项中与输入内容匹配的部分,并在 shell 提供说明时显示该说明;将鼠标悬停在候选项上可以阅读较长的说明。结果刷新时,列表的位置和当前选择保持不变。接受候选项后列表会关闭,候选项是以 / 结尾的目录时也是如此。再次按 Tab 可查看下一级目录。在自动提示模式下,继续输入会再次打开列表。

如果在插入尚未完成时修改了输入,VelaTerm 会等待 shell 返回新的结果,并且只有当该候选项仍在结果中时才会插入。

支持的 shell

Shell补全提示
Zsh原生补全 widget 和 compadd,会使用你现有的补全定义。
Bash 4 及更高版本已注册的补全函数和补全规则;没有注册任何补全时,提供命令名和文件名。
Fish原生 complete -C 返回的候选项及其说明。
带 PSReadLine 的 PowerShell(pwsh)原生 CommandCompletion.CompleteInput。
Bash 3.2 及其他 shell仅保留原生 Tab 行为,不显示建议列表。

macOS 自带的 Bash 为 3.2 版。如需在 macOS 上配合 Bash 使用命令补全提示,请将较新版本的 Bash(例如通过 Homebrew 安装的版本)设为登录 shell。

命令补全提示仅在普通终端会话中提供,智能体会话不受影响。

集成的加载方式

VelaTerm 在终端启动时加载其 shell 集成。你的 shell 启动文件不会被修改;自定义的启动命令仍会在集成加载后运行。安装含此功能的版本之前就已在运行的终端需要重新启动。

  • Zsh 在读取你自己的登录文件之后,通过临时启动文件加载集成,随后恢复 ZDOTDIR。不会向终端输入任何内容。
  • Bash 使用一个临时的 --rcfile 启动:它先按 Bash 的常规顺序读取你的登录文件(先读取 /etc/profile,再读取 ~/.bash_profile、~/.bash_login 和 ~/.profile 中第一个存在的文件),然后加载集成。不会向终端输入任何内容。与普通登录 shell 相比,仍有两点差异:shopt -q login_shell 返回 false,shell 退出时也不会运行 ~/.bash_logout。
  • Fish 和 PowerShell 没有类似的启动钩子,因此 VelaTerm 会在 shell 启动时发送一条加载集成的命令;这一行会显示在新终端的顶部。

PowerShell 的执行策略同样适用于集成脚本,VelaTerm 不会绕过它。

在命令运行期间、全屏程序打开期间、输入法(IME)组字期间以及浏览历史记录期间(Ctrl+R、Ctrl+S 和方向键),命令补全提示会暂停。方向键从不触发自动请求,因此连续按上方向键会继续向前浏览更早的命令。没有生效的集成或找不到候选项时,Tab 保留原生行为。

在终端内启动 SSH 或其他嵌套 shell 时,不会在该环境中安装集成。

Windows

在 Windows 上,无论设置如何,都不会加载集成,「命令补全提示」设置也会隐藏。cmd、Windows PowerShell、pwsh、Git Bash 和 WSL 终端保留原生的 Tab 行为。此功能保持关闭,是因为在 Windows 上加载集成需要向每个新终端输入一条命令,而且每次请求都会启动辅助进程,从而拖慢输入速度。

限制

  • 候选项取决于你的 shell 已安装的补全定义。VelaTerm 不提供自己的命令目录,也不基于历史记录进行预测。
  • 部分复杂的 Bash 补全脚本依赖 Readline 的内部机制,集成无法完全重现这些行为。
  • 补全函数可能会运行外部程序,速度可能较慢。列表最多等待两秒,但仍在运行的 shell 函数不会被终止;可以像平常一样按 Ctrl+C 中断它。
  • 集成占用 Ctrl+F12 收集候选项,占用 Ctrl+F11 插入选中项。如果 shell 配置在终端启动后重新绑定了这两个按键,命令补全提示可能会失效。在 Bash 4.0 至 4.3 中,集成还会包装 Enter 和 Ctrl+J。
  • 说明文字由 shell 提供。许多 Bash 补全定义不提供说明,因此这些候选项不显示说明。

测试情况

此功能已在 macOS 上使用 Zsh 和 Bash 5.2 测试,并在 Linux 上使用 Bash、Zsh、Fish 和 PowerShell 7.4 测试。