
たとえば、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
~からReddit:
_alternativesで実行できるアクションには、ディレクトリとrcloneリモートの2種類があります。たとえば、次のようになります。
_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!