1

Мне нравится использовать функцию именованных каталогов в zsh, чтобы быстро перемещаться по моей файловой системе (например, чтобы я мог использовать ~ src для переключения в каталог с исходным кодом).

Мне также нравятся функции автозавершения в Zsh.

Однако я работаю в среде с большим количеством пользователей, поэтому, когда я набираю «cd ~ s» и нажимаю «tab», я получаю огромное количество возможностей, соответствующих всем пользователям, начинающимся с s, а не завершающим «~ src». ».

Меня не волнует завершение имен пользователей (за исключением, может быть, моих собственных, но я могу жить без этого) в этой среде. Есть ли простой способ отключить это, но продолжать расширять именованные каталоги?

1 ответ1

2

Функция, которая вызывается после ~ , называется _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-

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .