Command line 如何使用通配符在zsh中的远程服务器上自动完成?

Command line 如何使用通配符在zsh中的远程服务器上自动完成?,command-line,autocomplete,zsh,Command Line,Autocomplete,Zsh,我最喜欢的zsh功能之一是自动完成,尤其是在联网机器上完成文件名时。但是如何包含通配符(比如*)并在远程机器上自动完成呢 例如,假设我在服务器上有file1、file2和file3;我想把所有这些文件复制到我的本地机器上,所以我输入 scp server:~/fi<tab> 但是当我尝试使用通配符时 scp server:~/file*<tab> scp服务器:~/file* 它所做的一切都会向我发出哔哔声(如果文件路径是本地的,它会正常工作)。是否有一组zsh选项

我最喜欢的zsh功能之一是自动完成,尤其是在联网机器上完成文件名时。但是如何包含通配符(比如*)并在远程机器上自动完成呢

例如,假设我在服务器上有file1、file2和file3;我想把所有这些文件复制到我的本地机器上,所以我输入

scp server:~/fi<tab>
但是当我尝试使用通配符时

scp server:~/file*<tab>
scp服务器:~/file*
它所做的一切都会向我发出哔哔声(如果文件路径是本地的,它会正常工作)。是否有一组zsh选项可以实现这一点?我发现了GLOB_COMPLETE和EXTENDED_GLOB,但我能做的最好的组合是自动完成单个匹配,或循环所有匹配,但不要将自动完成扩展到所有匹配(就像在本地命令行上那样)。这真的有可能吗

谢谢

兰迪

你的例子对我来说非常好。我不知道是什么让它在我的系统上工作,但以下是我设置的:( 始终 cbases 扩展全局 互动的 交互注释 班长 辛斯丁)。我的.zshrc有:

zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate
zstyle ':completion:*' max-errors 1 numeric
zstyle ':completion:*' menu select=2
autoload -Uz compinit zsh-mime-setup
compinit
正如我在上提到的:认为设置GLOB_COMPLETE应该改变这一点

setopt GLOB_COMPLETE
man zshoptions

地球仪

当当前单词有一个glob模式时,不要插入扩展产生的所有单词,而是生成匹配项作为补全,并像MENU_COMPLETE那样循环它们。匹配项的生成就像在单词末尾添加了一个“*”一样,或者在设置了COMPLETE_IN_word时插入了光标。这实际上使用模式匹配,而不是全局匹配,因此它不仅适用于文件,而且适用于任何完成,例如选项、用户名等

请注意,使用模式匹配器时,不能使用匹配控件(例如,不区分大小写或锚定匹配)。此限制仅适用于当前单词包含模式时;简单地打开GLOB_COMPLETE选项没有这种效果

我也有同样的问题! 我成功地执行了以下命令: scp“user@server:/dir/*“localdir


双引号逃避完成。

属于您必须编写一个完成函数,该函数将实际通过ssh连接到远程主机并检索文件列表。@Dennis Williamson此函数已经存在,并提供了良好的结果。问题是如何将所有结果一次推送到命令行。是的,Dennis,我在我的作品中也提到了这一点。那么,“问题是如何将所有结果一次推送到命令行。”?:)保罗,这是苏的节目;我先把它贴在那里,但没有得到任何回应。至少我被咬了一口所以。。。
setopt GLOB_COMPLETE