跳至内容

补全上下文

TIP

  • 补全上下文是 PSCompletions 补全系统的核心概念
  • 理解它有助于更好地理解补全菜单的构建方式和 补全预测符号 的含义

什么是补全上下文

每个命令都有自己的 补全上下文,它定义了该命令的补全菜单中会出现哪些内容。

补全上下文由两部分组成:

  • 子命令 (next) — 该命令可以切换到的下一级命令
  • 选项 (option) — 该命令可以使用的参数选项

当你按下触发键时,PSCompletions 会根据当前命令的补全上下文来构建补全菜单。

触发键默认为 Tab,可通过 psc menu config trigger_key <Key> 自定义

上下文的继承规则

如果一个命令 没有自己的补全上下文,它会自动使用 上一个命令的补全上下文

git 命令为例

txt
PS> git
commit ~           # 子命令
switch ~           # 子命令
config ~           # 子命令
add ~              # 子命令
var                # 子命令
--version ?        # 选项
--help ?           # 全局选项

选用 config ~ 后,切换到 config 的上下文

txt
PS> git config
get ~              # 子命令
set ~              # 子命令
unset ~            # 子命令
list               # 子命令
--global ?         # 选项
--help ?           # 全局选项

上下文的切换方式

  • 补全菜单中的每个补全项都可能携带 补全预测符号
  • 它会指示你选用该补全项后补全上下文会如何变化
符号配置项上下文变化
~continue切换到新的上下文
?stay留在当前上下文
!input留在当前上下文,可能需要手动输入一个值

选用 switch ~ 后,会切换到 switch 的上下文

txt
PS> git switch
main               # 分支 (来源于 hooks.ps1 动态解析)
develop            # 分支 (来源于 hooks.ps1 动态解析)
--conflict ~       # 选项
--create !         # 选项 (别名 -c)
-c !               # 选项 (别名 --create)
--force ?          # 选项
--help ?           # 全局选项

选用 --conflict ~ 后,会切换到 --conflict 的上下文

txt
PS> git switch --conflict
merge              # 预设值
diff3              # 预设值
zdiff3             # 预设值
--help ?           # 全局选项

Released under the MIT.