bashでtcshの改善された完成と同等の機能をどのように取得できますか?

bashでtcshの改善された完成と同等の機能をどのように取得できますか?

内部にtcsh マンページ、の影響はset complete = enhance次のように定義されます。

[...]完了1)大文字と小文字を無視する、2)ピリオド、ハイフン、アンダースコア(「.」、「-」、および「_」)を単語区切り文字として処理し、ハイフンとアンダースコアは同じです。

readline1)については、構成を通じて事例を無視できることがわかっていますset completion-ignore-case on。だから私の質問は2)にのみ関連しています。

たとえば、次のようにデフォルト名は似ていますが、拡張子が異なる複数のファイルを含むディレクトリがある場合:

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

その後、シェルはファイル拡張子を完成させたいと思います。

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

この動作を達成するか、少なくとも模倣する方法はありますかbash

編集する

最初の回答に続いて、tcsh機能のしくみをより正確に示す追加の例は次のとおりです。

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

または:

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

実際、tcsh基本名と拡張子が完成しました。ここでの振る舞いは、TABの完成をすべて挿入するのではなく、通常行うのと同じように、いくつかの可能性をリストすることです。

ベストアンサー1

これは必ずしも必要ではありませんが、ほぼ近いです。Ctrl+ x、ショートカットgC-x gemacsspeakから)ショートカットはglobの拡張をリストします。したがって、あなたの例では次のようになります。

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

したがって、説明するのとは異なり、tcsh有効なglobが必要です。つまり、次のようになります。

$ echo *.b*

ショートカットは、Ctrlを同時に押してxから手を離して押しますg

これに関する文書は次のとおりです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.

おすすめ記事