次の方法で共有


.NET CLI のタブ補完を有効にする方法

この記事の対象: ✔️ .NET 6 SDK 以降のバージョン

この記事では、PowerShell (pwsh)、Bash、zsh、fish、nushell の 5 つのシェルのタブ補完を構成する方法について説明します。 その他のシェルについては、タブ補完を構成する方法に関するドキュメントを参照してください。

ネイティブ シェル補完スクリプト (.NET 10 以降)

.NET 10 以降、.NET CLI には、以前のバージョンで使用可能な動的補完よりもはるかに高速に実行されるネイティブ シェル補完スクリプトが含まれています。 ネイティブ補完では、シェル内で CLI 文法の静的部分を直接処理するシェル固有のスクリプトが生成され、パフォーマンスが大幅に向上します。

完了スクリプトを生成する

dotnet completions script コマンドを使用して、シェルの完了スクリプトを生成します。

dotnet completions script [SHELL]

[SHELL] パラメーターは、次のいずれかの値を受け取ります。

  • bash
  • fish
  • nushell
  • pwsh
  • zsh

シェルを指定しない場合、コマンドは環境から正しいシェルを推論します。 Windows では、既定では PowerShell (pwsh) になります。 他のシステムでは、 SHELL 環境変数のファイル名が、サポートされているシェル値のいずれかと一致するかどうかを確認します。

オートコンプリート機能

ネイティブ補完では、シェルに応じて異なるレベルのサポートが提供されます。

シェル 補完タイプ タブ補完の説明
Bash ハイブリッド いいえ
dynamic いいえ
nushell dynamic いいえ
PowerShell ハイブリッド イエス
zsh ハイブリッド イエス

補完の種類:

  • ハイブリッド: CLI 文法の静的部分を迅速に処理するシェル固有のコードを生成しますが、動的コンテンツ (NuGet パッケージ ID など) の dotnet complete コマンドにフォールバックします。
  • 動的: すべての補完が dotnet complete コマンドを通過します。これは低速になる可能性がありますが、包括的なカバレッジを保証します。

ネイティブ補完を使用するようにシェルを構成する

シェルのプロファイルに適切なコマンドを追加して、ネイティブ補完を有効にします。

PowerShell

PowerShell プロファイルに次の行を追加します ($PROFILE)。

dotnet completions script pwsh | Out-String | Invoke-Expression

Bash

.bashrc ファイルに次の行を追加します。

eval "$(dotnet completions script bash)"

Zsh

.zshrc ファイルに次の行を追加します。

eval "$(dotnet completions script zsh)"

Fish

config.fish ファイルに次の行を追加します。

dotnet completions script fish | source

Nushell

config.nu ファイルの先頭に次を追加します。

dotnet completions script nushell | save -f ~/.local/share/nushell/completions/dotnet.nu
use ~/.local/share/nushell/completions/dotnet.nu *

動的補完スクリプト (すべてのバージョン)

.NET 10 より前のバージョンの .NET の場合、または動的補完を使用する場合は、 dotnet complete コマンドを使用するようにシェルを構成できます。 動的補完は、現在のコマンド ラインを dotnet complete コマンドに送信し、シェルで結果を処理することによって機能します。

セットアップが完了すると、シェルに 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 キーをもう一度押すと、次の候補が表示されます。
dotnet package add Microsoft⇥ dotnet package add Microsoft.ApplicationInsights.Web 結果はアルファベット順に返されます。
dotnet reference remove ⇥ dotnet reference remove ..\..\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

.NET CLI の フィッシュ シェルにタブ補完を追加するには、 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_completerexternalに追加します。

let-env config = {
    # your options here
    completions: {
        # your options here
        external: {
            # your options here
            completer: $external_completer # add it here
        }
    }
}