Enables tab autocomplete for the dotnet CLI. Use when the user wants to set up shell completion for dotnet commands.
Install
npx skillscat add im5tu/dotnet-skills/dotnet-enable-autocomplete Install via the SkillsCat registry.
SKILL.md
.NET CLI Tab Completion
Enable tab autocomplete for the dotnet CLI in your preferred shell.
Steps
Determine .NET version (CRITICAL - commands differ by version)
dotnet sdk check- Parse output to identify installed SDK versions
- .NET 10+: Uses
dotnet completions script <shell>(native completions) - Pre-.NET 10: Uses
dotnet complete --position(dynamic completions)
Ask user which shells they use, allowing multi-select:
- PowerShell
- bash
- zsh
- fish
- nushell
For each user shell:
Detect profile file location based on shell:
Shell Profile Path PowerShell $PROFILEbash ~/.bashrczsh ~/.zshrcfish ~/.config/fish/config.fishnushell ~/.config/nushell/config.nuCheck if completion already configured
- Read the profile file
- Search for existing dotnet completion setup
- If found, inform user and ask if they want to replace it
Append completion script to profile based on .NET version and shell
Inform user to restart their shell or source the profile
Completion Scripts
.NET 10+ (Native Completions)
PowerShell:
dotnet completions script pwsh | Out-String | Invoke-Expressionbash:
eval "$(dotnet completions script bash)"zsh:
eval "$(dotnet completions script zsh)"fish:
dotnet completions script fish | sourcenushell:
See .NET CLI docs for config.nu setup.
Pre-.NET 10 (Dynamic Completions)
PowerShell:
# dotnet CLI tab completion
Register-ArgumentCompleter -Native -CommandName dotnet -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
dotnet complete --position $cursorPosition "$commandAst" | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}bash:
# dotnet CLI tab completion
_dotnet_bash_complete() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local IFS=$'\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 dotnetzsh:
# dotnet CLI tab completion
_dotnet_zsh_complete() {
local completions=("$(dotnet complete --position ${CURSOR} "${BUFFER}" 2>/dev/null)")
reply=("${(ps:\n:)completions}")
}
compctl -K _dotnet_zsh_complete dotnetfish:
# dotnet CLI tab completion
complete -f -c dotnet -a "(dotnet complete --position (commandline -cp) (commandline -op))"nushell:
# Add to external_completer in config.nu
let external_completer = {|spans|
match $spans.0 {
dotnet => (
dotnet complete (
$spans | skip 1 | str join " "
) | lines
)
}
}Error Handling
- If
dotnet sdk checkfails: Ensure .NET SDK is installed - If profile file doesn't exist: Create it with the completion script
- If profile file is read-only: Warn user and provide script to add manually
Notes
- .NET 10+ provides native
dotnet completionscommand - Pre-.NET 10 uses
dotnet completewith dynamic scripts - Always back up profile before modifying
- User must restart shell or source profile for changes to take effect