Configurando a conclusão de tabulação de caminhos no bash ou zsh para se assemelhar ao tcsh

4

Eu sou um usuário tcsh muito tempo, mas todos os garotos legais parecem estar usando ou bash ou zsh hoje em dia (isto é, padrões de conclusão para git ou coisas estão disponíveis para bash e zsh, raramente para tcsh).

Meu problema é que os dois shells têm comportamentos relacionados à conclusão de caminhos que me deixam louco, e estou com muita dificuldade em descobrir como alterá-los para o meu gosto.

Veja alguns exemplos do que estou acostumado a fazer no tcsh que os outros fazem de maneira diferente:

  • /u<TAB> conclui para /usr/
  • Em seguida, a guia lista o conteúdo de /usr/
  • /usr/li<TAB> conclui para /usr/lib e lista lib/ e libexec/
  • Pressionando a guia uma segunda vez, conclui para /usr/lib/
  • Pressionar a guia uma terceira vez lista o conteúdo de /usr/lib/

No bash, não importa quantas vezes eu clique em "tab", ele nunca passará de /usr/lib , exigindo que eu digite a barra, o que eu não quero fazer.

Em zsh, /usr/li<TAB> primeiro é preenchido com /usr/lib , outra guia lista lib/ e libexec/ , uma terceira tabulação completa para /usr/lib/ e todas as guias subseqüentes alternam entre /usr/lib/ e /usr/libexec/ . Não tenho ideia de como superar esse ponto. Eu só quero ir de /usr/li para /usr/lib , então /usr/lib/ , então liste seu conteúdo.

O mesmo vale para python. No tcsh, eu digito pyt<TAB> , ele completa em python e lista python , python2.5 , python2.6 , etc, então uma segunda guia é definida para python e adiciona o espaço. No bash ele requer que eu digite o espaço e em zsh ele roda infinitamente como no primeiro exemplo.

Qualquer ajuda para domesticar essas camadas seria muito apreciada. Eu realmente não quero perder tempo aprimorando os outros aspectos dessas camadas até resolver o problema acima.

    
por Olivier 'Ölbaum' Scherler 05.05.2011 / 15:02

2 respostas

2

Bem feito ao descrever seus requisitos com precisão, mas não tenho certeza se realmente entendo o que você quer fazer se houver uma ambiguidade, por exemplo, depois de /usr/lib , o que você espera que a tecla Tab faça.

Se eu tentar o tcsh, depois de /usr/lib , a tecla Tab listará apenas lib e libexec . Você pode reproduzir esse efeito em zsh com setopt no_auto_menu , mas isso pode alterar o comportamento de formas que você não gosta em outros casos. Se você também faz setopt rec_exact , o comportamento se parece com o que você descreve: depois de /usr/li , Tab insere b , então outra Tab insere / e uma terceira lista as conclusões em /usr/lib/ .

As opções de conclusão do zsh estão documentadas em "Conclusão" em man zshoptions .

    
por 06.05.2011 / 01:57
1

Para o bash: no seu ~/.inputrc put:

set show-all-if-unmodified  on
    
por 05.05.2011 / 15:59