禁止用户在 zsh 中输入 ~ 后完成

禁止用户在 zsh 中输入 ~ 后完成

我喜欢使用 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-

相关内容