Ste*_* Lu 16 shell zsh autocomplete
大概这是我在 oh-my-zsh 设置中启用的某个插件提供的功能(我已经使用 zsh 很多年了)。
我注意到自从我将我的公钥添加到服务器(现在我可以在不输入密码的情况下通过 SSH 连接到服务器),当我scp在我的 shell 中编写一个命令时,我实际上能够完成远程文件路径!
例如
$ diff <(scp Remoteuser@remote.domain.net:/var/www/html/
Run Code Online (Sandbox Code Playgroud)
我点击了标签,它就起作用了!(至于我试图用命令本身完成什么,我将使用scp“复制”到标准输出,并将其作为文件提供给差异。这样我可以看到我在之前部署到服务器的确切更改运行rsync)
我很好奇是什么部分使这项工作如此顺利。它是否内置于与 z shell 集成的 scp 中?或者是其他东西?
Ste*_* Lu 16
哦,我找到了一个解释。
引用相关部分:
zsh shell 带有(不止一个)强大的功能,例如远程制表符补全。例如,如果您想通过 scp 复制文件,只需在远程主机上的文件名的任何部分点击 Tab。zsh 能够在后台建立一个 ssh 会话,并为您获取相关信息,因此您可以通过远程文件进行 tabcomplete。
这篇文章继续展示了一些zstyle实现完成的声明,但我强烈建议使用 zsh 包,比如前面提到的oh-my-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)"}%%
[# ]*}//,/ })'
<...>
Run Code Online (Sandbox Code Playgroud)