Autocomplete für die dotnet CLI

Nutzt man häufig die dotnet CLI vermisst man recht schnell die Vorschläge welche man bekommt, wenn man TAB drückt. Ab Version 2.0 der CLI wurde diese Feature hinzugefügt. Leider funktioniert das ganze nicht ohne weiteres. Welche Schritte nötig sind wird im Folgenden aufgezeigt.

Beispiele

Diese Tabelle zeigt Beispiele auf was man von der Funktion erwarten darf:

dotnet a⇥ wird zu dotnet add weil add das erste Kommando ist, alphabetisch.
dotnet add p⇥ wird zu dotnet add --help weil auch Teile Treffer erhalten, --help ist alphabetisch der erste Treffer mit einem "p".
dotnet add p⇥⇥ wird zu dotnet add package da ein weiterer Druck auf TAB den nächsten Treffer bringt.
dotnet add package Microsoft⇥ wird zu dotnet add package Microsoft.ApplicationInsights.Web weil Ergebnisse alphabetisch ausgegeben werden.
dotnet remove reference ⇥ wird zu dotnet remove reference ..\..\src\Sample\Sample.csproj weil auch Projektdateien berücksichtigt werden.

Einrichtung

Powershell

In das PowerShell Profil wird der Inhalt von register-completions.ps1 eingefügt:

notepad $PROFILE

Inhalt der Datei bei Erstellung des Posts:

# PowerShell parameter completion shim for the dotnet CLI 
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock {
    param($commandName, $wordToComplete, $cursorPosition)
    dotnet complete --position $cursorPosition "$wordToComplete" | ForEach-Object {
        [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
    }
}

Bash

Für die Einrichtung in der Bash wird die .bashrc um den Inhalt dieser Datei erweitert register-completions.bash.

Inhalt der Datei bei Erstellung des Posts:

# bash parameter completion for the dotnet CLI
_dotnet_bash_complete()
{
  local word=${COMP_WORDS[COMP_CWORD]}
  local completions=("$(dotnet complete --position ${COMP_POINT} "${COMP_LINE}")")
  COMPREPLY=( $(compgen -W "$completions" -- "$word") )
}
complete -f -F _dotnet_bash_complete dotnet

Quellen

Text und Inhalt wurde mit Informationen der folgenden Seiten erstellt:

Scott Hanselman
dotnet Git Dokumentation