예를 들어, rclone 명령을 자동 완성하고 동시에 파일 이름에 대해 동일한 작업을 수행하도록 rclone copy gdr <tab>
zsh 를 설정하려고 합니다 .rclone copy gdrive-johnsmith
rclone에는 zsh 자동 완성 파일을 생성하는 명령이 제공되지만 해당 파일은 (위와 같이) 원격 디렉터리 이름을 자동 완성하지 않고 , gdrive-johnsmith:
및 와 같은 명령만 자동 완성합니다. 생성된 파일을 열었지만 zsh에서 "올바른 방법" 파일과 함께 원격 이름을 나열하는 방법(목록을 사용할 수 있음)을 평생 알 수 없습니다(copy
listremotes
authorize
rclone listremotes
파싱 안함:피). 어쨌든, 나는 마침내 포기하고 이것을 했고 이제 내 _rclone 파일은 다음과 같습니다:
#compdef rclone
_arguments \
'1: :->level1' \
'2: :->level2' \
'3: :($(rclone listremotes) $(ls))'
_arguments '*: :($(rclone listremotes) $(ls))'
전체 파일의 길이는 약 38줄이지만 관련 내용이 없는 것 같습니다(필요하면 나머지 부분을 게시할 수 있습니다). "_arguments" 라인은 다음과 같았습니다:
_arguments '*: :_files'
cwd에 원격 및 파일을 나열하도록 변경하기 전에. 위에서 말했듯이 _files를 사용하는 방법이 필요합니다. 현재 방법은 추악하고 파일이나 폴더 이름에 공백이 있을 때마다 작동하지 않습니다. zsh가 공백을 분리하고 모든 것을 함께 결합하기 때문입니다. 이는 끔찍해 보입니다.
17:43:06 /usr/share/zsh/vendor-completions
» rclone copy
_bootctl gdrive-fakeName: _rclone
box-fakeName: _hostnamectl _sd_hosts_or_user_at_host
_busctl _journalctl _sd_outputmodes
_curl _localectl _sd_unit_files
dropbox-google-fakeName: _loginctl _systemctl
등...
어쨌든 zsh에 방법이 있습니까?
- A) _files 함수를 사용하거나 rclone 원격 디렉터리를 자동 완성하기 위해 스페이스바를 눌러도 중단되지 않는 함수를 사용하시겠습니까?
- B) A가 불가능하다면 최소한 일반 디렉터리와 rclone 디렉터리를 (시각적으로) 분리할 수 있는 방법이 있습니까?
ZSH 버전은 5.1.1이고, 운영체제는 KDE 네온 5.11이며, oh-my-zsh도 설치되어 있습니다.
답변1
~에서레딧:
_alternatives로 수행할 수 있는 작업에는 디렉터리 및 rclone 원격과 같은 두 가지 유형이 있습니다. 예를 들어 다음과 같습니다.
_arguments \ '3: : _alternative "files:file:_files" "remotes:remote:($(rclone listremotes))"'
_arguments compadd 옵션을 전달하지 않으려면 _alternative 앞의 공백이 중요합니다.
시각적으로 구분되는지 여부는 스타일 설정에 따라 다릅니다. oh-my-zsh가 이 작업을 수행할 수 있을 것 같지만 그렇지 않은 경우 다음을 시도해 보십시오.
zstyle ':completion:*' group-name '' zstyle ':completion:*:descriptions' format '%B%d%b'
고마워요 /u/okapi-a!