tab 自动补全 (winget)
winget 命令行工具提供了 complete
命令来提供区分上下文的 tab 自动补全。 它支持根据当前命令行状态补全命令名称、参数名称和参数值。
启用 tab 自动补全
若要使用 winget 启用 tab 自动补全,必须将以下脚本添加到 PowerShell 中的 $PROFILE
。
打开 PowerShell 并输入以下命令,在记事本中打开
$PROFILE
:notepad.exe $PROFILE
将以下脚本复制并粘贴到已在记事本中打开的
$PROFILE
文件:Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock { param($wordToComplete, $commandAst, $cursorPosition) [Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new() $Local:word = $wordToComplete.Replace('"', '""') $Local:ast = $commandAst.ToString().Replace('"', '""') winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) } }
保存
$PROFILE
和脚本。 然后,关闭并重新打开 PowerShell。 重新打开 PowerShell 后,将启用 winget tab 自动补全。
tab 自动补全示例
重复按 tab (⇥
) 将循环可能的值。
输入 | 结果 | Reason |
---|---|---|
winget ⇥ |
winget install |
install 是根目录下的第一个命令 |
winget sh⇥ |
winget show |
show 是第一个以 sh 开头的命令 |
winget source l⇥ |
winget source list |
list 是源的第一个以 l 开头的子命令 |
winget -⇥ |
winget --version |
--version 是为根定义的第一个参数 |
winget install power⇥ |
winget install "Power Toys" |
"Power Toys" 是第一个 ID、名称或名字对象以 power 开头的包 |
winget install "Power Toys" --version ⇥ |
winget install "Power Toys" --version 0.19.2 |
0.19.2 是撰写本文时 Power Toys 的最高版本 |
命令参考
完整的命令需要 3 个必需的参数:
参数 | 说明 |
---|---|
--word |
当前正在补全的字词;光标所在的标记。 可以为空,以表示光标处当前没有值。但如果不为空,则必须在命令行中显示为子字符串。 |
--commandline |
整个当前命令行,包括 winget 。 见上例;除 tab 字符 (⇥ ) 以外的所有内容都应提供给该参数。 |
--position |
光标在命令行中的当前位置。 可以大于命令行字符串的长度,以表示位于末尾。 |
输入字词值时,补全在替换模式下进行。 它将建议准确适合此位置的补全,这些补全也以给定的字词值开头。
未输入字词值(为字词输入空值,例如 --word=
)时,补全在插入模式下进行。 它将建议适合作为光标位置处新值的补全。
根据参数,建议的补全可以是以下之一:
- 子命令 :: 光标位于命令之后,并且提供了可用的子命令。
- 参数说明符 :: 光标不位于需要值的参数说明符之后,并且提供了可用的参数。
- 参数值 :: 光标位于需要值的参数说明符之后,或者需要位置参数。
评估所有情况后,输出可行的补全,且每行一个。 如果补全字符串包含空格,则将其括在引号中。