我有许多程序将文件名参数作为一个(或多个)
path/to/file
scp:path/to/file.ext
ark:/abs/path/to/file.ext
是否可以在一些关键字后面加上冒号后使 zsh 完成文件名?
在 bash 中,您可以通过添加:
COMP_WORDBREAKS 变量来完成此操作。
感谢吉尔斯,我才得以这样工作。
$ 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
答案1
这是旧帖子,但作为摘要,在 .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 -first-
现在我也可以在 zsh 中完成冒号后的文件名,
$ scp:/path/to/somef<TAB> # now filename completion works after colon