5

私はこのような機能を持っています:

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

次に、次のように入力できます。

p "Client here" "Project here"

そしてそれは私を連れて行きます:

~/Clients/Client here/Projects/Project here

ここでは特別なことは何も起こっていません。しかし、この関数のオートコンプリートを実装するにはどうすればよいですか?私は最初の引数(クライアント)のオートコンプリート作業をなんとか取得できました:

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

しかし、2番目の引数(プロジェクト)をオートコンプリートするにはどうすればよいですか?クライアントに基づいてフォルダからオートコンプリートする必要があります。

~/Clients/$1/Projects

誰かが助けてくれることを願っています!:-)

4

1 に答える 1

8

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
于 2012-05-22T10:46:22.793 に答える