Zsh 탭 완성이 부분 경로에 대해 원하는대로 작동하지 않습니다


17

의 파일과 디렉토리에 대해 대소 문자를 구분하지 않는 퍼지 완료를 원합니다 zsh. 몇 시간 동안 매뉴얼을 읽은 후에 이것이 내가 생각해 낸 것입니다.

zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'

또한 TAB한 번 눌러 가능한 완료를 표시 하고 정확히 하나의 완료가 있으면 입력 한 내용 만 수정하고 싶습니다. 그런 다음 다시 누르면 TAB"메뉴 완료"모드로 전환됩니다. 매뉴얼을 바탕으로 나는 이것을 생각해 냈습니다.

zstyle ':completion:*' menu select

이제는 한 가지 상황을 제외하고 모든 것이 제대로 작동합니다. 두 개의 폴더가 Desktop있고 .rstudio-desktop홈 디렉토리에 있습니다. 내가 있기 때문에 setopt globdots다음을 입력 할 것으로 예상됩니다.

$ cd ~/dktop<TAB>

입력 한대로 내 명령을 그대로두고 완료 후보 Desktop및 로 표시 .rstudio-desktop합니다. 대신을 제거 dktop 하여 다음과 같이 남겨 둡니다.

$ cd ~/

관련 매뉴얼, 가이드, Stack Exchange 질문 및 기타 다양한 소스를 모두 살펴 보았습니다. 그러나 내가 무엇을하든이 작업을 수행 할 수 없습니다.

흥미롭게도,하지만 난 경우 홈 디렉토리 예상대로 다음 다음 모든 작업을 입력 :

$ cd dktop<TAB>

즉, 경로의 선행이 아닌 세그먼트에만 문제가 있습니다 ( C-x h이것은 사용중인 태그가 directories아닌 태그에 해당한다는 것을 알 수 있습니다 local-directories).

쉬운 재현성을 위해 여기~/.zshrc위에서 설명한 상황과 동작을 재현하는 것이 있습니다 ( zshHomebrew에서 새로운 El Capitan 가상 머신 에서 테스트 됨 ).


재생할 수 없습니다. zsh 5.3.1Arch Linux. cd ~/dktop<tab>수율 cd ~/Desktop.
PythonNut

@PythonNut zsh 5.3.1OS X에서는이 문제가 재현됩니다. 운영 체제간에 차이가 있다는 것은 흥미 롭습니다.
Radon Rosborough

1
@PythonNut 사실, Linux는 대소 문자를 구분하고 macOS는 대소 문자를 구분하지 않기 때문입니다.
Radon Rosborough

모든 Mac / macOS가 대소 문자를 구분하지는 않는 친숙한 알림처럼 디스크가 대소 문자를 구분하지 않는지 여부에 따라 다릅니다.
konqui

답변:


1

가능한 해결책은 다음과 같습니다.

bindkey "^I" expand-word

이로 인해 탭 ~/이 절대 경로 로 확장 됩니다.


어쩌면 누락 된 것이 있지만 이것이 탭 완성을 퍼지거나 위에서 설명한 문제를 해결하는 것과 어떤 관련이 있는지 알 수 없습니다. 제안한대로 Tab 키를 누르면 나에게 메시지 cd /Users/raxod502/dktop가 표시되고 완료가 비활성화됩니다.
Radon Rosborough

@RadonRosborough 희망은 ~/퍼지 완료가 작동하기 시작할 절대 경로 로 확장함으로써 희망이었습니다 . 문제가 한 번 평가되지만 실제로 작동하기 위해 두 번 평가 해야하는 경우 중 하나 인 것처럼 보였으므로 대신 절대 경로를 사용하면 ~/하나의 평가만으로 돌아갈 수 있습니다. 그러나 쓰레기, 죄송합니다. 바인드 키가 오래된 바인딩을 대체한다는 것을 잊어 버렸습니다. 두 기능을 하나의 키에 바인딩 할 수 있는지 말하는 것도 찾을 수 없습니다. 내 bindkey가 없으면 절대 경로가 주어질 때 완성이 의도 한대로 작동합니까?
닌자

아니요. 입력 경로인지 ~/dktop또는 /Users/raxod502/dktop; 결과는 동일합니다. 즉, dktopTab 키를 누르면 삭제됩니다.
Radon Rosborough
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.