ZSH 补全用 compadd -U 删除参数

ZSH completion removes the argument with compadd -U

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

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

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

行为

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

vs example<TAB> => 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

多亏了这个 post => 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