ZSH:tab按名称在子目录中完成文件

ZSH:tab按名称在子目录中完成文件,zsh,zsh-completion,Zsh,Zsh Completion,我希望能够在zsh中键入文件名,点击tab,并在我当前目录的任何子目录中看到与该名称匹配的文件列表。然后我可以对这些结果进行制表,然后按enter键选择某个文件,就像内置的zsh制表完成功能一样 所需功能示例: $ emacs app.css [tab] *www/css/app.css* tmp/static/app.css [enter] $ emacs www/css/app.css 如果这不是当前的功能,我假设我可以编写一个自定义完成脚本来实现它。您可以通过利用**模式(多个目录

我希望能够在zsh中键入文件名,点击tab,并在我当前目录的任何子目录中看到与该名称匹配的文件列表。然后我可以对这些结果进行制表,然后按enter键选择某个文件,就像内置的zsh制表完成功能一样

所需功能示例:

$ emacs app.css [tab]
*www/css/app.css*    tmp/static/app.css
[enter]
$ emacs www/css/app.css

如果这不是当前的功能,我假设我可以编写一个自定义完成脚本来实现它。

您可以通过利用
**
模式(多个目录上的匹配)和将控制功能
\u expand
添加到
完成器
样式(如果还没有)来实现类似的功能

至少,您需要进行以下设置:

autoload -U compinit
zstyle ':completion:*' completer _expand
compinit
然后,您可以使用

% emacs **/app.css[TAB]

它甚至允许一次打开所有匹配的文件。

那么你的问题是什么?我非常喜欢这个解决方案,但当我将它放在.zshrc文件中时,它会阻止标准选项卡complete工作。我需要把它放在哪里,这样我才能使它与标准选项卡一起工作?我使用的是zsh autosuggestions,我是一名软件开发人员,但我以前没有做过shell脚本。从我所看到的,它不应该干扰zsh autosuggestions。但是,如果您的
~/.zshrc
中已经配置并加载了
compinit
,那么只需按原样添加它可能会禁用某些设置。检查,如果您的配置中已经有这些行中的任何一行,在这种情况下,您可以将
\u expand
添加到
completer
后面的参数列表中。例如,在我自己的配置中,我有
zstyle':completion:'completer\u expand\u complete\u approximate
。如果您没有这些行(尤其是
compinit
),则可能没有使用“新的”(自2000年起)完成系统。