私はbashを使用していますが、SublimeTextのタブ補完と同じようにcat tfnislong.txt
+ [tab]
がcat ThisFileNameIsSoLong.txt
に完了するプラグインがbashまたは他のシェルにあるかどうか疑問に思いました。 。
私は知っています https://github.com/mgalgs/fuzzy_bash_completion これはcomplete
で使用されるシェル関数の束です。
でも、もっと簡潔に、もう少しうまくやれると思います。 .bashrcまたは.profileをバストオープンする時間...
私たちが使用する基本的なフックはこれです:
complete -o nospace -o filenames -F fuzzypath cd ls cat
-Fオプションは、タブ補完にシェル関数を使用することを意味します。オプションはCOMPREPLY
変数で設定されます。したがって、たとえば:
function fuzzypath(){ if [-z $ 2] then COMPREPLY =( `ls`) else DIRPATH =ʻecho "$ 2" | gsed's | [^ /] * $ || '` BASENAME =ʻecho" $ 2 "| gsed's |。*/|| '` FILTER =ʻecho" $ BASENAME "| gsed's |。|\0. * | g'` COMPREPLY =( `ls $ DIRPATH | grep -i" $ FILTER "| gsed" s | ^ | $ DIRPATH | g "`) fi }
ここで、DIRPATH
は入力しているパスの最後の/の前のすべてであり、BASENAME
はカーソルが現在ある場所です。
FILTER
は、あいまいさの出番です。基本的に、BASENAME
を取り、すべての文字の間に.*
を挿入して、ファジー正規表現を生成します。
残りは、正規表現とlsを組み合わせてCOMPREPLY
を生成するだけです。おそらくfind
を使用して、ここでもっと賢いことを見つけることができます。
また、 http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html が役立つこともわかりました。
fzf が便利な場合があります。これは、Rubyで記述された汎用ファジーファインダーであり、ファイル、プロセス、コマンド履歴、gitブランチなどの任意のリストで使用できます。
そのインストールスクリプトは、シェルのCTRL-T
キーバインドをセットアップします。次のGIFは、その動作を示しています。
他の答えと一緒に行くために、zshを調べたいと思うかもしれません。 bashとの下位互換性があるため、代わりにドロップとして使用できますが、大幅に拡張された機能をサポートし、そのうちの1つはコンテキスト認識タブ補完が大幅に強化されています。
zsh Completion FAQ ユースケースを拡張しますが、あなたの例によれば、COMPLETE_IN_Word
functionに最も興味があると思います。これは完全に望ましい動作ではありませんが、近いです。重要な点は、bashを使用するよりもおそらくもっと親しみやすい方法で基本機能を拡張する方法がたくさんあるということです。
これは、より具体的に必要なものを近似するあいまい一致拡張です。 zsh-あいまい一致
いくつかのアイデアについては、zshを管理および拡張するための多くの機能を備えた人気のある oh-my-zsh フレームワークをご覧ください。おそらくあなたが望む以上のものですが、プラグインの下に、さまざまな役割のオートコンプリートスクリプトがあります。機能のアイデアを得る。