Aracılığıyla paylaş


Için sekme tamamlama System.CommandLine

Önemli

System.CommandLine şu anda ÖNİzLEME aşamasındadır ve bu belgeler 2.0 beta 4 sürümüne yöneliktir. Bazı bilgiler, yayımlanmadan önce önemli ölçüde değiştirilebilen yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

kullanan System.CommandLine uygulamalar, belirli kabuklarda sekme tamamlama için yerleşik desteğe sahiptir. Bunu etkinleştirmek için son kullanıcının kabuk başına bir kez birkaç adım atılması gerekir. Kullanıcı bunu yaptıktan sonra, sekme tamamlama işlemi uygulamanızda sabit listesi değerleri veya FromAmong çağrısı yaparak tanımladığınız değerler gibi statik değerler için otomatik olarak tamamlanır. Çalışma zamanında değerleri dinamik olarak alarak sekme tamamlamayı da özelleştirebilirsiniz.

Sekme tamamlamayı etkinleştirme

Sekme tamamlama özelliğini etkinleştirmek istediğiniz makinede aşağıdaki adımları uygulayın.

.NET CLI için:

üzerinde System.CommandLineoluşturulan diğer komut satırı uygulamaları için:

  • dotnet-suggest Genel aracı yükleyin.

  • Kabuk profilinize uygun dolgu betiğini ekleyin. Bir kabuk profili dosyası oluşturmanız gerekebilir. Dolgu betiği, kabuğunuzdan dotnet-suggest tamamlama isteklerini uygun System.CommandLinetabanlı uygulamaya temsilci olarak veren ara çubuğuna iletir.

    • içinbash, dotnet-suggest-shim.bash dosyasının içeriğini ~/.bash_profile öğesine ekleyin.

    • içinzsh, dotnet-suggest-shim.zsh içeriğini ~/.zshrc'ye ekleyin.

    • PowerShell için dotnet-suggest-shim.ps1 içeriğini PowerShell profilinize ekleyin. Konsolunuzda aşağıdaki komutu çalıştırarak PowerShell profilinizin beklenen yolunu bulabilirsiniz:

      echo $profile
      

Kullanıcının kabuğu ayarlandıktan sonra, kullanılarak System.CommandLineoluşturulan tüm uygulamalar için tamamlamalar çalışır.

Windows'da cmd.exe için (Windows Komut İstemi) takılabilir sekme tamamlama mekanizması yoktur, bu nedenle dolgu betiği yoktur. Diğer kabuklar için etiketli Area-Completionsbir GitHub sorunu arayın. Bir sorun bulamazsanız yeni bir sorun açabilirsiniz.

Çalışma zamanında sekme tamamlama değerlerini alma

Aşağıdaki kod, çalışma zamanında sekme tamamlama değerlerini dinamik olarak alan bir uygulamayı gösterir. Kod, geçerli tarihi izleyen sonraki iki haftalık tarihlerin listesini alır. Liste seçeneğine --date çağrılarak AddCompletionssağlanır:

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);
    }
}

Sekme tuşuna basıldığında gösterilen değerler örnek olarak CompletionItem sağlanır:

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

Aşağıdaki CompletionItem özellikler ayarlanır:

  • Label gösterilecek tamamlanma değeridir.
  • SortText listedeki değerlerin doğru sırada sunulmasını sağlar. İki basamaklı bir dizeye dönüştürülerek i ayarlanır, böylece sıralama 01, 02, 03 vb. ile 14 arasında olur. Bu parametreyi ayarlamazsanız, sıralama, bu örnekte kısa tarih biçiminde olan ve doğru sıralanmayacak olan öğesini temel alır Label.

ve Detailgibi Documentation başka CompletionItem özellikler de vardır, ancak henüz içinde System.CommandLinekullanılmazlar.

Bu kod tarafından oluşturulan dinamik sekme tamamlama listesi, yardım çıkışında da görünür:

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

Ayrıca bkz.

System.CommandLine Genel bakış