Aracılığıyla paylaş


.NET CLI için sekme tamamlamayı etkinleştirme

Bu makale şunlar için geçerlidir: ✔️ .NET 6 SDK ve sonraki sürümler

Bu makalede, beş farklı kabuk için sekme tamamlamanın nasıl yapılandırılacağı açıklanmaktadır: PowerShell (pwsh), Bash, zsh, fish ve nushell. Diğer kabuklar için, sekme tamamlamasının nasıl yapılandırılacağı konusunda belgelerine bakın.

Yerel kabuk tamamlama betikleri (.NET 10+)

.NET 10'dan başlayarak. .NET CLI, önceki sürümlerde kullanılabilen dinamik tamamlamalardan çok daha hızlı çalışan yerel kabuk tamamlama betikleri içerir. Yerel tamamlamalar, CLI komut dilbilgisinin statik bölümlerini kabukta doğrudan işleyerek, önemli bir performans geliştirmesi sağlayan kabuğa özgü betikler oluşturur.

Tamamlama komut dosyaları oluştur

dotnet completions script Kabuğunuz için bir tamamlama betiği oluşturmak için komutunu kullanın:

dotnet completions script [SHELL]

[SHELL] parametresi aşağıdaki değerlerden birini kabul eder:

  • bash
  • fish
  • nushell
  • pwsh
  • zsh

Bir kabuk belirtmezseniz, komut ortamınızdan uygun kabuğu seçer. Windows'ta varsayılan olarak PowerShell (pwsh olarak kullanılır). Diğer sistemlerde ortam değişkeninin dosya adının SHELL desteklenen kabuk değerlerinden herhangi biri ile eşleşip eşleşmediğini denetler.

Tamamlama özellikleri

Yerel tamamlamalar, kullanılan komut kabuğuna bağlı olarak farklı destek seviyeleri sağlar.

Kabuk Tamamlama türü Sekme tamamlamalarındaki açıklamalar
bash hibrit Hayı
balık dynamic Hayı
nushell dynamic Hayı
PowerShell hibrit Yes
zsh hibrit Yes

Tamamlama türleri:

  • Hibrit: CLI dil bilgisinin statik bölümlerini hızlı bir şekilde işleyen, ancak dinamik içerik (NuGet paket kimlikleri gibi) için dotnet complete komutuna geri dönen, kabuğa özgü kod oluşturur.
  • Dinamik: Tüm tamamlamalar, daha yavaş olabilecek ancak kapsamlı bir kapsam sağlayan komutun üzerinden dotnet complete geçer.

Kabukları yerel tamamlama özelliğini kullanacak şekilde yapılandırın

Yerel tamamlamaları etkinleştirmek için kabuğunuzun profiline uygun komutu ekleyin:

PowerShell

Aşağıdaki satırı PowerShell profilinize ekleyin ($PROFILE):

dotnet completions script pwsh | Out-String | Invoke-Expression

Bash

Dosyanıza .bashrc aşağıdaki satırı ekleyin:

eval "$(dotnet completions script bash)"

Zsh

Dosyanıza .zshrc aşağıdaki satırı ekleyin:

eval "$(dotnet completions script zsh)"

Balık

Dosyanıza config.fish aşağıdaki satırı ekleyin:

dotnet completions script fish | source

Nushell

Dosyanızın config.nu başına aşağıdakileri ekleyin:

dotnet completions script nushell | save -f ~/.local/share/nushell/completions/dotnet.nu
use ~/.local/share/nushell/completions/dotnet.nu *

Dinamik tamamlama betikleri (tüm sürümler)

.NET 10'dan önceki .NET sürümleri için veya dinamik tamamlamaları kullanmayı tercih ediyorsanız, kabuğunuzu dotnet complete komutunu kullanacak şekilde yapılandırabilirsiniz. Dinamik tamamlama, geçerli komut satırını dotnet complete komutuna gönderip sonuçları kabukta işleyerek çalışır.

Ayarlandıktan sonra, kabukta bir dotnet komut girilip Sekme tuşuna basıldığında .NET CLI için sekme tamamlama tetiklenir. Geçerli komut satırı dotnet complete komutuna gönderilir ve sonuçlar kabuk tarafından işlenir. Sekme tamamlama özelliğini etkinleştirmeden, dotnet complete komutuna doğrudan bir şey göndererek sonuçları test edebilirsiniz. Örneğin:

