zsh에서 고정 깊이를 가진 완전한 디렉토리 이름

zsh에서 고정 깊이를 가진 완전한 디렉토리 이름

어느 시점 _files -W $somevar -/에서 $somevar. 질문을 단순화하기 위해 $HOME/.local/lib거기에 다양한 Python 버전에 대한 하위 디렉터리가 있고 실제로 디렉터리가 있는 Python 버전을 완성하고 싶다고 가정해 보겠습니다 $HOME/.local/lib/.

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

디렉토리 트리는 다음과 같습니다.

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

mycommand <TAB>제안 에 대해 위의 완성을 사용하고 python3.5/python3.6/완성에 의해 후행 슬래시가 삽입되고 한 버전을 선택하면 완성이 추가로 제안됩니다 python3.5/site-package. 이는 실제로 존재하는 디렉토리이므로 올바른 동작입니다. 내 사용 사례에서는 세 번째 디렉터리로 이동하지 않고 $HOME/.local/lib에서 직접 디렉터리를 완료하기만 합니다. 내장된 완성 기능을 사용하여 디렉토리를 완성하지 않고 디렉토리를 완성하는 쉬운 방법이 있습니까? 아니면 glob 표현식을 사용 $HOME/.local/lib/*(/)하고 원하지 않는 부분을 제거해야 합니까?

답변1

_files -W $HOME/.local/lib -/ -S "" -F "*/*"작업을 수행합니다: -S ""접미사 추가를 억제 /하고 _F "*/*"하위 디렉토리를 제외합니다(를 통해)._path_files그리고compadd)).

-F스타일을 무시 하게 되는데 ignored-patterns, 이는 이 접근 방식의 사소한 단점입니다. 더 좋은 방법이 있을 수 있습니다.

관련 정보