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
이는 매뉴얼의 인스턴스입니다. *
즉, 옵션이 아닌 모든 인수에 적용됩니다. 옵션이 아닌 첫 번째 인수(의 인스턴스)에만 적용되는 로 *
대체 되었습니다 .1
n:message:action
'1:dev or dir:->udevordir'
umount
나는 zsh의 구현이 일부 플랫폼에서 여러 파일 시스템을 허용한다는 점에서 더 자유로울 것이라고 생각합니다 .
파일 시스템 다음에 완료 옵션을 중지하려면 -A "-*"
에 전달하십시오 _arguments
. 즉, 해당 호출을 다음으로 변경하십시오.
_arguments -C -A "-*" -s "$args[@]" && ret=0