Zsh自动补全文件名中间部分

17

是否有可能让zsh从正确文件名的部分单词中完整地完成文件名?例如,在此文件夹下有(helloABC,helloabc,helloworld),我只想键入(oab + tab)即可获取(helloABC,helloabc)。


我正在运行 oh-my-zsh,它似乎可以正常工作。 - Rodaine
3
以下是另一种解决方案,它是在一个类似的话题中编写的--https://unix.stackexchange.com/a/390849/197796 - ILUXA
1个回答

32

是的,这是可能的。可以在zsh自动补全系统中启用此功能。

将以下行添加到您的.zshrc文件中即可拥有此功能:

zstyle ':completion:*' completer _complete
zstyle ':completion:*' matcher-list '' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' '+l:|=* r:|=*'
autoload -Uz compinit
compinit
  • _completer 提供正常的补全行为

  • 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' '+l:|=* r:|=*' 处理不区分大小写的匹配,并且匹配可能发生在当前单词的两侧(即从文件名的中间部分匹配)。

注意:这些或类似的行可能已经在您的~/.zshrc文件中。在这种情况下,您可能需要编辑它们:

  • 如果不存在,请添加 _complete 到以定义 completer 开头的行中

  • 如果已经存在,则不区分大小写的规则可能看起来不同,例如 m:{A-Za-z}={a-zA-Z},您可以将其替换或保留不变。

    +l:|=* r:|=* 必须紧接着不区分大小写的规则之后(如果仅有以 + 开头的规则,则此方法也可能有效,但我仅检查了一些基本组合,它们都是可行的)


这个解决方案对我没用(zsh 5.7.1,没有oh-my-zsh)。但是将此处所示的行添加到我的.zsh中就可以了。 - SergiyKolesnikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接