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

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

나는 어떤 시점에서 _files -W $somevar -/완성을 위해 사용하는 완성 함수를 작성하고 있습니다 $somevar. 단순함을 위해 $HOME/.local/lib거기에 다른 Python 버전에 대한 하위 디렉토리가 있고 실제로 완성을 원하기 위해 $HOME/.local/lib/Python 버전 디렉토리가 있다고 가정해 보겠습니다.

_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. 이는 실제로 존재하는 디렉터리이므로 올바른 동작입니다. 내 사용 사례에서는 디렉터리 3으로 이동하고 싶지 않고 $HOME/.local/lib에서 직접 디렉터리를 완성하고 싶습니다. 내장된 완성 기능을 사용하여 목차를 완성하지 않고 쉽게 목차를 완성할 수 있는 방법이 있나요? 아니면 전역 표현식을 사용하여 $HOME/.local/lib/*(/)원하지 않는 부분을 제거해야 합니까?

답변1

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

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

관련 정보