我正在尝试编写一个命令的完成(称为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 主机名(这个参数不应该完成,它是一个任意字符串)。
我怎样才能使这个完成只影响第一的我的命令的位置参数?
答案1
--condition
将或-n
选项complete
与辅助函数一起使用__fish_is_first_arg
:
complete -c gs -d Remote -xa "(__fish_complete_user_at_hosts)" -n '__fish_is_first_arg'