이름이 하위 디렉터리인 디렉터리가 있습니다 src
. 디렉토리를 입력 cd s
하고 클릭 하면 완료되기를 원합니다 . TAB
대신 zsh
시스템에서 다음으로 시작하는 모든 사용자를 완성해 보세요 s
.
Completing local directory
src/
Completing user
saeumair sbrg scan-nix schlosse sdwoods shutdown
sis-user smmsp snitch srabhina sshd sterpeni sushid sync
내 죄는 다음과 같습니다 .zshrc
.
zstyle ':completion:*:directory-stack' list-colors '=(#b) \
#([0-9]#)*( *)==95=38;5;12'
나는 그것을 cd
역사를 완성하는 데 사용합니다. 사용자를 위해 이 기능을 완료하지 않고 이 기능을 유지하는 방법에 대해 알고 계시나요?
답변1
이 cdablevars
옵션은 명명된 디렉터리를 생성하는 역할을 담당하므로 사용자는 cd에 대한 유효한 인수가 됩니다. 사용하지 않는다면 를 사용하세요 unsetopt cdablevars
.
CD의 완성 내용을 변경하려면 스타일을 사용할 수 있습니다 tag-order
. 예를 들어 로컬 디렉터리만 먼저 시도하려면 다음과 같습니다.
zstyle ':completion:*:cd:*' tag-order local-directories
특정 상황에서 적용 가능한 태그를 보는 편리한 단축키는 Ctrl-X h
대신 를 누르는 것 입니다 tab
.
답변2
user는 명령에 대한 유효한 인수이므로 cd
다음을 선택할 수 있으므로 완성으로 제공됩니다.cdable_vars
열려 있는. 이 옵션을 사용하면 대신 을 cd foo
사용할 수 있습니다 cd ~foo
.foo
물결표 확장, 설정의 사용자 이름 또는 디렉터리 이름을 포함합니다 hash -d
(옵션 이름에도 불구하고 쉘 변수는 제외).
완료 코드에는 디렉터리를 완료하려고 시도하지 않고 디렉터리를 지정할 수 있는 옵션이 없습니다. 이 문제를 해결하려면 완성 함수 주위에 래퍼를 사용할 수 있습니다 cd
.
unset -f _cd
autoload -U _cd
functions[_cd_orig]=_cd
_cd () {
setopt local_options no_cdable_vars
_cd_orig $@[@]
}