Vervollständigung per TAB-TASTE für System.CommandLine
Wichtig
System.CommandLine
befindet sich derzeit in der VORSCHAU, und diese Dokumentation gilt für Version 2.0 Beta 4.
Einige Informationen beziehen sich auf Vorabversionen des Produkts, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Apps, die System.CommandLine
verwenden, verfügen über integrierte Unterstützung für die Vervollständigung per TAB-TASTE in bestimmten Shells. Um diese zu aktivieren, muss der oder die Endbenutzer*in einmal pro Shell einige Schritte ausführen. Nachdem der oder die Benutzer*in das erledigt hat, erfolgt die Vervollständigung per TAB-TASTE automatisch für statische Werte in Ihrer App, z. B. Enumerationswerte oder Werte, die Sie durch Aufrufen von FromAmong definieren. Sie können die Vervollständigung per TAB-TASTE auch anpassen, indem Sie zur Laufzeit dynamisch Werte abrufen.
Aktivieren der Vervollständigung mit der TAB-TASTE
Führen Sie auf dem Computer, auf dem Sie die Vervollständigung per TAB-TASTE aktivieren möchten, die folgenden Schritte aus.
Für die .NET CLI:
- Weitere Informationen finden Sie unter Aktivieren der Vervollständigung per TAB-TASTE.
Für andere Befehlszeilen-Apps, die auf System.CommandLine
basieren:
Installieren Sie das globale Tool
dotnet-suggest
.Fügen Sie das entsprechende Shim-Skript zu Ihrem Shell-Profil hinzu. Möglicherweise müssen Sie eine Shell-Profildatei erstellen. Das Shim-Skript leitet Vervollständigungsanforderungen von Ihrer Shell an das
dotnet-suggest
-Tool weiter, das an die entsprechendeSystem.CommandLine
-basierte Anwendung delegiert.Fügen Sie für
bash
den Inhalt von dotnet-suggest-shim.bash zu ~/.bash_profile hinzu.Fügen Sie für
zsh
den Inhalt von dotnet-suggest-shim.zsh zu ~/.zshrc hinzu.Fügen Sie für PowerShell den Inhalt von dotnet-suggest-shim.ps1 zu Ihrem PowerShell-Profil hinzu. Den erwarteten Pfad zu Ihrem PowerShell-Profil finden Sie, indem Sie den folgenden Befehl in Ihrer Konsole ausführen:
echo $profile
Sobald die Benutzershell eingerichtet ist, funktioniert die Vervollständigung für alle Apps, die mit System.CommandLine
erstellt werden.
Für cmd.exe unter Windows (die Windows-Eingabeaufforderung) gibt es keinen kompatiblen Vervollständigungsmechanismus per TAB-TASTE, sodass kein Shim-Skript verfügbar ist. Suchen Sie für andere Shells nach einem GitHub-Issue mit der Bezeichnung Area-Completions
. Wenn Sie kein Issue finden, können Sie ein neues öffnen.
Abrufen von TAB-Vervollständigungswerten zur Laufzeit
Der folgende Code zeigt eine App, die zur Laufzeit dynamisch Werte für die Vervollständigung per TAB-TASTE abruft. Der Code ruft eine Liste mit den Datumswerten der nächsten zwei Wochen ab, die auf das aktuelle Datum folgen. Die Liste wird für die --date
-Option bereitgestellt, indem AddCompletions
aufgerufen wird:
using System.CommandLine;
using System.CommandLine.Completions;
using System.CommandLine.Parsing;
await new DateCommand().InvokeAsync(args);
class DateCommand : Command
{
private Argument<string> subjectArgument =
new ("subject", "The subject of the appointment.");
private Option<DateTime> dateOption =
new ("--date", "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.AddArgument(subjectArgument);
this.AddOption(dateOption);
dateOption.AddCompletions((ctx) => {
var today = System.DateTime.Today;
var dates = new List<CompletionItem>();
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.SetHandler((subject, date) =>
{
Console.WriteLine($"Scheduled \"{subject}\" for {date}");
},
subjectArgument, dateOption);
}
}
Die beim Drücken der TAB-TASTE angezeigten Werte werden als CompletionItem
-Instanzen bereitgestellt:
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
Die folgenden CompletionItem
-Eigenschaften sind festgelegt:
Label
ist der anzuzeigende Vervollständigungswert.SortText
sorgt dafür, dass die Werte in der Liste in der richtigen Reihenfolge angezeigt werden. Sie wird durch Konvertieren voni
in eine zweistellige Zeichenfolge festgelegt, sodass die Sortierung auf 01, 02, 03 usw. bis 14 basiert. Wenn Sie diesen Parameter nicht festlegen, basiert die Sortierung auf demLabel
-Wert, der in diesem Beispiel im kurzen Datumsformat vorliegt und nicht korrekt sortiert wird.
Es gibt andere CompletionItem
-Eigenschaften, z. B. Documentation
und Detail
, die jedoch noch nicht in System.CommandLine
verwendet werden.
Die mit diesem Code erstellte dynamische TAB-Vervollständigungsliste wird auch in der Hilfeausgabe angezeigt:
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.
<2/4/2022|2/5/2022|2/6/2022|2/7/2022|2/8/2022|2/9/2022|2/10/2022>
--version Show version information
-?, -h, --help