zsh를 가져오면 사용자가 완료되지 않습니다.

zsh를 가져오면 사용자가 완료되지 않습니다.

이름이 하위 디렉터리인 디렉터리가 있습니다 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 $@[@]
}

관련 정보