私のファイルに次のエントリがあるとしましょう。/etc/hosts
192.168.1.10 server1.mydomain.com
SERVER-FILES
現在のディレクトリにディレクトリがあります。私はscp
特定のディレクトリが欲しいですSERVER-FILES
。SE
ディレクトリ名を完成させるために入力し、オートコンプリートを使用しました。
$ scp -rp SE<TAB>
この完了は完全に明確でなければなりません。ただし、zshオートコンプリートはスマートすぎるし、ホスト名を大文字と小文字を区別せずに処理するため、ホストSE
名と一致しようとします。
$ scp -rp SE<TAB>
SERVER-FILES/
server1.mydomain.com
zshが大文字と小文字を区別しないホスト名を一致させてserver1.mydomain.comを完了しようとするこの面倒な機能を無効にするにはどうすればよいですかSE<TAB> to
?
修正する:
あなたの提案に従って@zeppelin
SSH完了ファイルの次の行を変更しました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.com
inを無視し/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
スクリプトは()形式で「コンパイル」することができ、そのようなファイルが存在し、ソースファイルよりも最新の場合はそのファイルが使用されることに注意してください。zwc
zcompile [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