zsh 쉘 자동 완성, 함수에서 반환된 파일 및 임의 문자열을 자동 완성하는 방법

zsh 쉘 자동 완성, 함수에서 반환된 파일 및 임의 문자열을 자동 완성하는 방법

예를 들어, rclone 명령을 자동 완성하고 동시에 파일 이름에 대해 동일한 작업을 수행하도록 rclone copy gdr <tab>zsh 를 설정하려고 합니다 .rclone copy gdrive-johnsmith


rclone에는 zsh 자동 완성 파일을 생성하는 명령이 제공되지만 해당 파일은 (위와 같이) 원격 디렉터리 이름을 자동 완성하지 않고 , gdrive-johnsmith:및 와 같은 명령만 자동 완성합니다. 생성된 파일을 열었지만 zsh에서 "올바른 방법" 파일과 함께 원격 이름을 나열하는 방법(목록을 사용할 수 있음)을 평생 알 수 없습니다(copylistremotesauthorizerclone 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!

관련 정보