사용자 정의 스크립트에 대한 zsh 완성 파일이 있습니다 foo
.
다음 위치에서 일반 파일을 완료해야 합니다 $HOME/foo
.
#compdef foo
_arguments -S : \
'-i' \
'1:thing:_path_files -W $HOME/foo -g "*(.)"'
수정해야 할 내용은 다음과 같습니다.
선택적 매개변수를 추가합니다 --dir
.
를 입력하면 foo --dir<TAB>
디렉토리에 대한 완성 기능이 제공되어야 합니다.$HOME/foo
foo --dir=<TAB>
또한 파일 완료 경로( $HOME/foo
기본값)를 로 변경해야 합니다 $HOME/foo/my_dir
. 여기서 my_dir
제공된 이름은 입니다 --dir=my_dir
.
고쳐 쓰다:
기본적으로 완성 규칙에는 두 가지 작동 모드가 있어야 합니다.
- 를 입력하면
foo -<TAB>
선택적 매개변수( )가 제공되어야 합니다-d
-w
-l
-i
. 그런 다음 선택한 선택적 매개변수에 따라 다음을 수행합니다.
1a) foo -d <TAB>
경로의 완전한 디렉토리만
1b) foo -w / -l / -i <TAB>
경로의 일반 파일 완성
이것은 예상대로 작동합니다.
- 를 입력하면
foo <TAB>
완성 규칙이 경로에 일반 파일을 제공해야 합니다. 현재 예상대로 작동하지 않습니다. 여전히 선택적 매개변수가 제공되므로 디렉토리/파일을 완료하기 전에 하나를 선택해야 합니다.
foo <TAB>
( 없이 ) 입력하면 -
옵션 매개변수만 제공됩니다. 내 완성 규칙은 선택적 매개 변수 중 하나를 선택한 경우에만 경로에 디렉터리/파일을 제공합니다.
선택적 인수 없이 작동하고 이 경우 경로의 일반 파일만 완성하도록 스크립트를 수정하려면 어떻게 해야 합니까?
완성 규칙은 다음과 같습니다.
#compdef foo
local -A opt_args
_arguments -S -C \
'-i[select file]:thing_file:_path_files -W $HOME/manuals/${opt_args[-d]} -g "*(.)"' \
'-l[select file]:thing_file:_path_files -W $HOME/manuals/${opt_args[-d]} -g "*(.)"' \
'-w[select file]:thing_file:_path_files -W $HOME/manuals/${opt_args[-d]} -g "*(.)"' \
'-d[select directory]:directory_file:_path_files -/ -W $HOME/manuals' \
&& return 0
마지막으로 작은 질문이 하나 있습니다. 완료 규칙에서는 하나의 선택적 매개변수만 예상(완료)합니다.
입력할 때 foo -i -<TAB>
나머지 선택적 매개변수는 제공되지 않습니다. 이러한 매개변수는 상호 배타적이어서는 안 됩니다. 다음을 사용하여 작동해야 합니다.
foo -i -l -w <TAB>
답변1
그렇게:
#compdef foo
local -A opt_args
_arguments -S -C \
'-i[select file]:thing_file:_path_files -W $HOME/foo/${opt_args[-d]} -g "*(.)"' \
'-d[select directory]:directory_file:_path_files -/ -W $HOME/foo' \
&& return 0
해당 기능이 어떻게 작동하는지 설명하세요.
~/foo 생성:
mkdir ~/foo
~/foo에 10개의 디렉터리를 만듭니다.
mkdir ~/foo/DIR{1..10}
4번 디렉토리에 파일을 생성합니다:
$ touch ~/foo/DIR4/FILE4
그리고 ~/foo에 있는 파일:
touch ~/foo/FILE-IN-FOO
유형
음식
그리고 를 누르세요 Tab. 보여주다:
$foo -d DIR1/
DIR1/ DIR10/ DIR2/ DIR3/ DIR4/ DIR5/ DIR6/ DIR7/ DIR8/ DIR9/
디렉토리만 표시되므로 FILE-IN-FOO는 없습니다.
DIR4를 선택하고 -i를 추가합니다.
foo -d DIR4 -i
그리고 를 누르세요 Tab. 보여주다:
foo -d DIR4 -i FILE4