Función Autocompletar ZSH basada en 2 argumentos
-
13-12-2019 - |
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!- -)
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