¿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).