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

3

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

Parece que o FIGNORE não funciona em caminhos absolutos, apenas sufixos de arquivo. Existe uma maneira de ignorar uma lista com curadoria de diretórios para conclusão de tabulação?

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

    
por elsherbini 24.06.2016 / 14:53

3 respostas

1

Uma maneira que eu sugiro é ter um alias se estivermos preocupados apenas com o caminho do diretório home , adicionando o abaixo ao seu profile ajudaria aqui, qualquer alias exclusivo que você fizer deve ser preenchido automaticamente com um primeiro personagem.

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

EDITAR:

A outra maneira poderia ser vincular uma chave , mas mesmo isso exigiria um% rápidodouble click e right click , considerando seu uso em PuTTY , se isso ajudar.

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

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

$ cd
elsherbini
    
por 24.06.2016 / 15:30
1

Estou usando zsh , o que permite que o preenchimento seja totalmente personalizado. Esta opção impede que determinados padrões sejam concluídos:

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"
    
por 24.06.2016 / 16:29
1

Você pode substituir o compgen embutido para conclusões de diretório simples (como cd e ls ). Por exemplo, coloque esta função no 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 compgen incorporado e filtra a saída para que qualquer linha que comece com o regex ^/home/e e não corresponda a ^/home/elsherbini$ removido da lista de possíveis conclusões. Cuidado, os regexes não são citados dentro de [[]] .

    
por 24.06.2016 / 20:30