![zsh에서 고정 깊이를 가진 전체 디렉토리 이름](https://linux55.com/image/169039/zsh%EC%97%90%EC%84%9C%20%EA%B3%A0%EC%A0%95%20%EA%B9%8A%EC%9D%B4%EB%A5%BC%20%EA%B0%80%EC%A7%84%20%EC%A0%84%EC%B2%B4%20%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%20%EC%9D%B4%EB%A6%84.png)
나는 어떤 시점에서 _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
, 이는 이 접근 방식의 사소한 단점입니다. 더 좋은 방법이 있을 수 있습니다.