ZSH完成使用compadd -U删除参数

时间:2018-04-02 15:48:53

标签: zsh completion

我正在尝试向自定义vs函数添加完成,该函数基本上打开与参数匹配的第一个文件名。

可选(如果您想了解有关此功能的更多信息,请在此处找到我的中文帖子=> https://medium.com/@victor.boissiere/how-to-quickly-open-files-with-your-editor-1a51b3fe21bf

在我当前的文件夹中,我有以下内容:

  • ./example.sh
  • ./custom/directory.sh
  • ./custom/example.sh

行为

vs direct<TAB> =&gt;完成custom/directory.sh成功

vs example<TAB> =&gt; vs

为什么删除参数,并且不允许我在example.shcustom/example.sh之间进行选择?

代码

_vs() {
  local curcontext="$curcontext" state line expl

  _arguments -C \
    '*:: :->open_files'

  case "$state" in
    open_files)
      local file=${words[CURRENT]}
      compadd -U - `find . -type f -ipath "*$file*" | sed "s|^\./||"`
      ;;
  esac
  return 0
}

compdef _vs vs

1 个答案:

答案 0 :(得分:0)

我刚刚找到了解决方案,感谢这篇文章=&gt; https://superuser.com/questions/1264778/changing-to-a-directory-found-somewhere-in-the-tree-hierarchy/1278919#1278919

我只需要添加compstate[insert]=menu # no expand

解决方案

_vs() {
  local curcontext="$curcontext" state line expl

  _arguments -C \
    '*:: :->open_files'

  case "$state" in
    open_files)
      local file=${words[CURRENT]}
      compadd -U - `find . -type f -ipath "*$file*" | sed "s|^\./||"`
      compstate[insert]=menu # add this
      ;;
  esac
  return 0
}

compdef _vs vs