nomes completos de diretórios com profundidade fixa em zsh

nomes completos de diretórios com profundidade fixa em zsh

Estou escrevendo uma função de conclusão onde em algum momento uso _files -W $somevar -/para completar subdiretórios de $somevar. Para simplificar a pergunta, digamos que sim $HOME/.local/libe eu tenho subdiretórios para diferentes versões do python e realmente quero completar as versões do python para as quais tenho um $HOME/.local/lib/diretório:

_files -W $HOME/.local/lib -/

e a árvore de diretórios se parece com algo como

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

Se eu usar a conclusão acima para mycommand <TAB>as sugestões são agora python3.5/e python3.6/com a barra final inserida pela conclusão da guia e depois de escolher uma versão, a conclusão sugere ainda mais python3.5/site-package. Este é um comportamento correto, pois na verdade são diretórios existentes. Para o meu caso de uso, não quero descer o diretório três, mas apenas completar os diretórios diretamente em $HOME/.local/lib. Existe uma maneira fácil de preencher diretórios sem completá-los com funções de conclusão integradas? Ou devo usar expressões glob $HOME/.local/lib/*(/)e retirar as partes que não quero?

Responder1

_files -W $HOME/.local/lib -/ -S "" -F "*/*"faz o trabalho: -S ""suprimir a adição de um sufixo /e _F "*/*"exclui subdiretórios (via_path_filesecompadd)).

-Ffaz com que o ignored-patternsestilo seja ignorado, o que é uma pequena desvantagem dessa abordagem. Pode haver uma maneira melhor.

informação relacionada