基于两个参数的Zsh自动补全函数

5

I have a function like this:

p() { cd ~/Clients/$1/Projects/$2; }

然后,我可以输入:
p "Client here" "Project here"

然后它会带我去:

~/Clients/Client here/Projects/Project here

这里没有什么特别的。但我如何为这个函数实现自动完成?我已经成功地让第一个参数(clients)实现了自动完成:

_p() { _files -W ~/Clients -/; }
compdef _p p

但是我该如何自动补全第二个参数(projects)?它需要根据客户端从文件夹进行自动补全:

~/Clients/$1/Projects

希望有人能够帮忙!:-)
1个回答

8
一位聪明的人(Mikachu)在IRC上给予了帮助:
p() { cd ~/Clients/$1/Projects/$2; }
_p() {
  _arguments '1: :->client' '2: :->project'
  case $state in
    client)
      _files -W ~/Clients
    ;;
    project)
      _files -W ~/Clients/$words[CURRENT-1]/Projects
    ;;
  esac 
}
compdef _p p

更新:将$words[CURRENT-1]更改为${(Q)words[CURRENT-1]},以使其适用于包含空格的目录:

p() { cd ~/Clients/$1/Projects/$2; }
_p() {
  _arguments '1: :->client' '2: :->project'
  case $state in
    client)
      _files -W ~/Clients
    ;;
    project)
      _files -W ~/Clients/${(Q)words[CURRENT-1]}/Projects
    ;;
  esac 
}
compdef _p p

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接