web-dev-qa-db-ja.com

scpコマンドを入力するときにリモートファイルをタブで補完できるようにする魔法は何ですか?

おそらくこれは、oh-my-zshセットアップで有効にしたプラグインによって提供される機能です(私は長年zshを使用しています)。

公開鍵をサーバーに追加してから(パスワードを入力せずにサーバーにSSHで接続できるようになりました)、シェルでscpコマンドを作成すると、リモートファイルをタブ補完できることに気付きましたパス!

例えば.

$ diff <(scp [email protected]:/var/www/html/

タブを押すと、うまくいきます! (コマンド自体で達成しようとしていることに関しては、scpを使用してstdoutに「コピー」し、それをファイルとして差分にフィードします。これにより、正確な変更を確認できます。 rsyncを実行する前にサーバーにデプロイします)

この作品を上手く機能させるための要素について知りたいです。 zシェルと統合されたscpに組み込まれたものですか?または、他の何か?

16
Steven Lu

おお、私は 説明 を見つけました。

関連部分を引用するには:

Zshシェルには、リモートタブ補完などの(複数の)優れた機能が付属しています。たとえば、scp経由でファイルをコピーする場合は、リモートホスト上のファイル名の任意の部分でタブを押すだけです。 zshはバックグラウンドでsshセッションを確立し、関連情報を取得できるので、リモートファイルを介してタブ補完できます。

投稿では、完了を達成するいくつかのzstyle宣言を示していますが、前述の oh-my-zsh などのzshパッケージを使用して、この機能を維持することを強くお勧めしますあなたのためのOSSコミュニティ。

私のシステムの.oh-my-zshディレクトリにあるように、関連があるように見える何か:

$ ack scp 
plugins/common-aliases/common-aliases.plugin.zsh
85:zstyle -e ':completion:*:(ssh|scp|sftp|rsh|rsync):hosts' hosts 'reply=(${=${${(f)"$(cat {/etc/ssh_,~/.ssh/known_}hosts(|2)(N) /dev/null)"}%%
[# ]*}//,/ })'

<...>
16
Steven Lu