Shellはタブプレフィックスを完成できますか?

Shellはタブプレフィックスを完成できますか?

カーソルが単語の先頭にあるときと単語の終わりにあるときにタブの完成が異なるように動作するようにしたいと思います。

私は次のようなタブの完成サフィックスを持つシェルだけを見たことがあります。

$ tiff2␣
tiff2bw    tiff2pdf   tiff2ps    tiff2rgba

しかし、時にはカラットが単語の先頭にあるときにタップでプレフィックスを完成させたいときもあります。つまり、2tiff カーソルが単語の先頭にある場合は、次のように終わるすべてのコマンドに拡張したいと思います2tiff

$ ␣2tiff
raw2tiff gif2tiff bmp2tiff ppm2tiff pnmtotiff ras2tiff e2mtiff fax2tiff

場合によっては、次のようにします。

~> ␣2tiff
bmp2tiff  (Executable, 17kB)  ppm2tiff  (Executable, 14kB)
fax2tiff  (Executable, 18kB)  ras2tiff  (Executable, 14kB)
gif2tiff  (Executable, 18kB)  raw2tiff  (Executable, 17kB)

また、カーソルを単語の末尾に移動する副作用があり、有効なサフィックスなしで完了した場合にのみ機能します。

~> ␣tiff
tiff2bw                    (Convert a color TIFF image to greyscale)
tiff2pdf                    (Convert a TIFF image to a PDF document)
tiff2ps                                    (Convert a TIFF image to)
tiff2rgba                 (Convert a TIFF image to RGBA color space)
…and 10 more rows

bashzsh どちらの場合も、プレフィックスタブの完成を作成または実行する方法が見つかりません。

答え1

ジッシュ「新しい完成システム」を有効にして有効にした場合complete_in_wordオプション

autoload -U compinit; compinit
setopt complete_in_word

次に、単語の任意の場所(開始を含む)を押すと、単語の中間Tab(またはカーソルが単語の先頭にある場合は先頭)の完成提案が表示されます。 (よりエキゾチックな設定では、補完機能は単語の他の場所にコンテンツを挿入することもできます。)

zshの別のオプションは、ワイルドカードの完成を有効にすることです。setopt glob_complete。たとえば、単語の先頭を完成させるには(単語の末尾にカーソルを置く)と入力して*2tiff押します。Tab

Tab既定の構成では、コマンドラインを押すと開始するのに完了するのではなくタブが挿入されるという制限があります。限界があると思います。expand-or-complete;バインディングTabする場合menu-completeまたはcomplete-wordその後、コマンドラインの先頭でも実行されます。を使用すると、expand-or-complete実際に単語の先頭で終わることができます。ただし、単語が in=2tiffや などのコマンドラインで空でない最初の項目でない場合に限ります;2tiff

関連情報