是否有可能让zsh从正确文件名的部分单词中完整地完成文件名?例如,在此文件夹下有(helloABC,helloabc,helloworld),我只想键入(oab + tab)即可获取(helloABC,helloabc)。
是否有可能让zsh从正确文件名的部分单词中完整地完成文件名?例如,在此文件夹下有(helloABC,helloabc,helloworld),我只想键入(oab + tab)即可获取(helloABC,helloabc)。
是的,这是可能的。可以在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:|=*
必须紧接着不区分大小写的规则之后(如果仅有以 +
开头的规则,则此方法也可能有效,但我仅检查了一些基本组合,它们都是可行的)