修正する:

修正する:

私のファイルに次のエントリがあるとしましょう。/etc/hosts

192.168.1.10      server1.mydomain.com

SERVER-FILES現在のディレクトリにディレクトリがあります。私はscp特定のディレクトリが欲しいですSERVER-FILESSEディレクトリ名を完成させるために入力し、オートコンプリートを使用しました。

$ scp -rp SE<TAB>

この完了は完全に明確でなければなりません。ただし、zshオートコンプリートはスマートすぎるし、ホスト名を大文字と小文字を区別せずに処理するため、ホストSE名と一致しようとします。

$ scp -rp SE<TAB>
SERVER-FILES/
server1.mydomain.com

zshが大文字と小文字を区別しないホスト名を一致させてserver1.mydomain.comを完了しようとするこの面倒な機能を無効にするにはどうすればよいですかSE<TAB> to

修正する:

あなたの提案に従って@zeppelinSSH完了ファイルの次の行を変更しましたUnix/_ssh

- compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts
+ compadd "$@" $config_hosts

しかし、これは役に立ちません。まったく効果がありません。

そして私は答えを理解していません@Tomasz Pala。私のzsh補完は大文字と小文字を区別しません。

/usr/share/zsh/functions/Completion/Unix/_foo誰かがこの動作を変えるために何が変わるべきかを教えてください。

アップデート2

私はついに問題の範囲を絞り込み、その解決策が@Tomasz Pala彼には効果がありましたが、私には効果がなかった理由を見つけました。

Unix/_hostsこのソリューションは、新しく設定されたコンピュータ/ユーザーアカウントでファイルを変更するときに機能します。

scp -r SE<TAB>

上記のコマンドはserver1.mydomain.cominを無視し/etc/hosts、完了のためにローカルディレクトリのみを提供しますSERVER-FILES

ただし、アイテムを削除すると、すべてが期待どおりに機能するため、既存のユーザーアカウントでは機能しません server.mydomain.com~/.ssh/config

しかし、現在の状況でもこのハッキングをどのように機能させることができますか~/.ssh/config

ベストアンサー1

2番目の答えは、次の2つのことを行う必要があることを示しています。

1_一般的な一致規則が大文字と小文字を区別しないことを確認してください(matcher-list)。更新された質問によると、そうではありません。

2_変化Unix/(タイプ/)_ホスト(実際の位置は異なる場合がありますが、いいえこれUnix/_ssh- これは~/.ssh/configホストを処理します。以下を参照)最後の2行:

_wanted hosts expl host \
   compadd -M 'm:{a-z}={A-Z} r:|.=* r:|=*' -a "$@" - _hosts

これらのすべてはすでに私の答えにまとめられているので、以前の根拠をすべて読んではいけません。また、グローバル構成は大文字と小文字を区別しないため、$ fpathを使用せずにホストからの小文字->大文字の一致も削除しても@zeppelinの答えも機能します。

アップデートの設定を使用してこれをテストしましたが、期待どおりに機能しました。

更新:zshその機能はロードされたままである必要があるため、変更後に_hosts再度ログインするか、次の手順を実行して再ロードする必要があります。

unfunction _hosts
autoload -Uz _hosts

また、zshスクリプトは()形式で「コンパイル」することができ、そのようなファイルが存在し、ソースファイルよりも最新の場合はそのファイルが使用されることに注意してください。zwczcompile [file]

開示する。アップデート2:

~/.ssh/config定義されたホストを処理することは実際に動作します_hosts- あなたによって異なります。zsh バージョンいずれにせよUnix/(コマンド/)_sshまたはUnix/(タイプ/)_ssh_hosts変化

compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts

並ぶ

compadd -M 'm:{a-z}={A-Z} r:|.=* r:|=*' "$@" $config_hosts

おすすめ記事