.NET CLI のタブ補完を有効にする方法
この記事の対象: ✔️ .NET Core 2.1 SDK 以降のバージョン
この記事では、PowerShell、Bash、zsh、fish、nushell の 5 つのシェルのタブ補完を構成する方法について説明します。 他のシェルについては、タブ補完を構成する方法に関するシェルのドキュメントを参照してください。
セットアップが完了したら、シェルに dotnet
コマンドを入力した後、Tab キーを押すと、.NET CLI のタブ補完がトリガーされます。 現在のコマンド ラインが dotnet complete
コマンドに送信され、結果がシェルによって処理されます。 何かを dotnet complete
コマンドに直接送信することで、タブ補完を有効にせずに結果をテストすることができます。 次に例を示します。
> dotnet complete "dotnet a"
add
clean
--diagnostics
migrate
pack
そのコマンドが機能しない場合は、.NET Core 2.0 SDK 以降がインストールされていることをご確認ください。 インストールされているにもかかわらず、そのコマンドが機能しない場合は、dotnet
コマンドが .NET Core 2.0 SDK 以降のバージョンに解決されることをご確認ください。 dotnet --version
コマンドを使用して、現在のパスの解決先となっている dotnet
のバージョンを確認します。 詳細については、「使用する .NET のバージョンを選択する」を参照してください。
使用例
タブ補完で提供されることの例をいくつか次に示します。
入力 | 結果 | 理由 |
---|---|---|
dotnet a⇥ |
dotnet add |
アルファベット順では、add が最初のサブコマンドのため。 |
dotnet add p⇥ |
dotnet add --help |
タブ補完が部分文字列と一致しており、アルファベット順では --help が先になるため。 |
dotnet add p⇥⇥ |
dotnet add package |
Tab キーを 2 回押すと、次の修正候補が表示されるため。 |
dotnet add package Microsoft⇥ |
dotnet add package Microsoft.ApplicationInsights.Web |
結果はアルファベット順に返されるため。 |
dotnet remove reference ⇥ |
dotnet remove reference ..\..\src\OmniSharp.DotNet\OmniSharp.DotNet.csproj |
タブ補完がプロジェクト ファイルに対応しているため。 |
PowerShell
.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
.NET CLI の bash シェルにタブ補完を追加するには、次のコードを .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
.NET CLI の zsh シェルにタブ補完を追加するには、次のコードを .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 シェルにタブ補完を追加するには、次のコードを config.fish
ファイルに追加します。
complete -f -c dotnet -a "(dotnet complete (commandline -cp))"
nushell
.NET CLI の nushell にタブ補完を追加するには、次のコードを 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
}
}
}
.NET