> dotnet complete "dotnet a"
add
clean
--diagnostics
migrate
pack

Bu komut işe yaramazsa .NET Core 2.0 SDK veya üstünün yüklü olduğundan emin olun. Yüklüyse ancak bu komut hala çalışmıyorsa, komutun dotnet .NET Core 2.0 SDK veya sonraki bir sürümüne çözümlendiğinden emin olun. dotnet --version komutunu kullanarak geçerli yolunuzun hangi dotnet sürümüne çözümlediğini görün. Daha fazla bilgi için bkz. Kullanılacak .NET sürümünü seçme.

PowerShell

.NET CLI için PowerShell'e sekme tamamlama eklemek için değişkeninde $PROFILEdepolanan profili oluşturun veya düzenleyin. Daha fazla bilgi için bkz. Profilinizi oluşturma ve Profiller ve yürütme ilkesi.

Profilinize aşağıdaki kodu ekleyin ve PowerShell'i yeniden başlatın:

# PowerShell parameter completion shim for the dotnet CLI
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock {
    param($wordToComplete, $commandAst, $cursorPosition)
        dotnet complete --position $cursorPosition "$commandAst" | ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
        }
}

bash

.NET CLI için bash kabuğunuza sekme tamamlama eklemek için dosyanıza .bashrc aşağıdaki kodu ekleyin:

# bash parameter completion for the dotnet CLI

function _dotnet_bash_complete()
{
  local cur="${COMP_WORDS[COMP_CWORD]}" IFS=$'\n' # On Windows you may need to use use IFS=$'\r\n'
  local candidates

  read -d '' -ra candidates < <(dotnet complete --position "${COMP_POINT}" "${COMP_LINE}" 2>/dev/null)

  read -d '' -ra COMPREPLY < <(compgen -W "${candidates[*]:-}" -- "$cur")
}

complete -f -F _dotnet_bash_complete dotnet

zsh

.NET CLI için zsh kabuğunuza sekme tamamlama eklemek için dosyanıza .zshrc aşağıdaki kodu ekleyin:

# zsh parameter completion for the dotnet CLI

_dotnet_zsh_complete()
{
  local completions=("$(dotnet complete "$words")")

  # If the completion list is empty, just continue with filename selection
  if [ -z "$completions" ]
  then
    _arguments '*::arguments: _normal'
    return
  fi

  # This is not a variable assignment, don't remove spaces!
  _values = "${(ps:\n:)completions}"
}

compdef _dotnet_zsh_complete dotnet

balık

.NET CLI için fish shell'inize sekme tamamlama eklemek için dosyanıza config.fish aşağıdaki kodu ekleyin:

complete -f -c dotnet -a "(dotnet complete (commandline -cp))"

nushell

.NET CLI için nushell'inize sekme tamamlama eklemek için, dosyanızın config.nu başına aşağıdakileri ekleyin:

let external_completer = { |spans|
    {
        dotnet: { ||
            dotnet complete (
                $spans | skip 1 | str join " "
            ) | lines
        }
    } | get $spans.0 | each { || do $in }
}

Ardından config kaydında, completions bölümünü bulun ve daha önce tanımlanan external_completer öğesini external öğesine ekleyin.

let-env config = {
    # your options here
    completions: {
        # your options here
        external: {
            # your options here
            completer: $external_completer # add it here
        }
    }
}

Tamamlama örnekleri

Sekme tamamlamanın sağladığı bazı örnekler aşağıda verilmiştir:

Giriş Olur Çünkü
dotnet a⇥ dotnet add add alfabetik olarak ilk alt komut.
dotnet add p⇥ dotnet add --help Sekme tamamlama alt dizelerle eşleşir ve --help alfabetik olarak ilk sırada yer alır.
dotnet add p⇥⇥ dotnet add package Sekme tuşuna ikinci kez basmak bir sonraki öneriyi getirir.
dotnet package add Microsoft⇥ dotnet package add Microsoft.ApplicationInsights.Web Sonuçlar alfabetik olarak döndürülür.
dotnet reference remove ⇥ dotnet reference remove ..\..\src\OmniSharp.DotNet\OmniSharp.DotNet.csproj Sekme tamamlama, proje dosyası ile uyumludur.