据推测,这是我在 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)"}%%
[# ]*}//,/ })'
<...>