¿Cuál es el formato de la opción -F de _path_files? y compadd ?
Estoy pasando varios directorios a _path_files :
_path_files -W "($base_directories)" -/
Pero algunos de esos árboles de directorios no quiero completarlos para este comando en particular.
La documentación que puedo encontrar para _path_files dice que acepta un -F opción, como compadd , pero no puedo encontrar el formato para pasarlos.
Dar vueltas tampoco ha sido muy fructífero.
He probado, por ejemplo,
_path_files -W "($base_directories)" -/ -F shared; # shared still shows up
_path_files -W "($base_directories)" -/ -F "(shared)"; # barfs on that guy
Respuesta aceptada:
Eso parece correcto si desea ignorar shared en la raíz del árbol de directorios, es decir, si está ignorando uno de los $base_directories . Pero si tu intención es ignorar shared en algún lugar más profundo en la jerarquía, necesita -F "(shared **shared)" . También puede poner los patrones en una matriz, lo que reducirá los dolores de cita.
local -a ignored base_directories
base_directories=(…)
ignored=(shared '*/shared')
_path_files -W base_directories -/ -F ignored
Hay ejemplos en la distribución estándar en _cvs y _darcs .
Si esto no ayuda, intente investigar qué está pasando agregando set -x y set +x alrededor del código problemático, o setopt local_options xtrace (también conocido como set -x y cambie las opciones solo durante la duración de la función actual).