いくつかのシェル関数が自分.zshrc
で定義されており、入力を省略して画面との統合を可能にします。例えば:
function s()
{
screen -t "$1" ssh "$@"
}
ただし、これらのシェル関数を使用すると、zshに組み込まれているコマンド補完機能を利用できません。(SSHの場合、known_hostsおよびssh_configに基づいてホスト名を自動的に補完します)。ラッパーを作成したコマンドの既存の補完メカニズムにフックするための好ましい方法は何ですか?
編集:
以下の答えをくれたGillesに感謝します。これを行うにはcompdefを使用する方法のように見えますが、興味深いことに、均一に機能するようには見えません。この場合、私は次の設定をしています:
function s()
{
screen -t "$1" ssh "$@"
}
function m()
{
screen -t "man.$1" man "$1"
}
compdef $_comps[man] m
compdef $_comps[ssh] s
ラッパー関数「m」の補完は期待どおりに機能しますが、関数「s」の補完は機能しません。ホスト名を完成させるのではなく、「タブ」を押すとファイルのリストが表示されるため、デフォルトのオートコンプリートにフォールバックするようです。SSH完了の処理方法に奇妙な点がありますか?これは、さらに何かをする必要があることを意味しますか?