Zsh从文件名中间自动完成

时间:2014-03-24 02:45:07

标签: zsh

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

1 个答案:

答案 0 :(得分:14)

是的,这是可能的。它可以在 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:|=*必须在不区分大小写的规则之后立即出现(如果在这两个规则之间只有以+开头的规则,它也可能有效,但我只检查了一些基本组合,哪个有效)