我有许多程序将文件名参数作为一个(或多个)
path/to/file
scp:path/to/file.ext
ark:/abs/path/to/file.ext
是否可以在某些关键字后跟冒号后使 zsh 完成文件名?
在 bash 中,您可以通过添加:
到 COMP_WORDBREAKS 变量来做到这一点。
多亏了 Gilles,我才得以这样工作。
$ cat ~/.zshrc
...
function aftercolon() {
if compset -P 1 '*:'; then
_files "$expl[@]"
else
_files "$expl[@]"
fi
}
autoload -Uz compinit
compinit
compdef aftercolon hello olleh
现在在命令hello
和olleh
之后完成:按预期工作。
我认为可能有更好的方法,因为:
我有奇怪的 if/else 子句,因为这些命令也采用不带前缀的文件名。
而且由于我有很多命令采用这种参数,所以我需要添加每个命令的名称。
如果可能,我想将其应用于所有命令。如果更容易,也可以将其应用于所有命令
--
对于那些可能需要的人,现在我找到了稍微简单的方法。在您的 .zshrc 文件中插入以下内容
function aftercolon() {
compset -P '*:' # strip stuff up to last :
compset -S ':*' # strip stuff after next colon
_default -r '\-\n\t /:' "$@" # do default completion on this
}
compdef aftercolon cmd1 cmd2 cmd3 cmd4
# to apply to all commands
compdef aftercolon -first- # https://superuser.com/questions/1080452/add-strings-to-zsh-tab-completion-for-all-commands-and-arguments
这是旧帖子,但作为摘要,在 .zshrc
现在我也可以在 zsh 中完成冒号后的文件名,