私は最近bashからzshに切り替えました。
実行するとcomplete -f _ssh sshrc
表示されます。
zsh: command not found: complete
complete
zshのbashの代替案は何ですか?zshシェルのオートコンプリートにエイリアスコマンドを追加するには?
答え1
私はあなたが「新しい完成システム」(compinit
)を使用していると仮定しています。そうでない場合は、以下を参照してください。
デフォルトでは、zshは完了を実行する前にエイリアスを拡張するため、sshrc
追加のオプションがあるエイリアスの場合はssh
すぐにコンプリートを取得できます。ただし、sshrc
関数やスクリプトの場合は、これを行う方法を説明する必要があります。
コマンドが特定の機能を使用できるようにするには、次のようにします。compdef
機能:
compdef _ssh sshrc
ほとんどの完成機能には直面しない追加の困難があります_ssh
。コマンド名によって異なりますが、より正確には「サービス名」(デフォルトではコマンド名)によって異なります。_ssh
コマンド名が認識されない場合、補完機能は提供されません。
sshrc
これを行うには、ssh
zshに直接指示してください。これはsshrc
、実行する機能を設定するだけでなく、正しく機能するように_ssh
サービス名も宣言しますsshrc
。ssh
_ssh
compdef sshrc=ssh
内部的にはこの機能が実行されます。
_comps[sshrc]=$_comps[ssh]
_services[sshrc]=ssh
zshの完成システム
Zshには3つの完了メカニズムがあります。「オールドスタイル」締め切りcompctl
、「新スタイル」完成(これは1990年代に導入されたため、まったく新しいものではありません。)Bashで完成した互換性レイヤー。
デフォルトでは、zshは以前のバージョンとの互換性のために古い完成システムを使用します。しかし、新しい完成システムがリリースされた後にzshを使い始める人は誰でもそれを使うべきです。新しいユーザーウィザードは、構成ファイルに必要な行を追加できます。実行する機会がない場合、または再実行したい場合は、次を参照してください。Zsh 初回起動ウィザードの実行で、新しい完成システムを使用を選択し、必要に応じて設定を調整し、保存されるまで変更を確認します。
入れたらbashcompinit
あなたのものはbashとほとんど互換性のある機能を定義.zshrc
します。complete
互換性は完璧ではありませんが、人々が自分のプログラムで書いて配布するほとんどの機能を実行するのに十分です。
PS:zshの新しいユーザーとして、あなたは私のコンテンツに興味があります。Bashとzshの違いの概要。