zsh는 명령/컨텍스트에 관계없이 모든 파일을 확장하거나 완성합니다.

zsh는 명령/컨텍스트에 관계없이 모든 파일을 확장하거나 완성합니다.

zsh에는 상황 인식 완료를 수행하는 명령줄 탭 완성 기능이 있으므로 다음을 수행할 수 있습니다.

# Good:

$ wget g<tab>    # becomes:
$ wget gopher://

$ wget --hea<tab>    # becomes:
$ wget --header=

나는 이 기능을 좋아하지만 zsh가 다른 것이 더 적절하다고 생각하는 상황에서 파일 이름을 완성하지 못하는 경우가 있습니다.

# Bad:

$ file vs-debug.apk
vs-debug.apk: Zip archive data, at least v2.0 to extract
$ adb push v<tab>     # becomes:
$ adb push version

(기본 위젯) ^I에 바인딩했습니다 . expand-or-complete내가 원하는 것은 필터링되지 않은 파일 이름 확장을 수행하는 다른 키를 갖는 것입니다. 예를 들면 다음과 같습니다.

# Desired behaviour:

$ adb push v<shift-tab>     # would become:
$ adb push vs-debug.apk

난 아무것도 못 봤어자쉴러(1)잘 맞는 것 같았지만 다음과 같은 다른 위젯을 사용해 보았습니다.

  • expand-or-complete-prefix
  • menu-expand-or-complete
  • expand-cmd-path
  • expand-word

상황 인식 완료를 잃고 싶지 않습니다. 필터링되지 않은 파일 이름 확장/완성을 수행하기 위해 대체 키 바인딩을 사용하는 방법에 대한 아이디어가 있습니까?

저는 zsh 5.0.2(x86_64-apple-darwin12.4.0) 및 zsh 4.3.17(i686-pc-linux-gnu)을 사용하고 있습니다.

답변1

내장된 위젯은 없지만 위젯을 정의하는 것은 쉽습니다. 나는 당신이 "새로운 스타일" 완성 시스템(에 의해 로드됨 compinit)을 사용하고 있다고 가정합니다.

_complete_files () {
  eval "$_comp_setup"
  _main_complete _files
}
compdef -k _complete_files complete-word '^X/'

완료 기능은 zsh 배포판에 정의된 기능을 따릅니다 Completion/Base. 이것compdef내장은 함수를 완성 위젯으로 선언하고 이를 키에 바인딩합니다.

답변2

더 나은 접근 방식은 zsh가 적절한 완료를 수행하도록 하는 것입니다. 보세요zsh 완료. 다양한 프로그램의 총집합입니다. 완성된 것도 있습니다 adb.

관련 정보