Zsh完成大小写不敏感的_multi_parts函数

时间:2017-08-24 20:04:38

标签: zsh zsh-completion

我有一个脚本,它接受类似参数的文件(多部分参数),我获取可能的值并将它们放在一个名为raw的数组中,然后使用

_multi_parts / "(${raw[@]})" 

自动完成。问题是,这是区分大小写的,我如何才能输入mycommand get fo并按Tab如果mycommand get Foo/是其中之一,它会自动完成Foo原始的东西。

完整完成在此供参考:

_mycommand() {
  local curcontext="$curcontext" state line

  _arguments "1: :->command" "*: :->label"

  case $state in
  command)
    _arguments "1: :(add get ls rm)"
  ;;
  *) 
    case $words[2] in
      add|get|ls|rm)
        if [ -f ~/.pts ]; then
          IFS=$'\n' read -d '' -r raw <<< "$(mycommand ls)"
          _multi_parts / "(${raw[@]})"
        fi
      ;;
      *)
        _files
      ;;
    esac
  esac
}

_mycommand "$@"

mycommand ls输出类似以下名称的路径:

Foo/Bar/x
Foo/Bar/y
Derp/z
Placeholder/z

1 个答案:

答案 0 :(得分:0)

好吧我明白了:

更改行

IFS=$'\n' read -d '' -r raw <<< "$(mycommand ls)"
_multi_parts / "(${raw[@]})"

IFS=$'\n' raw=($(mycommand ls))
_multi_parts -M "m:{[:lower:][:upper:]}={[:upper:][:lower:]}" / raw