Von Bedeutung
System.CommandLine
は現在プレビュー段階であり、このドキュメントはバージョン 2.0 ベータ 5 用です。
一部の情報は、リリース前に大幅に変更される可能性があるプレリリース製品に関連しています。 Microsoft は、ここで提供される情報に関して明示的または黙示的な保証を行いません。
System.CommandLine
を使用するアプリには、特定のシェルでのタブ補完のサポートが組み込まれています。 これを有効にするには、エンド ユーザーがシェルごとに 1 回、いくつかの手順を実行する必要があります。 これが完了すると、アプリ内の静的な値 (列挙型の値や、 System.CommandLine.Option<T>.AcceptOnlyFromAmong
を呼び出して定義された値など) に対してタブ補完が自動的に行われます。 実行時に値を動的に指定することで、タブ補完をカスタマイズすることもできます。
タブ補完を有効にする
タブ補完を有効にするコンピューターで、次の手順に従います。
.NET CLI の場合:
- タブ補完を有効にする方法を参照してください。
System.CommandLine
上に構築されたその他のコマンドライン アプリの場合:
dotnet-suggest
グローバル ツールをインストールします。シェル プロファイルに適切な shim スクリプトを追加します。 シェル プロファイル ファイルを作成することが必要な場合があります。 shim スクリプトは、シェルから
dotnet-suggest
ツールに完了要求を転送し、適切なSystem.CommandLine
ベースのアプリに委任します。bash
の場合は、dotnet-suggest-shim.bash の内容を ~/.bash_profile に追加します。zsh
の場合は、dotnet-suggest-shim.zsh の内容を ~/.zshrc に追加します。PowerShell の場合は、 dotnet-suggest-shim.ps1 の内容を PowerShell プロファイルに追加します。 コンソールで次のコマンドを実行すると、PowerShell プロファイルへの予想されるパスを確認できます。
echo $profile
dotnet-suggest register --command-path $executableFilePath
を呼び出してアプリを登録します。ここで、$executableFilePath
はアプリの実行可能ファイルへのパスです。
ユーザーのシェルが設定され、実行可能ファイルが登録されると、 System.CommandLine
を使用してビルドされたすべてのアプリに対して完了が機能します。
Windows 上の cmd.exe (Windows コマンド プロンプト) の場合、プラグインできるタブ補完メカニズムがないため、shim スクリプトは使用できません。 その他のシェルについては、Area-Completions
ラベルが付いている GitHub の問題を探します。 問題が見つからない場合は、 新しい問題を開くことができます。
実行時にタブ補完値を取得する
次のコードは、実行時にタブ補完の値を動的に取得するアプリを示しています。 このコードは、現在の日付の後の次の 2 週間の日付の一覧を取得します。 リストは、--date
を呼び出すことによって、CompletionSources.Add
オプションに提供されます。
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)}");
});
}
}
Tab キーが押されたときに表示される値は、 CompletionItem
インスタンスとして提供されます。
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
次の CompletionItem
プロパティが設定されます。
Label
は、表示される完了値です。SortText
は、リスト内の値が正しい順序で表示されることを保証します。 これは、i
を 2 桁の文字列に変換することによって設定されます。これにより、並べ替えは 01、02、03、14 に基づきます。 このパラメーターを設定しない場合、並べ替えはLabel
に基づきます。この例では短い日付形式であり、正しく並べ替えされません。
CompletionItem
やDocumentation
など、他のDetail
プロパティがありますが、System.CommandLine
ではまだ使用されていません。
このコードによって作成された動的タブ補完リストもヘルプ出力に表示されます。
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
こちらも参照ください
.NET