zsh 中的手动选项卡完成

for*_*all 5 zsh autocomplete

我想nm[TAB]扩展到node_moduleszsh。这可能吗?怎么做到呢?

理想情况下,如果有另一个可用完成,例如已经存在的nm目录,则不会触发它,并且仅在存在node_modules文件夹时才触发,如果它是路径的一部分,则完成,例如cd nm/mo[TAB]-> cd node_modules/moment

Mar*_*ert 3

简短而甜蜜的答案

试试我的zsh-autocomplete插件。它配置 Zsh 的完成系统来完成您开箱即用的要求,以及许多其他有用的功能。

更长,DIY 答案

要在 Zsh 中获得模糊补全,请将其添加到您的.zshrc

zstyle ':completion:*' matcher-list 'r:|?=**'
Run Code Online (Sandbox Code Playgroud)

其作用是告诉完成系统允许在您键入的字符串的任何位置添加任意数量的字符。

接下来,要获得您想要的目录功能,请添加以下内容:

zstyle ':completion:*' accept-exact-dirs true
zstyle ':completion:*' list-suffixes true
Run Code Online (Sandbox Code Playgroud)
  • accept-exact-dirs使得当您有两个目录nm并且node_modules您输入时nm,它永远不会尝试将其完成到后者。
  • list-suffixes告诉它尝试完成您输入的路径中的每个部分目录名称,而不仅仅是第一个。

accept-exact-dirs要为所有其他完成也获得-style 行为,请添加以下内容:

zstyle ':completion:*' accept-exact true
Run Code Online (Sandbox Code Playgroud)

更多信息可以在这里找到:http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Standard-Styles