завершение zsh — подстрока к результатам пользовательского скрипта

#zsh #oh-my-zsh

#zsh #oh-my-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 конфигурационных файлов.

Как я могу получить список, который отображается на основе соответствия подстроки при нажатии tab? Я действительно изо всех сил пытаюсь понять документы.

Ответ №1:

Попробуйте изменить _hello на это:

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

Я наткнулся на некоторые заметки в разделе 6.7.5 здесь: http://zsh.sourceforge.net/Guide/zshguide06.html это привело меня к этому. Эта ссылка указывает, что вы можете включить совпадение подстрок с zstyle настройками, но я не смог заставить ни одну из них работать в моей системе.