alias pjo="pj open" function pj () { cmd="cd" file=$1 if [[ "open" == "$file" ]] then shift file=$* cmd=(${(s: :)EDITOR}) else file=$* fi for project in $PROJECT_PATHS; do if [[ -d $project/$file ]] then $cmd "$project/$file" unset project # Unset project var return fi done echo "No such project $1" } function _pj () { emulate -L zsh typeset -a projects for basedir ($PROJECT_PATHS); do projects+=(${basedir}/*(/N)) done compadd ${projects:t} } compdef _pj pj