如何为 .NET CLI 启用 Tab 自动补全
本文适用于: ✔️ .NET Core 2.1 SDK 及更高版本
本文介绍了如何为五种 shell(PowerShell、Bash、zsh、fish 和 nushell)配置 Tab 自动补全。 对于其他 shell,请参阅相关文档,了解如何配置 tab 自动补全。
设置完成后,通过在 shell 中输入 dotnet
命令,然后按下 Tab 键即可触发 .NET CLI 的 Tab 自动补全。 当前命令行将发送到 dotnet complete
命令,结果将由 shell 处理。 可以通过直接向 dotnet complete
命令发送内容来测试结果而无需启用 tab 自动补全。 例如:
> dotnet complete "dotnet a"
add
clean
--diagnostics
migrate
pack
如果该命令不起作用,请确保已安装 .NET Core 2.0 SDK 或更高版本。 如果已安装,但该命令仍不起作用,请确保 dotnet
命令解析为 .NET Core 2.0 SDK 或更高版本。 使用 dotnet --version
命令查看当前路径解析为的 dotnet
的版本。 有关详细信息,请参阅选择要使用的 .NET 版本。
示例
下面是 tab 自动补全提供的一些示例:
输入 | 将变为 | 因为 |
---|---|---|
dotnet a⇥ |
dotnet add |
add 是第一项子命令,按字母排序。 |
dotnet add p⇥ |
dotnet add --help |
Tab 自动补全匹配子字符串,--help 首先按字母顺序排列。 |
dotnet add p⇥⇥ |
dotnet add package |
第二次按 Tab 将显示下一条建议。 |
dotnet add package Microsoft⇥ |
dotnet add package Microsoft.ApplicationInsights.Web |
结果按字母顺序返回。 |
dotnet remove reference ⇥ |
dotnet remove reference ..\..\src\OmniSharp.DotNet\OmniSharp.DotNet.csproj |
Tab 自动补全是可识别的项目文件。 |
PowerShell
若要将 Tab 自动补全添加到适用于 .NET CLI 的 PowerShell,请创建或编辑存储在变量 $PROFILE
中的配置文件。 有关详细信息,请参阅如何创建配置文件和配置文件和执行策略。
将以下代码添加到配置文件中:
# PowerShell parameter completion shim for the dotnet CLI
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
dotnet complete --position $cursorPosition "$commandAst" | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}
bash
若要将 Tab 自动补全添加到适用于 .NET CLI 的 bash shell,请将以下代码添加到 .bashrc
文件:
# bash parameter completion for the dotnet CLI
function _dotnet_bash_complete()
{
local cur="${COMP_WORDS[COMP_CWORD]}" IFS=$'\n' # On Windows you may need to use use IFS=$'\r\n'
local candidates
read -d '' -ra candidates < <(dotnet complete --position "${COMP_POINT}" "${COMP_LINE}" 2>/dev/null)
read -d '' -ra COMPREPLY < <(compgen -W "${candidates[*]:-}" -- "$cur")
}
complete -f -F _dotnet_bash_complete dotnet
zsh
若要将 Tab 自动补全添加到适用于 .NET CLI 的 zsh shell,请将以下代码添加到 .zshrc
文件:
# zsh parameter completion for the dotnet CLI
_dotnet_zsh_complete()
{
local completions=("$(dotnet complete "$words")")
# If the completion list is empty, just continue with filename selection
if [ -z "$completions" ]
then
_arguments '*::arguments: _normal'
return
fi
# This is not a variable assignment, don't remove spaces!
_values = "${(ps:\n:)completions}"
}
compdef _dotnet_zsh_complete dotnet
fish
若要向 .NET CLI 的 fish shell 添加 Tab 自动补全,请将以下代码添加到 config.fish
文件中:
complete -f -c dotnet -a "(dotnet complete (commandline -cp))"
nushell
若要向 .NET CLI 的 nushell 添加 Tab 自动补全,请将以下代码添加到 config.nu
文件的开头:
let external_completer = { |spans|
{
dotnet: { ||
dotnet complete (
$spans | skip 1 | str join " "
) | lines
}
} | get $spans.0 | each { || do $in }
}
然后在 config
记录中,找到 completions
部分,将前面定义的 external_completer
添加到 external
:
let-env config = {
# your options here
completions: {
# your options here
external: {
# your options here
completer: $external_completer # add it here
}
}
}