Delen via


Tabvoltooiing voor System.CommandLine

Apps die System.CommandLine gebruiken, hebben ingebouwde ondersteuning voor het aanvullen van commando's met de tabtoets in bepaalde shells. Als u dit wilt inschakelen, moet de eindgebruiker één keer per shell enkele stappen uitvoeren. Zodra dit is gebeurd, wordt tabvoltooiing automatisch uitgevoerd voor statische waarden in uw app, zoals opsommingswaarden of waarden die zijn gedefinieerd door aanroepen AcceptOnlyFromAmong(String[]). U kunt ook tabvoltooiing aanpassen door waarden dynamisch op te geven tijdens runtime.

Tabvoltooiing inschakelen

Voer de volgende stappen uit op de computer waarop u (de eindgebruiker) tabvoltooiing wilt inschakelen.

Voor de .NET CLI:

Voor andere opdrachtregel-apps die zijn gebouwd op System.CommandLine:

  • Installeer het dotnet-suggest algemene hulpprogramma:

    dotnet tool install -g dotnet-suggest
    
  • Voeg het juiste shim script toe aan uw shell-profiel. Mogelijk moet u een shellprofielbestand maken. Het shim-script stuurt voltooiingsaanvragen van uw shell door naar het dotnet-suggest hulpprogramma, dat ze doorverwijst naar de juiste System.CommandLine-app.

    • Voeg bashde inhoud van dotnet-suggest-shim.bash toe aan ~/.bash_profile.

    • Voeg de inhoud van dotnet-suggest-shim.zsh toe aan ~/.zshrc voor zsh.

    • Voor PowerShell voegt u de inhoud van dotnet-suggest-shim.ps1 toe aan uw PowerShell-profiel en start u PowerShell opnieuw. U vindt het verwachte pad naar uw PowerShell-profiel met de volgende opdracht:

      echo $profile
      
  • Registreer de app door aan te roepen dotnet-suggest register --command-path $executableFilePath, waar $executableFilePath is het pad naar het uitvoerbare bestand van de app.

Zodra de shell van de gebruiker is ingesteld en het uitvoerbare bestand is geregistreerd, werken voltooiingen voor alle apps die zijn gebouwd met behulp van System.CommandLine.

Voor cmd.exe in Windows (de opdrachtprompt van Windows) is er geen insteek-mechanisme voor tab-aanvulling beschikbaar, dus er is geen shim-script beschikbaar. Zoek voor andere shells naar een GitHub-probleem dat is gelabeld Area-Completions. Als u geen probleem vindt, kunt u een nieuw probleem openen.

Voltooiingswaarden voor tabbladen ophalen tijdens runtime

De volgende code toont een app die waarden voor het uitvoeren van tabbladen dynamisch ophaalt tijdens runtime. De code haalt een lijst op van de volgende week met datums na de huidige datum. De lijst wordt aan de --date optie verstrekt door CompletionSources.Add aan te roepen:

using System.CommandLine;
using System.CommandLine.Completions;
using System.CommandLine.Parsing;

new DateCommand().Parse(args).Invoke();

class DateCommand : Command
{
    private Argument<string> subjectArgument = new("subject")
    {
        Description = "The subject of the appointment."
    };
    private Option<DateTime> dateOption = new("--date")
    {
        Description = "The day of week to schedule. Should be within one week."
    };

    public DateCommand() : base("schedule", "Makes an appointment for sometime in the next week.")
    {
        this.Arguments.Add(subjectArgument);
        this.Options.Add(dateOption);

        dateOption.CompletionSources.Add(ctx => {
            var today = System.DateTime.Today;
            List<CompletionItem> dates = new();
            foreach (var i in Enumerable.Range(1, 7))
            {
                var date = today.AddDays(i);
                dates.Add(new CompletionItem(
                    label: date.ToShortDateString(),
                    sortText: $"{i:2}"));
            }
            return dates;
        });

        this.SetAction(parseResult =>
        {
            Console.WriteLine($"Scheduled \"{parseResult.GetValue(subjectArgument)}\" for {parseResult.GetValue(dateOption)}");
        });
    }
}

De waarden die worden weergegeven wanneer de Tab-toets wordt ingedrukt, worden opgegeven als CompletionItem exemplaren:

dates.Add(new CompletionItem(
    label: date.ToShortDateString(),
    sortText: $"{i:2}"));

De volgende CompletionItem eigenschappen zijn ingesteld:

  • Label is de voltooiingswaarde die moet worden weergegeven.
  • SortText zorgt ervoor dat de waarden in de lijst in de juiste volgorde worden weergegeven. Deze wordt ingesteld door te i converteren naar een tekenreeks met twee cijfers, zodat sorteren is gebaseerd op 01, 02, 03, enzovoort, tot en met 14. Als u deze parameter niet instelt, is sorteren gebaseerd op Label, die in dit voorbeeld een korte datumnotatie heeft en niet correct sorteert.

Er zijn andere CompletionItem eigenschappen, zoals Documentation en Detail, maar ze worden nog niet gebruikt in System.CommandLine.

De lijst met dynamische tabvoltooiing die door deze code is gemaakt, wordt ook weergegeven in de Help-uitvoer:

Description:
  Makes an appointment for sometime in the next week.

Usage:
  schedule <subject> [options]

Arguments:
  <subject>  The subject of the appointment.

Options:
  --date                                                                          The day of week to schedule. Should be within one week.
  <12/4/2025|12/5/2025|12/6/2025|12/7/2025|12/8/2025|12/9/2025|12/10/2025>
  --version                                                                       Show version information
  -?, -h, --help

Zie ook