Como habilitar o preenchimento de guias para a CLI do .NET

Este artigo aplica-se a: ✔️ SDK do .NET Core 2.1 e versões posteriores

Este artigo descreve como configurar o preenchimento de guias para cinco shells: PowerShell, Bash, zsh, fish e nushell. Para outros shells, consulte sua documentação sobre como configurar o preenchimento de guias.

Uma vez configurado, o preenchimento da guia para a CLI do .NET é acionado inserindo um dotnet comando no shell e pressionando a tecla Tab . A linha de comando atual é enviada para o dotnet complete comando e os resultados são processados pelo shell. Você pode testar os resultados sem habilitar o preenchimento da guia enviando algo diretamente para o dotnet complete comando. Por exemplo:

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

Se esse comando não funcionar, verifique se o SDK do .NET Core 2.0 ou posterior está instalado. Se estiver instalado, mas esse comando ainda não funcionar, certifique-se de que o dotnet comando é resolvido para uma versão do SDK do .NET Core 2.0 ou posterior. Use o dotnet --version comando para ver qual versão do dotnet seu caminho atual está resolvendo. Para obter mais informações, consulte Selecione a versão do .NET a ser usada.

Exemplos

Aqui estão alguns exemplos do que o preenchimento de guias fornece:

Entrada torna-se porque
dotnet a⇥ dotnet add add é o primeiro subcomando, por ordem alfabética.
dotnet add p⇥ dotnet add --help O preenchimento de tabulação corresponde a substrings e --help vem primeiro em ordem alfabética.
dotnet add p⇥⇥ dotnet add package Pressionar tab uma segunda vez traz a próxima sugestão.
dotnet add package Microsoft⇥ dotnet add package Microsoft.ApplicationInsights.Web Os resultados são retornados em ordem alfabética.
dotnet remove reference ⇥ dotnet remove reference ..\..\src\OmniSharp.DotNet\OmniSharp.DotNet.csproj A conclusão da guia reconhece o arquivo do projeto.

PowerShell

Para adicionar o preenchimento de guias ao PowerShell para a CLI do .NET, crie ou edite o perfil armazenado na variável $PROFILE. Para obter mais informações, consulte Como criar seu perfil e Perfis e política de execução.

Adicione o seguinte código ao seu perfil:

# 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

Para adicionar o preenchimento de guias ao shell bash para a CLI do .NET, adicione o seguinte código ao arquivo .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

Para adicionar o preenchimento de guias ao shell zsh para a CLI do .NET, adicione o seguinte código ao arquivo .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

peixes

Para adicionar o preenchimento de guias à sua concha de peixe para a CLI do .NET, adicione o seguinte código ao seu config.fish arquivo:

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

Nushell

Para adicionar o preenchimento de guias ao seu nushell para .NET CLI, adicione o seguinte ao início do arquivo config.nu :

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

E, em seguida, no registro, localize a configcompletions seção e adicione o external_completer que foi definido anteriormente para external:

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