Я работаю в кластере со многими пользователями. В кластере 50 пользователей с той же первой буквой, что и у меня, и пользователь с таким же именем до последней буквы. Когда я нажимаю Tab Complete from, /home/e
я бы хотел видеть только /home/elsherbini/
, вместо того, чтобы вводить еще несколько символов, Tab, а затем вводить последний.
Кажется, FIGNORE не работает с абсолютными путями, только с суффиксами файлов. Есть ли способ игнорировать курируемый список каталогов для автодополнения по табуляции?
GNU bash, версия 4.1.2(1)-релиз (x86_64-redhat-linux-gnu)
решение1
Один из способов, который я бы предложил, — это alias
если нас интересует только home
путь к каталогу, добавить нижеприведенное в ваш адрес profile
, это поможет, какой бы уникальный псевдоним вы ни создали, он должен автоматически заполняться даже с первым символом.
alias myHome="cd /home/elsherbini"
. .profile
my\T
pwd
/home/elsherbini
РЕДАКТИРОВАТЬ:
Другой путь может бытьпривязка ключано даже это потребует быстрого double click
и right click
, учитывая ваше использование в PuTTY
, если это поможет.
completeIt(){ echo "elsherbini"; }
bind -x '"\C-h": completeIt;'
Использование Control-H
приведет к запросу настраиваемой строки, например, вашего имени пользователя. Использование:
$ cd
elsherbini
решение2
Я использую zsh
, что позволяет очень тщательно настраивать завершение. Эта опция предотвращает завершение некоторых шаблонов:
autoload -Uz compinit; compinit
# ignore some common patterns that we usually don't want as completions
zstyle ':completion:*' ignored-patterns "/usr/share/iscan" "/usr/lib/iscan" \
"iscan" "/usr/lib/ispell" "ispell" "/usr/lib64" "/usr/lib32" \
"/usr/libx32" "/usr/libexec" "/srv/tftp" "chkwins" "dpkg-buildflags"
решение3
Вы можете переопределить встроенную функцию compgen
для простого завершения каталогов (как для cd
и ls
). Например, поместите эту функцию в ваш ~/.bashrc
compgen(){
local IFS=$'\n'
local x tmp
x=$( builtin compgen "$@" ) &&
while read -r tmp; do
[[ "$tmp" =~ ^/home/e && ! "$tmp" =~ ^/home/elsherbini$ ]] ||
echo "$tmp"
done <<< "$x"
}
Он запускает встроенную функцию compgen
и фильтрует вывод так, что любые строки, начинающиеся с регулярного выражения ^/home/e
и не соответствующие ему, ^/home/elsherbini$
удаляются из списка возможных завершений. Будьте осторожны, регулярные выражения не заключены в кавычки внутри [[]]
.