You are not alone if you are using the gh copilot
CLI and have noticed the lack of Zsh completions.
To address this issue, I (err.. GPT, actually) created a completion script to enhance the command-line experience.
Below is a quick guide on setting it up, including a tip on enabling autocompletion for aliases.
Add a few aliases (optional)
Somewhere on your ~/.zshrc
, add:
# GitHub Copilot
# Use Copilot with the GitHub CLI to get suggestions and explanations for the command line
# https://docs.github.com/en/copilot/using-github-copilot/using-github-copilot-in-the-command-line
if (( $+commands[gh] )); then
# GitHub Copilot
alias ghcp='gh copilot'
# Explain a command
alias cpe='ghcp explain'
# Suggest a command
alias cps='ghcp suggest'
fi
After reloading the shell, you should be able to run ghcp --help
:
$ ghcp --help
Your AI command line copilot.
Usage:
copilot [command]
Examples:
$ gh copilot suggest "Install git"
$ gh copilot explain "traceroute github.com"
Available Commands:
alias Generate shell-specific aliases for convenience
config Configure options
explain Explain a command
suggest Suggest a command
Flags:
-h, --help help for copilot
--hostname string The GitHub host to use for authentication
-v, --version version for copilot
Use "copilot [command] --help" for more information about a command.
However, when running ghcp <TAB>
, nothing happens...
Yet!
Create the Completion Script
First, create a new file for the completion script and name it _ghcp
. Place the following content inside:
#compdef ghcp
local context state line
typeset -A opt_args
_arguments -C \
'-h[help]' \
'--help[help]' \
'--hostname=[The GitHub host to use for authentication]:hostname:' \
'-v[version for copilot]' \
'--version[version for copilot]' \
'1:command:->command' \
'*::args:->args'
case $state in
command)
local -a commands
commands=(
'alias:Generate shell-specific aliases for convenience'
'config:Configure options'
'explain:Explain a command'
'suggest:Suggest a command'
)
_describe -t commands 'copilot command' commands
;;
args)
case $words[2] in
alias)
# No additional arguments for 'alias'
;;
config)
# No additional arguments for 'config'
;;
explain)
_message 'Provide the command you want to explain'
;;
suggest)
_message 'Provide a description of what you want to do'
;;
esac
;;
esac
# Associate the completion script with the alias
compdef _ghcp ghcp
Install the Completion Script
Next, you must place the _ghcp
file in a directory that's part of your $fpath. Here's how you can do it:
1. Create a Completions Directory
If you don't already have a custom directory for Zsh completions, create one:
$ mkdir -p ~/.zsh/completions
2. Move the Script
Move or copy the _ghcp
file into this directory:
$ mv _ghcp ~/.zsh/completions/
3. Update Your $fpath
Add the completions directory to your $fpath by appending this line to your ~/.zshrc
:
$ fpath=(~/.zsh/completions $fpath)
4. Ensure the Script Is Executable
Make the completion script executable:
$ chmod +x ~/.zsh/completions/_ghcp
5. Enable Alias Completion
If you use aliases for gh copilot
(like ghcp
), Zsh must be configured to handle completions for aliases. Add the following line to your ~/.zshrc
:
$ setopt complete_aliases
Alternatively, you can explicitly associate the completion script with your alias by adding:
$ compdef _ghcp ghcp
6. Reload Zsh Configuration
Apply the changes by sourcing your .zshrc
or restarting your terminal:
$ source ~/.zshrc
Is that so?
Well, let's try typing ghcp <TAB>
and.. voila!
You should see the available subcommands and options auto-complete for you.
Summary
Having shell completions can significantly speed up your workflow by reducing the need to remember every command and option.
Enabling alias completion ensures that your custom shortcuts benefit from the same convenience.
That's all, folks!
Top comments (0)