다음을 통해 공유


.NET CLI에 대해 탭 완성을 사용하도록 설정하는 방법

이 문서의 적용 대상: ✔️ .NET 6 SDK 이상 버전

이 문서에서는 PowerShell(pwsh), Bash, zsh, fish 및 nushell의 5개 셸에 대한 탭 완성을 구성하는 방법을 설명합니다. 다른 셸의 경우 탭 완성을 구성하는 방법에 대한 설명서를 참조하세요.

네이티브 셸 완성 스크립트(.NET 10 이상)

.NET 10부터 .NET CLI에는 이전 버전에서 사용할 수 있는 동적 완성보다 훨씬 빠르게 실행되는 네이티브 셸 완성 스크립트가 포함되어 있습니다. 네이티브 완성은 셸에서 CLI 문법의 정적 부분을 직접 처리하는 셸별 스크립트를 생성하여 상당한 성능 향상을 제공합니다.

완료 스크립트 생성

명령을 dotnet completions script 사용하여 셸에 대한 완성 스크립트를 생성합니다.

dotnet completions script [SHELL]

매개 변수는 [SHELL] 다음 값 중 하나를 허용합니다.

  • bash
  • fish
  • nushell
  • pwsh
  • zsh

셸을 지정하지 않으면 명령은 사용자 환경에서 올바른 셸을 유추합니다. Windows에서는 기본적으로 PowerShell(pwsh)로 설정됩니다. 다른 시스템에서는 환경 변수의 SHELL 파일 이름이 지원되는 셸 값과 일치하는지 확인합니다.

완료 기능

네이티브 완성은 셸에 따라 다양한 수준의 지원을 제공합니다.

완료 유형 탭 완성의 설명
Bash 셸 하이브리드 아니오
물고기 dynamic 아니오
nushell dynamic 아니오
PowerShell 하이브리드 Yes
zsh 하이브리드 Yes

완료 유형:

  • 하이브리드: CLI 문법의 정적 부분을 빠르게 처리하는 셸 전용 코드를 생성하지만, 동적 콘텐츠(예: NuGet 패키지 ID)에 대해서는 dotnet complete 명령으로 대체합니다.
  • 동적: 모든 완료는 명령을 통해 dotnet complete 진행되며 속도가 느려질 수 있지만 포괄적인 적용 범위를 보장합니다.

네이티브 자동 완성을 사용하도록 셸 구성

셸의 프로필에 적절한 명령을 추가하여 기본 자동 완성을 사용하도록 설정합니다.

PowerShell

PowerShell 프로필에 다음 줄을 추가합니다($PROFILE).

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

배쉬

파일에 다음 줄을 추가합니다 .bashrc .

eval "$(dotnet completions script bash)"

Zsh

파일에 다음 줄을 추가합니다 .zshrc .

eval "$(dotnet completions script zsh)"

Fish

파일에 다음 줄을 추가합니다 config.fish .

dotnet completions script fish | source

Nushell

파일의 시작 부분에 다음을 추가합니다 config.nu .

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

동적 완성 스크립트(모든 버전)

.NET 10 이전의 .NET 버전이나 동적 완성을 사용하려는 경우 명령을 사용하도록 셸을 dotnet complete 구성할 수 있습니다. 동적 자동 완성은 작동하는 방식으로 현재 명령줄을 dotnet complete 명령으로 보내고 셸에서 결과를 처리합니다.

설정이 완료되면, 셸에서 dotnet 명령을 입력하고 Tab 키를 누르면 .NET CLI의 탭 완성 기능이 작동됩니다. 현재 명령줄이 dotnet complete 명령으로 전송되고 결과는 셸에서 처리됩니다. 명령어로 직접 항목을 보내면 탭 완성을 활성화하지 않고도 결과를 테스트할 수 있습니다. 다음은 그 예입니다.

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

해당 명령이 작동하지 않는 경우 .NET Core 2.0 SDK 이상이 설치되어 있는지 확인합니다. 설치되어 있지만 해당 명령이 여전히 작동하지 않는 경우 명령이 dotnet .NET Core 2.0 SDK 이상으로 확인되는지 확인합니다. dotnet --version 명령을 사용하여 현재 경로가 dotnet의 어떤 버전을 가리키는지 확인합니다. 자세한 내용은 사용할 .NET 버전 선택을 참조하세요.

예시

다음은 탭 완성에서 제공하는 몇 가지 예입니다.

입력 된다 왜냐하면
dotnet a⇥ dotnet add add 는 사전순으로 첫 번째 하위 명령입니다.
dotnet add p⇥ dotnet add --help 탭 완성은 부분 문자열을 일치시키고 --help가 사전순으로 먼저 나타납니다.
dotnet add p⇥⇥ dotnet add package 탭을 두 번 누르면 다음 제안이 표시됩니다.
dotnet package add Microsoft⇥ dotnet package add Microsoft.ApplicationInsights.Web 결과는 사전순으로 반환됩니다.
dotnet reference remove ⇥ dotnet reference remove ..\..\src\OmniSharp.DotNet\OmniSharp.DotNet.csproj 탭 완성은 프로젝트 파일을 인식하여 작동합니다.

PowerShell

.NET CLI용 PowerShell 에 탭 완성을 추가하려면 변수 $PROFILE에 저장된 프로필을 만들거나 편집합니다. 자세한 내용은 프로필을 만드는 방법프로필 및 실행 정책을 참조하세요.

프로필에 다음 코드를 추가합니다.

# 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에 대한 bash 셸에 탭 완성을 추가하려면 파일에 다음 코드를 추가합니다 .bashrc .

# 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의 zsh 셸에 탭 완성을 추가하려면 파일에 다음 코드를 추가합니다 .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

물고기

.NET CLI의 fish 셸에 탭 완성을 추가하려면 config.fish 파일에 다음 코드를 추가하십시오.

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

nushell

.NET CLI용 nushell 에 탭 완성을 추가하려면 파일의 시작 부분에 다음을 추가합니다 config.nu .

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

그런 다음, 레코드에서 config 섹션을 찾아 앞에서 정의한 completionsexternal_completer에 추가합니다.

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