Pregunta

Tengo una función como esta:

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

entonces puedo escribir:

p "Client here" "Project here"

y me lleva a:

~/Clients/Client here/Projects/Project here

nada especial en marcha aquí.Pero, ¿cómo implemento autocompletar para esta función?Logré obtener el trabajo de autocompletación para el primer argumento (clientes):

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

Pero, ¿cómo puedo autocompletar el segundo argumento (proyectos)?Debe estar autocompletado de la carpeta en función del cliente:

~/Clients/$1/Projects

espero que alguien pueda ayudar!- -)

¿Fue útil?

Solución

Una persona inteligente (Mikachu) en IRC ayudó:

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

Actualizar: Cambiar $ Words [Current-1] a $ {(Q) Palabras [Current-1]} Para que funcione con los directorios que contienen espacios:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top