我正在尝试为将gs
SSH 主机名作为其第一个参数并将任意字符串作为第二个参数的命令(称为)编写完成。
我从默认的 SSH 完成中窃取了这个:
# Load completions shared by various ssh tools like ssh, scp and sftp.
__fish_complete_ssh ssh
# Also retrieve `user@host` entries from history
function __ssh_history_completions
history --prefix ssh --max=100 | string replace -rf '.* ([A-Za-z0-9._:-]+@[A-Za-z0-9._:-]+).*' '$1'
end
我用它来完成gs
命令的参数:
complete -c gs -d Remote -xa "(__fish_complete_user_at_hosts)"
complete -c gs -d Remote -ka '(__ssh_history_completions)'
这有效,但它完成了两个参数的 SSH 主机名:
- 如果我输入
gs <tab>
,fish 会正确完成 SSH 主机名, - 如果我键入
gs somehost <tab>
,fish 会再次错误地完成 SSH 主机名(这个参数不应该完成,它是一个任意字符串)。
我怎样才能使这个完成只影响我命令的第一个位置参数?