Игнорировать указанные абсолютные каталоги с помощью табуляции?

Игнорировать указанные абсолютные каталоги с помощью табуляции?

Я работаю в кластере со многими пользователями. В кластере 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$удаляются из списка возможных завершений. Будьте осторожны, регулярные выражения не заключены в кавычки внутри [[]].

Связанный контент