Включение завершения вкладки для интерфейса командной строки .NET

Эта статья применяется к: ✔️ Пакет SDK для .NET Core 2.1 и более поздних версий

В этой статье описывается настройка завершения вкладки для пяти оболочк: PowerShell, Bash, zsh, fish и nushell. Сведения о том, как настроить заполнение нажатием клавиши TAB в других оболочках, см. в соответствующей документации.

После настройки завершение вкладки для интерфейса командной строки .NET активируется путем ввода dotnet команды в оболочке и нажатия клавиши TAB . Текущая командная строка отправляется dotnet complete в команду, а результаты обрабатываются оболочкой. Вы можете проверить результаты без активации автодополнения клавишей TAB, передав что-либо непосредственно команде dotnet complete. Например:

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

Если эта команда не работает, убедитесь, что установлен пакет SDK для .NET Core 2.0 или более поздней версии. Если она установлена, но эта команда по-прежнему не работает, убедитесь, что dotnet команда разрешается в версию пакета SDK для .NET Core 2.0 или более поздней версии. Воспользуйтесь командой dotnet --version, чтобы узнать, к которой версии dotnet указывает текущий путь. Дополнительные сведения см. в статье Выбор версии .NET для использования.

Примеры

Ниже приведено несколько примеров возможностей, которые предоставляет автодополнение клавишей TAB:

Входные данные становится because
dotnet a⇥ dotnet add add является первой подкомандой в алфавитном порядке.
dotnet add p⇥ dotnet add --help При автодополнении клавишей TAB подстроки сопоставляются и первой по алфавиту является --help.
dotnet add p⇥⇥ dotnet add package После второго нажатия клавиши TAB подставляется следующее предложение.
dotnet add package Microsoft⇥ dotnet add package Microsoft.ApplicationInsights.Web Результаты возвращаются в алфавитном порядке.
dotnet remove reference ⇥ dotnet remove reference ..\..\src\OmniSharp.DotNet\OmniSharp.DotNet.csproj Автодополнение клавишей TAB зависит от файла проекта.

PowerShell

Чтобы добавить автодополнение клавишей TAB для .NET CLI в PowerShell, создайте или измените профиль, хранящийся в переменной $PROFILE. Дополнительные сведения см. в разделах How to create your profile (Как создать свой профиль) и Profiles and execution policy (Профили и политика выполнения).

Добавьте в свой профиль представленный ниже код:

# 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

Чтобы добавить автодополнение клавишей TAB для .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

Чтобы добавить автодополнение клавишей TAB для .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

Чтобы добавить автодополнение клавишей TAB для .NET CLI в fish, добавьте в свой файл config.fish следующий код:

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

nushell

Чтобы добавить завершение вкладки в nushell для .NET CLI, добавьте следующее в начало config.nu файла:

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

А затем в config записи найдите completions раздел и добавьте заданный ранее externalразделexternal_completer:

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