当我输入 scp 命令时,有什么魔力可以让我用 Tab 键补全远程文件?

当我输入 scp 命令时,有什么魔力可以让我用 Tab 键补全远程文件?

据推测,这是我在 oh-my-zsh 设置中启用的某个插件提供的功能(我已经使用 zsh 多年了)。

我注意到,自从我将公钥添加到服务器(现在我可以通过 SSH 连接到服务器而无需输入密码)后,当我scp在 shell 中编写命令时,我实际上能够使用制表符完成远程文件路径!

例如

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

我点击选项卡,它就工作了! (至于我试图用命令本身完成的任务,我将使用scp“复制”到标准输出,并将其作为文件提供给 diff。这样我可以看到我在之前部署到服务器的确切更改跑步rsync

我很好奇是什么让这个作品如此出色。它是 scp 中内置的与 z shell 集成的东西吗?或者是其他东西?

答案1

哦哦,我发现了一个解释

引用相关部分:

zsh shell 具有(多个)出色的功能,例如远程制表符补全。例如,如果您想通过 scp 复制文件,只需在远程主机上的文件名的任何部分按 Tab 键即可。 zsh 能够在后台建立 ssh 会话,并为您获取相关信息,以便您可以通过远程文件进行 tabcomplete。

这篇文章继续展示了一些zstyle实现完成的声明,但我强烈建议使用 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)"}%%
[# ]*}//,/ })'

<...>

相关内容