【问题标题】:How to remove the file extension in a zsh completion?如何在 zsh 完成中删除文件扩展名?
【发布时间】:2023-12-10 18:25:01
【问题描述】:

我想调整 zsh 以便我可以完成标签:

myprog <tab>

使用~/somedir 中的所有*.foo 文件,但拥有它以便在不带.foo 扩展名的情况下显示它们

有什么办法吗?

这是我目前所拥有的:

#compdef myprog
typeset -A opt_args
local context state line
local -a mydirs
mydirs="(. ~/somedir)"

_arguments -s -S \
    "*:name:->foos" \
    && return 0

case $state in
    (foos)
        _files -W ${mydirs} -g '*.foo(:r)' && return 0
    ;;
esac

return 1

但是,这会为每个文件显示双倍的输出(即,每个 .foo 文件都会列出,有无扩展名)。有没有办法解决这个问题?

【问题讨论】:

    标签: string zsh file-extension tab-completion


    【解决方案1】:

    我相信您需要设置file-patterns 样式,可能使用'%p:globbed-files'

    【讨论】:

    • 您介意扩展一下这个答案吗?我对 zsh 的补全语法并不完全熟悉,并且无法推断从哪里开始。
    • Nvm,知道了:zstyle ':completion:*' file-patterns '%p:globbed-files:' 属于我的 .zshrc。谢谢!
    最近更新 更多