alias pjo="pj open" function pj() { local cmd="cd" local project="$1" if [[ "open" == "$project" ]]; then shift project=$* cmd=${=EDITOR} else project=$* fi for basedir ($PROJECT_PATHS); do if [[ -d "$basedir/$project" ]]; then $cmd "$basedir/$project" return fi done echo "No such project '${project}'." } _pj () { local -a projects for basedir ($PROJECT_PATHS); do projects+=(${basedir}/*(/N)) done compadd ${projects:t} } compdef _pj pj