zsh(oh-my-zsh)가 존재하지 않는 디렉토리를 완료하는 이유는 무엇입니까?

zsh(oh-my-zsh)가 존재하지 않는 디렉토리를 완료하는 이유는 무엇입니까?

업데이트 3나는 이 성가신 자동 완성 옵션이 실제로는사용자 이름. 즉, /etc/passwd_kadmin_admin 및 _kadmin_changepw와 같은 사용자와 밑줄로 시작하는 다른 많은 사용자가 있습니다. 이는 OSX에만 해당될 수 있습니다.

Oh-my-zsh는 다른 일치 항목을 찾을 수 없을 때 자동으로 이러한 사용자 이름을 완성합니다. 의 "지루한 사용자를 완료하지 마세요" 목록에 이러한 사용자 이름을 추가하려고 시도했지만 ~/.oh-my-zsh/lib/completion.zsh작동하지 않았습니다. 왜인지 모르겠어요?

oh-my-zsh가 사용자 이름을 자동으로 완성하지 못하게 하는 방법이 있나요?


ZSH 또는 oh-my-zsh의 이상한 동작으로 인해 좌절감을 느끼고 있습니다. 이 문제의 원인이 무엇인지 잘 모르겠습니다.

자동 완성 기능이 내가 예상하지 못한 이상한 디렉토리를 검색하는 것 같습니다. 그것들은 일부 SVN 디렉토리인 것 같습니다. 나는 그것들에 대해 아무것도 모르고 왜 경로에 있는지도 모릅니다. (저는 SVN을 사용하지도 않습니다)

이 동작은 현재 디렉터리에 다른 일치 항목이 없는 경우에만 발생하는 것으로 보입니다. 그러면 내가 모르는 다른 경로를 찾아야 합니다.

예:

참고: 내 홈 디렉터리에 일치하는 항목이 없습니다.mi

→  ~  cd mi<tab>
→  ~  cd _kadmin

즉 , 왜 해당 디렉토리 mi_kadmin일치하는지 모르겠습니다.

실제로 해당 디렉터리로 변경하려고 하면 어쨌든 오류가 발생합니다(전체 디렉터리 이름이 아니기 때문입니다).

→  ~  cd _kadmin
cd:cd:10: no such file or directory: _kadmin

계속 누르면 <tab>전체 디렉토리 이름과 일치합니다.

→  ~  cd mi<tab><tab><tab>
→  ~  cd kadmin_admin
→  ~_svn
→  ~_svn pwd
/var/empty

거기서 무슨 일이 일어났는지 모르겠어요. kadmin_admin이 무엇인지 모르겠습니다. 이제 디렉토리 이름을 변경할 때 디렉토리 이름을 얻고 ~_svn다음을 PWD표시하는 이유는 무엇입니까?/var/empty

이것이 나의 길입니다:

/Users/asgeo1/.rvm/gems/ruby-1.9.3-p194/bin:/Users/asgeo1/.rvm/gems/ruby-1.9.3-p194@global/bin:/Users/asgeo1/.rvm/rubies/ruby-1.9.3-p194/bin:/Users/asgeo1/.rvm/bin:/usr/local/php54/bin:/Users/asgeo1/Projects/dotfiles/bin:/Applications/Postgres.app/Contents/MacOS/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin

나는 거기에서 명백한 것을 볼 수 없습니다.

누군가 이것에 대해 좀 밝혀주세요. 정말 실망스럽네요!

편집하다:누군가 이전에 비슷한 문제를 겪은 것 같습니다. 중지 탭 완료 프롬프트 "messagebus" 그러나 거기에는 대답이 없습니다 :(

고쳐 쓰다:이것은 oh-my-zsh 애플리케이션의 cd 기능입니다:

→  ~  which cd
cd () {
    if [[ "x$*" = "x..." ]]
    then
            cd ../..
    elif [[ "x$*" = "x...." ]]
    then
            cd ../../..
    elif [[ "x$*" = "x....." ]]
    then
        cd ../../..
    elif [[ "x$*" = "x......" ]]
    then
            cd ../../../..
    else
            builtin cd "$@"
    fi
}

답변1

_kadminkadmin아마도 디렉토리가 아닌 도구의 전체 기능일 것입니다 . zsh찾을 수 없는 명령, 디렉터리 또는 유효하고 알려진 명령 인수 완성을 완료 하려고 하면 가능한 확장 후보로 완성 기능을 제공하기 시작합니다. 기본적으로 zsh다수의 완성 프로그램이 함께 제공되며 그 중 다수는 필요하지 않을 수도 있습니다. AIX, BSD, Cygwin, 다양한 Linux 배포판 등을 위한 번들이 있으며 모두 읽고 쉘에 설치합니다. zsh찾을 수 없는 것을 확장하려고 하면 설치된 모든 완성 기능을 제공할 수 있습니다.

zsh다음 파일에 넣어서 더 완전한 기능을 제공하지 않도록 구성 할 수 있습니다 ~/.zshrc.

zstyle ':completion:*:functions' ignored-patterns '_*'

파일을 다시 로드하면 아직 설치되지 않은 도구에 대한 완성 기능이 더 이상 제공되지 않습니다. zshcompsys(많은) 자세한 내용은 맨페이지를 확인하세요 .

편집하다 업데이트 3에 답장하기

_kadmin실제 사용자 계정인 경우 zsh완성시 제공하지 않도록 구성할 수 있습니다. 접근 방식은 쉘이 고려하기를 원하는 사용자 계정을 나열하는 것으로 보이며, 이는 나열된 사용자에게만 부여되는 이름을 제한합니다. 그 zstyle줄은 다음과 같다:

zstyle ':completion:*' users asgeo1 root

태그 뒤에는 사용자 수를 얼마든지 나열할 수 있다고 생각합니다 users. 그런 다음 쉘은 해당 사용자의 홈 디렉토리만 cd기능 또는 내장에 대한 가능한 완성으로 제공합니다.

무시 모드에서 파일에 사용자 이름을 추가하는 것이 작동하지 않는 이유를 모르겠습니다 completion.zsh. 변경한 후 구성을 다시 로드하고 있습니까?

관련 정보