Bagikan melalui


Cara mengaktifkan pelengkapan otomatis tab untuk .NET CLI

Artikel ini berlaku untuk: ✔️ .NET 6 SDK dan versi yang lebih baru

Artikel ini menjelaskan cara mengonfigurasi penyelesaian tab untuk lima shell: PowerShell (pwsh), Bash, zsh, fish, dan nushell. Untuk shell lain, lihat dokumentasi mereka tentang cara mengonfigurasi penyelesaian tab.

Skrip penyelesaian shell asli (.NET 10+)

Dimulai dengan .NET 10, .NET CLI menyertakan skrip penyelesaian shell asli yang berjalan jauh lebih cepat daripada penyelesaian dinamis yang tersedia dalam versi sebelumnya. Penyelesaian asli menghasilkan skrip khusus shell yang menangani bagian statis tata bahasa CLI langsung di shell, memberikan peningkatan performa yang signifikan.

Hasilkan skrip penyelesaian

Gunakan perintah dotnet completions script untuk menghasilkan skrip penyelesaian untuk shell Anda.

dotnet completions script [SHELL]

Parameter [SHELL] menerima salah satu nilai berikut:

  • bash
  • fish
  • nushell
  • pwsh
  • zsh

Jika Anda tidak menentukan shell, perintah akan memilih shell yang tepat dari lingkungan Anda. Di Windows, defaultnya adalah PowerShell (pwsh). Pada sistem lain, ini memeriksa apakah nama SHELL file variabel lingkungan cocok dengan salah satu nilai shell yang didukung.

Kemampuan penyelesaian

Kompletasi bawaan menyediakan dukungan tingkat berbeda tergantung pada shell.

Shell Jenis penyelesaian Deskripsi dalam penyelesaian tab
bash hibrida Tidak.
ikan dynamic Tidak.
nushell dynamic Tidak.
PowerShell hibrida Yes
zsh hibrida Yes

Jenis penyelesaian:

  • : Menghasilkan kode khusus shell yang menangani bagian statis tata bahasa CLI dengan cepat, tetapi kembali ke perintah untuk konten dinamis (seperti ID paket NuGet).
  • Dinamis: Semua penyelesaian melalui dotnet complete perintah, yang mungkin lebih lambat tetapi memastikan cakupan komprehensif.

Mengonfigurasi shell untuk menggunakan penyelesaian bawaan

Tambahkan perintah yang sesuai ke profil shell Anda untuk mengaktifkan penyelesaian otomatis bawaan:

PowerShell

Tambahkan baris berikut ke profil PowerShell Anda ($PROFILE):

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

Bash (sebuah bahasa shell dan bahasa perintah untuk Unix)

Tambahkan baris berikut ke file Anda .bashrc :

eval "$(dotnet completions script bash)"

Zsh

Tambahkan baris berikut ke file Anda .zshrc :

eval "$(dotnet completions script zsh)"

Ikan

Tambahkan baris berikut ke file Anda config.fish :

dotnet completions script fish | source

Nushell

Tambahkan yang berikut ini ke awal file Anda config.nu :

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

Skrip penyelesaian dinamis (semua versi)

Untuk versi .NET sebelum .NET 10, atau jika Anda lebih suka menggunakan penyelesaian dinamis, Anda dapat mengonfigurasi shell untuk menggunakan dotnet complete perintah . Penyelesaian dinamis berfungsi dengan mengirim baris perintah saat ini ke dotnet complete perintah dan memproses hasilnya di shell.

Setelah disiapkan, pelengkapan tab untuk .NET CLI dipicu dengan mengetikkan sebuah perintah di shell dan menekan tombol dotnet. Baris perintah saat ini dikirim ke perintah dotnet complete, dan hasilnya diproses oleh shell. Anda dapat menguji hasilnya tanpa mengaktifkan penyelesaian tab dengan mengirim sesuatu langsung ke perintah dotnet complete. Contohnya:

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

Jika perintah tersebut tidak berfungsi, pastikan .NET Core 2.0 SDK atau yang lebih baru diinstal. Jika diinstal tetapi perintah tersebut masih tidak berfungsi, pastikan bahwa perintah tersebut mengarah ke versi dotnet .NET Core 2.0 SDK atau yang lebih baru. Gunakan perintah dotnet --version untuk melihat versi dotnet yang ditentukan oleh jalur Anda saat ini. Untuk informasi selengkapnya, lihat Memilih versi .NET yang akan digunakan.

Contoh

Berikut adalah beberapa contoh tentang apa yang disediakan oleh fitur penyelesaian otomatis dengan tab:

Masukan Menjadi Karena
dotnet a⇥ dotnet add add adalah sub perintah pertama, menurut abjad.
dotnet add p⇥ dotnet add --help Penyelesaian tab cocok dengan substring, dan --help muncul terlebih dahulu secara alfabetis.
dotnet add p⇥⇥ dotnet add package Menekan tab untuk kedua kalinya memunculkan saran berikutnya.
dotnet package add Microsoft⇥ dotnet package add Microsoft.ApplicationInsights.Web Hasil dikembalikan menurut abjad.
dotnet reference remove ⇥ dotnet reference remove ..\..\src\OmniSharp.DotNet\OmniSharp.DotNet.csproj Penyelesaian otomatis tab memahami struktur file proyek.

PowerShell

Untuk menambahkan penyelesaian tab ke PowerShell untuk .NET CLI, buat atau edit profil yang disimpan dalam variabel $PROFILE. Untuk informasi selengkapnya, lihat Cara membuat profil dan Profil serta kebijakan eksekusi.

Tambahkan kode berikut ke profil Anda:

# 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

Untuk menambahkan fitur pelengkapan otomatis tab pada shell bash Anda untuk .NET CLI, tambahkan kode berikut ke dalam file .bashrc Anda:

# 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

Untuk menambahkan penyelesaian tab ke shell zsh Anda untuk .NET CLI, tambahkan kode berikut ke file Anda .zshrc :

# 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

ikan

Untuk menambahkan penyelesaian tab ke fish shell Anda untuk .NET CLI, tambahkan kode berikut ke dalam file config.fish Anda:

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

nushell

Untuk menambahkan penyelesaian tab ke nushell Anda untuk .NET CLI, tambahkan yang berikut ini ke awal file Anda config.nu :

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

Dan kemudian dalam config catatan, temukan bagian completions dan tambahkan external_completer yang ditentukan sebelumnya ke external:

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