Ignorar diretórios absolutos especificados com conclusão de tabulação?

Ignorar diretórios absolutos especificados com conclusão de tabulação?

Eu trabalho em um cluster com muitos usuários. Existem 50 usuários no cluster com a mesma primeira letra do meu nome de usuário e um usuário que tem o mesmo nome até a última letra. Quando eu tabular, /home/egostaria de ver apenas /home/elsherbini/, em vez de ter que digitar mais alguns caracteres, tabular e digitar o último.

Parece que o FIGNORE não funciona em caminhos absolutos, apenas em sufixos de arquivo. Existe uma maneira de ignorar uma lista selecionada de diretórios para preenchimento de guias?

GNU bash, versão 4.1.2(1)-release (x86_64-redhat-linux-gnu)

Responder1

Uma maneira que eu sugiro é ter um, aliasse estivermos apenas preocupados com o homecaminho do diretório, adicionar o abaixo à sua profileajuda aqui, qualquer alias exclusivo que você criou deve ser preenchido automaticamente até mesmo com um primeiro caractere.

alias myHome="cd /home/elsherbini"
. .profile
my\T
pwd
/home/elsherbini

EDITAR:

A outra maneira poderia servinculando uma chavemas mesmo isso exigiria um rápido double clicke right click, considerando seu uso PuTTY, se isso ajudar.

completeIt(){ echo "elsherbini"; }
bind -x '"\C-h": completeIt;'

O uso de Control-Hsolicitaria sua string personalizada, digamos, seu nome de usuário. Uso:

$ cd
elsherbini

Responder2

Estou usando zsho que permite que o preenchimento seja totalmente personalizado. Esta opção impede a conclusão de certos padrões:

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"

Responder3

Você pode substituir o built-in compgenpara conclusões simples de diretório (como para cde ls). Por exemplo, coloque esta função em seu ~/.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"
}

Ele executa o builtin compgene filtra a saída para que quaisquer linhas que comecem com o regex ^/home/ee não correspondam ^/home/elsherbini$sejam removidas da lista de possíveis conclusões. Cuidado, as regexes não são citadas dentro de [[]].

informação relacionada