深入探究 zsh 补全函数:原理、实现与调试
1. zsh 补全函数基础
在 zsh 中,补全函数能完成诸如波浪号后补全用户名、美元符号后补全变量等操作。zsh 与 bash 的补全函数有相似之处,但 zsh 具备更强大的额外功能。
zsh 使用不同名称的特殊变量,且数组索引从 1 开始,命令行上的单词计数也从 1 开始。下面是一个处理 chown 命令的补全函数示例:
_chown() {
if (( CURRENT == 2 )); then
# complete users[.groups]
else
# complete filenames
fi
}
补全文件名可通过调用 _files 函数轻松实现。在补全用户和组时,可使用 compset 命令指定要忽略的当前单词部分。例如,要忽略当前单词中第一个点之前的所有内容,可使用 compset -P '*. ' 命令。以下是补全用户和组的代码示例:
if compset -P '*.'; then
_groups
else
_users
fi
为了进一步优化补全功能,我们可以处理冒号,添加后缀,并在补全用户名时忽略点之后的内容。最终的 _chown 函数如下:
超级会员免费看
订阅专栏 解锁全文
1494

被折叠的 条评论
为什么被折叠?



