首页 > 解决方案 > zsh 完成 - 自定义脚本结果的子字符串

问题描述

假设我的 中有以下内容.zshrc

hello() { 
  echo "Hello $1!" 
}

hello_list() {
  echo "${1}foo"
  echo "${1}bar"
  echo "foo${1}bar"
  echo "foobar${1}"
}

_hello() { 
  compadd $(hello_list ${words[2]})
} 

compdef _hello hello

如果我输入hello bob<TAB>,我会得到:

bobbar  bobfoo

根据我对文档的阅读,我认为这是因为我有zstyle ':completion:*' matcher-list ''许多ohmyzsh配置文件之一。

当我按下制表符时,如何获得基于子字符串匹配显示的列表?我真的很难理解文档。

标签: zshoh-my-zsh

解决方案


尝试更改_hello为:

_hello() { 
  compadd -M 'l:|=* r:|=*' $(hello_list ${words[2]})
}

我在这里偶然发现了第 6.7.5 节中的一些注释:http: //zsh.sourceforge.net/Guide/zshguide06.html导致我这样做。该链接表明您可以使用zstyle设置启用子字符串匹配,但我无法让其中任何一个在我的系统上运行。


推荐阅读