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/lib
e 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_files
ecompadd
)).
-F
faz com que o ignored-patterns
estilo seja ignorado, o que é uma pequena desvantagem dessa abordagem. Pode haver uma maneira melhor.