【问题标题】:Zsh autocomplete function based on 2 arguments基于 2 个参数的 Zsh 自动完成功能
【发布时间】:2012-05-28 19:47:49
【问题描述】:

我有这样的功能:

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

然后我可以输入:

p "Client here" "Project here"

这需要我去:

~/Clients/Client here/Projects/Project here

这里没有什么特别的。但是我该如何实现这个功能的自动完成呢?我设法为第一个参数(客户端)完成自动完成工作:

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

但是如何自动完成第二个参数(项目)?需要根据客户端从文件夹中自动补全:

~/Clients/$1/Projects

希望有人可以提供帮助! :-)

【问题讨论】:

    标签: terminal zsh zsh-completion


    【解决方案1】:

    IRC 上的一个聪明人(Mikachu)提供了帮助:

    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
    

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 2019-10-04
      • 1970-01-01
      相关资源
      最近更新 更多