我喜欢使用 zsh 的命名目录功能来快速移动我的文件系统(例如,我可以使用 ~src 切换到我的源代码目录)。
我还喜欢 zsh 的自动完成功能。
但是,我在一个拥有大量用户的环境中工作,因此当我键入“cd ~s”并按 Tab 键时,我会得到大量的可能性,以匹配所有以 s 开头的用户,而不是完成“~src”。
在这个环境中,我并不真正关心用户名的填写(也许除了我自己的用户名,但没有它我也能活下去)。有没有一种简单的方法可以禁用此功能,但仍能继续扩展命名目录?
答案1
~
在调用a 之后调用的函数_tilde
(因为它是声明为compdef -tilde-
). 定义自己的函数:
_bangfalse_tilde () {
# The standard _tilde function with users removed
[[ -n "$compstate[quote]" ]] && return 1
local expl suf ret=1
if [[ "$SUFFIX" = */* ]]; then
ISUFFIX="/${SUFFIX#*/}$ISUFFIX"
SUFFIX="${SUFFIX%%/*}"
suf=(-S '')
else
suf=(-qS/)
fi
_tags users named-directories directory-stack
while _tags; do
_requested named-directories expl 'named directory' compadd "$suf[@]" "$@" -k nameddirs && ret=0
_requested directory-stack && _directory_stack "$suf[@]" && ret=0
done
(( ret )) || return 0
}
compdef _bangfalse_tilde -tilde-