System.CommandLine에 대한 탭 완성 기능
Important
System.CommandLine
은 현재 미리 보기로 제공되며 이 설명서는 버전 2.0 베타 4용입니다.
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
System.CommandLine
을 사용하는 앱에는 특정 셸의 탭 완성 기능이 기본 제공되어 있습니다. 이를 사용하도록 설정하려면 최종 사용자가 셸당 한 번씩 몇 가지 단계를 수행해야 합니다. 사용자가 이 작업을 수행하면 열거형 값이나 FromAmong을 호출하여 정의한 값과 같은 앱의 정적 값에 대한 탭 완성 기능이 자동으로 수행됩니다. 런타임 시 동적으로 값을 가져와서 탭 완성 기능을 사용자 지정할 수도 있습니다.
탭 완성 기능 사용
탭 완성 기능을 사용하도록 설정하려는 컴퓨터에서 다음 단계를 수행합니다.
.NET CLI의 경우:
- 탭 완성 기능을 사용하도록 설정하는 방법을 참조하세요.
System.CommandLine
에 빌드된 다른 명령줄 앱의 경우:
dotnet-suggest
글로벌 도구를 설치합니다.셸 프로필에 적합한 Shim 스크립트를 추가합니다. 셸 프로필 파일을 만들어야 할 수 있습니다. shim 스크립트는 셸의 완료 요청을 적절한
System.CommandLine
기반 앱에 위임하는dotnet-suggest
도구로 전달합니다.bash
의 경우 dotnet-suggest-shim.bash의 콘텐츠를 ~/.bash_profile에 추가합니다.zsh
의 경우 dotnet-suggest-shim.zsh의 콘텐츠를 ~/.zshrc에 추가합니다.PowerShell의 경우 dotnet-suggest-shim.ps1의 콘텐츠를 PowerShell 프로필에 추가합니다. 콘솔에서 다음 명령을 실행하여 PowerShell 프로필의 예상 경로를 찾을 수 있습니다.
echo $profile
사용자의 셸이 설정되면 System.CommandLine
을 사용하여 빌드된 모든 앱에 대해 완료 기능이 작동합니다.
Windows의 cmd.exe(Windows 명령 프롬프트)에는 플러그형 탭 완성 기능 메커니즘이 없으므로 shim 스크립트를 사용할 수 없습니다. 다른 셸의 경우 Area-Completions
레이블이 붙은 GitHub 문제를 찾습니다. 문제를 찾지 못한 경우 새 문제를 열 수 있습니다.
런타임 시 탭 완성 기능 값 가져오기
다음 코드는 런타임 시 동적으로 탭 완성 기능 값을 가져오는 앱을 보여 줍니다. 코드는 현재 날짜 이후의 다음 2주 날짜 목록을 가져옵니다. 목록은 AddCompletions
를 호출하여 --date
옵션에 제공됩니다.
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);
}
}
Tab 키를 눌렀을 때 표시되는 값은 CompletionItem
인스턴스로 제공됩니다.
dates.Add(new CompletionItem(
label: date.ToShortDateString(),
sortText: $"{i:2}"));
다음 CompletionItem
속성이 설정됩니다.
Label
은 표시할 완료 값입니다.SortText
는 목록의 값이 올바른 순서로 표시되는지 확인합니다. 정렬은 01, 02, 03 등을 기준으로 14까지 수행되도록i
를 두 자리 문자열로 변환하여 설정됩니다. 이 매개 변수를 설정하지 않으면 정렬은Label
을 기준으로 이루어집니다. 이 예에서는 간단한 날짜 표기 형식이므로 올바르게 정렬되지 않습니다.
Documentation
및 Detail
과 같은 다른 CompletionItem
속성이 있지만 아직 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