Sublime Textのようなファジー補完をサポートするシェルはありますか?


14

私はbashのを使用していますし、私はこれを行うことができますbashや他のシェル内の任意のプラグインがある場合、私は思っていた cat tfnislong.txt+の[tab]に完了をcat ThisFileNameIsSoLong.txt崇高テキストにちょうどのようなタブ補完が。


なぜcat Th+をしないのtabですか?
daviewales 2013年

1
@daviewales 269の理由をすべて表示しますか?
ファックス

回答:


11

私は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] 
    その後
        COMPREPLY =( `ls`)
    そうしないと
        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も役に立ちました。


6

fzfが便利な場合があります。Rubyで記述された汎用のファジーファインダーであり、ファイル、プロセス、コマンド履歴、gitブランチなどのあらゆるリストで使用できます。

そのインストールスクリプトはCTRL-T、シェルのキーバインドを設定します。次のGIFは、それがどのように機能するかを示しています。


FZFは素晴らしいです!貢献してくれてありがとう。これにより、数週間の作業を節約できました。幸運にもFZFを見つけたとき、私はBashのあいまい完成を書き始めていました。それは完璧に動作し、私はちょうど呼び出す前に、カーソル位置を保存することを忘れないように持っていたfzf...(SC TPUT)以降でそれを復元tput rc...
ホーコンHægland

3

他の答えに沿って進むには、zshを調べてください。bashとの下位互換性があるため、置き換えのドロップとして使用できますが、大幅に拡張された機能をサポートしており、その1つはコンテキスト対応タブ補完が大幅に強化されています。

zsh Completion FAQはユースケースを拡張しますが、あなたの例では、COMPLETE_IN_WORD関数に最も関心があると思います。これは望ましい動作ではありませんが、近いです。主なポイントは、bashを使用するよりもおそらくより親しみやすい方法で基本機能を拡張する方法がたくさんあるということです。

以下は、より具体的に必要なものに近似するあいまい一致拡張です。 zshファジーマッチ

いくつかのアイデアについては、zshを管理および拡張するための多数の機能を備えた人気のあるoh-my-zshフレームワークをご覧ください。それはあなたが望む以上のものである可能性が高いですが、プラグインの下では、さまざまな役割のオートコンプリートスクリプトに注目します。機能のアイデアを得るため。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.