Delen via


Tabvoltooiing inschakelen voor de .NET CLI

Dit artikel is van toepassing op: ✔️ .NET 6 SDK en latere versies

In dit artikel wordt beschreven hoe u tabvoltooiing configureert voor vijf shells: PowerShell (pwsh), Bash, zsh, fish en nushell. Raadpleeg voor andere shells hun documentatie over het configureren van tabvoltooiing.

Systeemeigen shell-autocompletiescripts (.NET 10+)

Vanaf .NET 10 bevat de .NET CLI systeemeigen shell-voltooiingsscripts die veel sneller worden uitgevoerd dan de dynamische voltooiingen die beschikbaar zijn in eerdere versies. Systeemeigen voltooiingen genereren shellspecifieke scripts die de statische onderdelen van de CLI-grammatica rechtstreeks in de shell verwerken, wat een aanzienlijke prestatieverbetering biedt.

Voltooiingsscripts genereren

Gebruik de dotnet completions script opdracht om een voltooiingsscript voor uw shell te genereren:

dotnet completions script [SHELL]

De [SHELL] parameter accepteert een van de volgende waarden:

  • bash
  • fish
  • nushell
  • pwsh
  • zsh

Als u geen shell opgeeft, wordt met de opdracht de juiste shell afgeleid uit uw omgeving. In Windows wordt standaard PowerShell (pwsh) gebruikt. Op andere systemen wordt gecontroleerd of de bestandsnaam van de SHELL omgevingsvariabele overeenkomt met een van de ondersteunde shellwaarden.

Voltooiingsmogelijkheden

Systeemeigen voltooiingen bieden verschillende ondersteuningsniveaus, afhankelijk van de shell:

Shell Voltooiingstype Beschrijvingen in tab-aanvullingen
bash hybride Nee.
vis dynamic Nee.
nushell dynamic Nee.
PowerShell hybride Yes
zsh hybride Yes

Voltooiingstypen:

  • Hybride: genereert shellspecifieke code die statische onderdelen van de CLI-grammatica snel verwerkt, maar terugvalt naar de dotnet complete opdracht voor dynamische inhoud (zoals NuGet-pakket-id's).
  • Dynamisch: Alle voltooiingen gaan door de dotnet complete opdracht, wat langzamer kan zijn, maar zorgt voor uitgebreide dekking.

Shells configureren voor het gebruik van systeemeigen voltooiingen

Voeg de juiste opdracht toe aan het profiel van uw shell om systeemeigen voltooiingen in te schakelen:

PowerShell

Voeg de volgende regel toe aan uw PowerShell-profiel ($PROFILE):

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

Bash (een Unix-shell en programmeertaal)

Voeg de volgende regel toe aan uw .bashrc bestand:

eval "$(dotnet completions script bash)"

Zsh

Voeg de volgende regel toe aan uw .zshrc bestand:

eval "$(dotnet completions script zsh)"

Vis

Voeg de volgende regel toe aan uw config.fish bestand:

dotnet completions script fish | source

Nushell

Voeg het volgende toe aan het begin van het config.nu bestand:

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

Scripts voor dynamische voltooiing (alle versies)

Voor .NET-versies vóór .NET 10 of als u dynamische voltooiingen wilt gebruiken, kunt u de shell configureren voor gebruik van de dotnet complete opdracht. Dynamische voltooiingen werken door de huidige opdrachtregel naar de dotnet complete opdracht te verzenden en de resultaten in de shell te verwerken.

Nadat de instelling is voltooid, wordt tab-aanvulling voor de .NET CLI geactiveerd door een dotnet opdracht in de shell in te voeren en vervolgens op de Tab-toets te drukken. De huidige opdrachtregel wordt naar de dotnet complete opdracht verzonden en de resultaten worden verwerkt door de shell. U kunt de resultaten testen zonder tabvoltooiing in te schakelen door iets rechtstreeks naar de dotnet complete opdracht te verzenden. Voorbeeld:

> dotnet complete "dotnet a"
add
clean
--diagnostics
migrate
pack

Als deze opdracht niet werkt, controleert u of .NET Core 2.0 SDK of hoger is geïnstalleerd. Als deze is geïnstalleerd, maar deze opdracht nog steeds niet werkt, controleert u of de dotnet opdracht wordt omgezet in een versie van .NET Core 2.0 SDK of hoger. Gebruik de dotnet --version opdracht om te zien naar welke versie van dotnet uw huidige pad wordt omgezet. Zie De .NET-versie selecteren die u wilt gebruiken voor meer informatie.

Voorbeelden

Hier volgen enkele voorbeelden van de voltooiing van tabbladen:

Invoer Wordt Omdat
dotnet a⇥ dotnet add add is de eerste subopdracht, alfabetisch.
dotnet add p⇥ dotnet add --help Tab-completie matcht met subtekens en --help komt eerst alfabetisch.
dotnet add p⇥⇥ dotnet add package Als u nogmaals op tab drukt, wordt de volgende suggestie weergegeven.
dotnet package add Microsoft⇥ dotnet package add Microsoft.ApplicationInsights.Web Resultaten worden alfabetisch geretourneerd.
dotnet reference remove ⇥ dotnet reference remove ..\..\src\OmniSharp.DotNet\OmniSharp.DotNet.csproj Tabvoltooiing herkent projectbestanden.

PowerShell

Als u tabvoltooiing wilt toevoegen aan PowerShell voor de .NET CLI, maakt of bewerkt u het profiel dat is opgeslagen in de variabele $PROFILE. Voor meer informatie, zie Hoe u uw profiel maakt en Profielen en uitvoeringsbeleid.

Voeg de volgende code toe aan uw profiel:

# 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

Als u tabvoltooiing wilt toevoegen aan uw bash-shell voor de .NET CLI, voegt u de volgende code toe aan uw .bashrc bestand:

# 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

Als u tabvoltooiing wilt toevoegen aan uw zsh-shell voor de .NET CLI, voegt u de volgende code toe aan uw .zshrc bestand:

# 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

vis

Als u tabvoltooiing wilt toevoegen aan uw fish shell voor de .NET CLI, voegt u de volgende code toe aan uw config.fish bestand:

complete -f -c dotnet -a "(dotnet complete (commandline -cp))"

nushell

Als u tabvoltooiing wilt toevoegen aan uw nushell voor .NET CLI, voegt u het volgende toe aan het begin van het config.nu bestand:

let external_completer = { |spans|
    {
        dotnet: { ||
            dotnet complete (
                $spans | skip 1 | str join " "
            ) | lines
        }
    } | get $spans.0 | each { || do $in }
}

Zoek vervolgens in de config record de completions sectie en voeg de external_completer eerder gedefinieerde sectie toe aan external:

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