zsh umount 완료: 완료를 하나의 인수로 제한

zsh umount 완료: 완료를 하나의 인수로 제한

zsh 완료 명령을 사용할 때 umount:

umount /mnt/t<TAB>

파일 시스템 설치가 완료됩니다 /mnt/tmp.

그러나 실수로 Tab을 너무 많이 누르면 너무 많은 도움을 주려고 시도하고 다른 마운트 지점을 제안하여 다음과 같은 의미 없는 완료를 초래합니다.

umount /mnt/tmp /

다른 탭에서 추가 매개변수를 추가하지 않도록 제거 완료를 하나의 마운트 지점으로 제한하려면 어떻게 해야 합니까?

다음에서 관련 부분을 찾은 것 같습니다 /usr/share/zsh/functions/Completion/Unix/_mount.

  # Completion for umount.
      local excl='-V --version -h --help'
      args=(
    '(- *)'{-h,--help}'[show help]'
    '(- *)'{-V,--version}'[show version]'
    "($excl -v --verbose)"{-v,--verbose}'[verbose mode]'
    "($excl -n --no-mtab)"{-n,--no-mtab}"[don't write /etc/mtab]"
    "($excl)-r[remount read-only on failure]"
    "($excl)-d[for loopback mount, free loop device]"
    "($excl)-i[don't call /sbin/umount.<fs> helper]"
    "($excl *)-a[unmount all file systems from /etc/mtab]"
    "($excl)-t[specify file system type]:file system type:_file_systems"
    "($excl *)-O[with -a, restrict filesystems by options]:file system option:->fsopt"
    "($excl)-f[force unmount]"
    "($excl)-l[lazy unmount]"
    '*:dev or dir:->udevordir'
      )

  _arguments -C -s "$args[@]" && ret=0

무엇을 수정해야 합니까?

답변1

_arguments복잡한 짐승입니다...옵션이 아닌 인수를 처리하는 부분은

    '*:dev or dir:->udevordir'

*:message:action이는 매뉴얼의 인스턴스입니다. *즉, 옵션이 아닌 모든 인수에 적용됩니다. 옵션이 아닌 첫 번째 인수(의 인스턴스)에만 적용되는 로 *대체 되었습니다 .1n:message:action

    '1:dev or dir:->udevordir'

umount나는 zsh의 구현이 일부 플랫폼에서 여러 파일 시스템을 허용한다는 점에서 더 자유로울 것이라고 생각합니다 .

파일 시스템 다음에 완료 옵션을 중지하려면 -A "-*"에 전달하십시오 _arguments. 즉, 해당 호출을 다음으로 변경하십시오.

  _arguments -C -A "-*" -s "$args[@]" && ret=0

관련 정보