zshのbashの代替?

zshのbashの代替?

私は最近bashからzshに切り替えました。

実行するとcomplete -f _ssh sshrc表示されます。

zsh: command not found: complete
  • completezshのbashの代替案は何ですか?

  • zshシェルのオートコンプリートにエイリアスコマンドを追加するには?

答え1

私はあなたが「新しい完成システム」(compinit)を使用していると仮定しています。そうでない場合は、以下を参照してください。

デフォルトでは、zshは完了を実行する前にエイリアスを拡張するため、sshrc追加のオプションがあるエイリアスの場合はsshすぐにコンプリートを取得できます。ただし、sshrc関数やスクリプトの場合は、これを行う方法を説明する必要があります。

コマンドが特定の機能を使用できるようにするには、次のようにします。compdef機能:

compdef _ssh sshrc

ほとんどの完成機能には直面しない追加の困難があります_ssh。コマンド名によって異なりますが、より正確には「サービス名」(デフォルトではコマンド名)によって異なります。_sshコマンド名が認識されない場合、補完機能は提供されません。

sshrcこれを行うには、sshzshに直接指示してください。これはsshrc、実行する機能を設定するだけでなく、正しく機能するように_sshサービス名も宣言しますsshrcssh_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の違いの概要

関連情報