Como obter o equivalente da conclusão aprimorada do tcsh no bash?

3

Na página de manual do tcsh , os efeitos de set complete = enhance são definidos da seguinte forma:

[...] completion 1) ignores case and 2) considers periods, hyphens and underscores ('.', '-' and '_') to be word separators and hyphens and underscores to be equivalent.

No que diz respeito a 1), sei que readline pode ser configurado para ignorar maiúsculas e minúsculas até set completion-ignore-case on . Então, minha pergunta diz respeito apenas a 2).

Por exemplo, se eu tiver um diretório contendo vários arquivos com nomes semelhantes, mas extensões diferentes como esta:

$ ls
file0.dat file1.dat file2.dat files.sh

então eu quero que o shell seja capaz de completar a extensão do arquivo:

$ cat .sh<TAB>
$ cat files.sh

Existe uma maneira de alcançar ou, pelo menos, imitar esse comportamento em bash ?

EDITAR

Seguindo as primeiras respostas, veja outros exemplos que mostram com mais precisão como o recurso tcsh funciona:

$ ls
abc.foo abc.bar cab.foo cab.bar
$ cat a.f<TAB>
$ cat abc.foo

ou:

$ cat .b<TAB>
abc.bar cab.bar
$ cat .bar

Na verdade, tcsh conclui o nome de base e a extensão. O comportamento pretendido aqui é listar as possibilidades se mais de uma, como de costume com a conclusão da tabulação, não inserir todas elas.

    
por Paul-Antoine Arras 04.11.2014 / 16:07

1 resposta

0

Isso não é exatamente o que você precisa, mas sim perto. O atalho Ctrl + x , g atalho ( C-x g in emacsspeak) listará os expansinos de uma glob. Então, no seu exemplo:

$ cat *.b*<Ctrl><x><g>
abc.bar  cab.bar  

Portanto, diferentemente do que você descreve para tcsh , isso precisa de um glob válido. Em outras palavras, faz o equivalente de

$ echo *.b*

Note que o atalho está pressionando Ctrl e x juntos, soltando-os e pressionando g .

Isso está documentado em man bash :

   glob-list-expansions (C-x g)
          The list  of  expansions  that  would  have  been  generated  by
          glob-expand-word  is  displayed,  and the line is redrawn.  If a
          numeric argument is supplied, an  asterisk  is  appended  before
          pathname expansion.
    
por 04.11.2014 / 16:31