Como ter autocomplete ignorar uma conclusão específica

1

Eu tenho preenchimento automático para o bash. Quando eu digito parte de um nome de programa e, em seguida, TAB, recebo o comando completo. Funciona como esperado, sem reclamações.

No entanto, na minha configuração eu tenho um alias definido chamado flexo (que me registra em uma máquina com o mesmo nome). Quando eu digito fle TAB eu recebo apenas flex , porque esse é um programa perfeitamente válido na máquina. Como instruir a conclusão para ignorar essa conclusão específica? Em outras palavras, quero que fle TAB seja completado para flexo e ignore flex completamente. Obrigado.

    
por Chris Eberle 06.05.2011 / 00:54

1 resposta

3
Monkeying com o algoritmo para aba completa para rasgar alguns itens fora da piscina é mais complicado do que você imagina. Na verdade, isso pode ser feito, mas não é fácil, eficiente de usar ou recomendado.

Em vez disso, @jasonwryan estava no caminho certo de que você deveria inventar alguma outra coisa para o seu nome de comando. No entanto, em vez de tentar ficar com uma palavra, o nome de um servidor como um nome de comando, recomendo que você alterne os modelos para um modelo de várias palavras, como o restante do Unix. A conclusão de tabulação para nomes de comandos é bastante diferente da conclusão de tabulações para argumentos, o último é bastante fácil.

Configure um apelido fácil como 's' ou qualquer que seja seu alias de conexão, mas não inclua o nome do host. Em seguida, configure uma rotina de conclusão personalizada para esse comando que APENAS autocomplete para hospedar nomes como:

alias s=ssh
complete -F _known_hosts_real s

Você também pode criar uma função personalizada para isso:

alias s=ssh
_my_hosts() {
    type compopt &>/dev/null && compopt -o nospace
    COMPREPLY=( $( compgen -S = -W 'flexo mexo dexo' -- "$cur") )
}
complete -F _my_hosts s
    
por 06.05.2011 / 08:36