Conclusão da tabulação inteligente (para diretórios)?

7

Existem versões de shell que possuem uma conclusão de tabulação mais inteligente?

Eu gostaria de poder digitar

cd foo-<TAB>

Então me mostraria as possíveis conclusões junto com os números que eu posso digitar para selecionar um deles:

cd foo-<TAB>
(1) foo-bar1  (2) foo-bar2  (3) foo-bad

Então depois <TAB> Eu digitaria 3 e isso me levaria a foo-bad. Alternativamente, usando as teclas de seta em vez de digitar o número seria bom.

dehmann
fonte

Respostas:

10

Você pode ativar menu-complete no Bash para percorrer as entradas na linha de comando cada vez que você pressionar Tab. Isso não é exatamente o que você está procurando. Se você quiser tentar, faça isso no prompt de comando:

bind '"\C-i": menu-complete'

Para fazê-lo persistir, adicione isso ao seu ~/.inputrc Arquivo:

"\C-i": menu-complete

Zsh tem um recurso que permite usar as teclas de seta para selecionar uma entrada. Adicione isto (ou outra variação) ao seu ~/.zshrc Arquivo:

zstyle ':completion:*' menu select=0

Vejo man zshcompsys e procure por "select =" (será na seção para o menu "Standard Style") para mais informações.

Caso contrário, no Bash, você poderia escrever uma função (ou até mesmo criar sua própria função de conclusão) que faria algo baseado no select comando. Isso é extremamente simplista:

$ select a in x y z; do cd $a; done
1) x
2) y
3) z
#?

Você teria que fazer muito para conseguir fazer o que você quer.

Dennis Williamson
fonte
eu gosto do seu select solução. Isso é exatamente o que eu queria! Eu adicionei um break depois de cd $ae eu alias este comando. Isso é muito melhor que a conclusão da guia.
dehmann
@dehman: É parte de "flesh that out". Você precisa de um break declaração. Experimentar: select a in x y z; do cd $a; break; done. Você pode usar find para construir a lista de diretórios para escolher, em vez de codificá-los. Outra coisa que você pode querer olhar é o CDPATH variável (e Aqui ).
Dennis Williamson
9

Você já usa a conclusão normal? experimentar

complete -d cd pushd rmdir

Na sua concha e veja se está perto o suficiente do que você quer.

Você também pode tentar zsh que tem melhor conclusão do que o bash.

Rich Homolka
fonte
2
Eu estava procurando uma maneira de fazer autocomplete para cd excluir não-diretórios. Isso fez isso. Você é demais.
Andy
@Andy confira bash_completion @ bash-completion.alioth.debian.org
Rich Homolka