仅完成一次位置论证

仅完成一次位置论证

我正在尝试编写一个命令的完成(称为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'

相关内容