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

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

이 문서에서는 PowerShell, Bash, zsh, fish 및 nushell의 5개 셸에 대한 탭 완성을 구성하는 방법을 설명합니다. 그 밖의 셸은 해당 셸의 설명서에서 탭 완성 기능을 구현하는 방법을 확인하세요.

설정되면 셸에 dotnet 명령을 입력하고 Tab 키를 누르면 .NET CLI의 탭 완성 기능이 트리거됩니다. 현재 명령줄은 dotnet complete 명령으로 전송되고, 결과는 셸에 의해 처리됩니다. 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 add package Microsoft⇥ dotnet add package Microsoft.ApplicationInsights.Web 결과는 사전순으로 반환됩니다.
dotnet remove reference ⇥ dotnet remove reference ..\..\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

fish

.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 레코드에서 completions 섹션을 찾아 앞에서 정의한 external_completer(을)를 external에 추가합니다.

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