Estoy escribiendo una función de finalización donde en algún momento utilizo _files -W $somevar -/
para completar subdirectorios de $somevar
. Para simplificar la pregunta, digamos que $HOME/.local/lib
tengo subdirectorios para diferentes versiones de Python allí y realmente quiero completar las versiones de Python para las cuales tengo un $HOME/.local/lib/
directorio:
_files -W $HOME/.local/lib -/
y el árbol de directorios se parece a
.local
├── lib
│ ├── python3.5
│ │ └── site-packages
│ │ ├── somepackage
│ │ ├── somepackage-1.0.1-py2.7.egg-info
│ │ ├── someotherpackage
│ │ └── someotherpackage-1.0.11-py2.7.egg-info
│ ├── python3.6
│ │ └── site-packages
│ │ ├── somepackage
│ │ │ └── __pycache__
│ │ ├── somepackage-0.1-py3.6.egg-info
│ │ ├── someotherpackage
│ │ │ └── __pycache__
│ │ ├── someotherpackage-2018.4.16.dist-info
...
Si uso la finalización anterior para mycommand <TAB>
las sugerencias ahora python3.5/
y python3.6/
con la barra diagonal insertada junto a la finalización de la pestaña y una vez que seleccioné una versión, la finalización sugiere más python3.5/site-package
. Este es un comportamiento correcto en la medida en que en realidad se trata de directorios existentes. Para mi caso de uso, no quiero bajar al directorio tres, sino solo completar los directorios directamente en $HOME/.local/lib. ¿Existe una manera fácil de completar directorios sin completarlos con funciones de finalización integradas? ¿O debería usar expresiones globales $HOME/.local/lib/*(/)
y eliminar las partes que no quiero?
Respuesta1
_files -W $HOME/.local/lib -/ -S "" -F "*/*"
hace el trabajo: -S ""
suprimir la adición de un sufijo /
y _F "*/*"
excluye subdirectorios (a través de_path_files
ycompadd
)).
-F
ignored-patterns
hace que se ignore el estilo, lo cual es una desventaja menor de este enfoque. Puede que haya una mejor manera.