incsearch.vim について知らないかたはこちらの記事を参照してください. 簡単に言えばVimのインクリメンタル検索をカイゼンするプラグインです. -> incsearch.vimでVimの検索体験をリッチにする - haya14busa
incsearch.vim v2.0 をリリースした!
v0.9, v1.0, v1.1, v1.2, … とこれまで incsearch.vim をインクリメンタルにカイゼンにカイゼンを重ねてきました… そして本日, incsearch.vim は晴れて一段階進化し, バージョン2.0 となりました!
この進化を一言で言えば,incsearch.vim はもっともっと Vim の検索を便利にすべく 進化・拡張可能 になりました.
2.0で何ができるようになったか?
百聞は一見に如かず.以下のgifとともに拡張プラグイン達をご覧ください!
曖昧検索 | fuzzy search
- GitHub: haya14busa/incsearch-fuzzy.vim
1 2 3 4 5 6 7 |
|
曖昧スペル検索 | fuzzy spell search
- GitHub: haya14busa/incsearch-fuzzy.vim
1 2 3 4 5 6 7 |
|
高速でインクリメンタルなmigemo検索 | migemo search
1 2 3 4 5 6 7 |
|
EasyMotion との連携 | integration with vim-easymotion
1 2 3 4 5 6 7 |
|
拡張はcomposable!
incsearch.vim x fuzzy x easymotion
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
仕組み
converter 機能
:h incsearch-config-converters
バージョン2.0でのメイン追加機能,パターンコンバート機能です. 入力したパターンを変換して正規表現を返すコンバーター(複数可)を指定することによって, 入力した正規表現だけでなく,変換された正規表現も追加で検索してくれます.
fuzzy, fuzzyspell, migemo の拡張はどれもこの新たに入った仕組み,converter機能を使っています.
他にも スネークケースとキャメルケースを相互変換してどちらも検索できるようにするとか,
{a,b}
を\(a\|b\)
に変換するようなオレオレ簡易正規表現シンタックス(?)シュガーを作るとか,
inputを受け取って正規表現を返すというシンプルな機能ながら,活用可能性はたくさんあります!
(※ これらはそのうち実装していくと思います)
module 機能
- GitHub: osyo-manga/vital-over
:h incsearch-config-modules
:h Vital.Over.Commandline-modules
vital-over という incsearch.vim が使用しているライブラリにおけるモジュールを追加できる機能です. これがどんなことができて,どうやって作ればいいかといったことはそれだけで別の一つの記事どころか数十記事書ける内容なので割愛しますが, かなりいろんなことができるようになるはずです.(が,その分何でもできすぎるので注意は必要そうですが).
haya14busa/incsearch-easymotion.vim がこの機能を使って検索後に easymotion/vim-easymotion の機能を呼び出しています.
自分で拡張を作ることも可能!※ ただしAPIが固まってるとは言ってない
もちろんもっと便利な拡張を自分で作っていくことも可能です.
ここでは例としてちょっとした converter
を作ってみましょう
参照
:h incsearch#go()
:h incsearch-config()
仕様
- 正規表現をエスケープして単なる文字列として返し,検索する.
- つまりは
\V
の機能.ただし,普通の正規表現に加えて検索できるところが違う.
実装
pattern
を受け取って正規表現を返す関数 (s:noregexp()
) を実装して,
incsearch#go()
に渡すconfigのconverters
として渡してあげるだけ.
※ converterオブジェクトを作って渡してあげる方法もありますが,現時点では関数を渡してできること大差ない.
1 2 3 4 5 6 7 8 9 10 |
|
めっちゃ簡単!!!
Special Thanks
おしょーさん(github@osyo-manga)のライブラリには 毎度お世話になっており,incsearch.vim v2.0 はコマンドラインライブラリである osyo-manga/vital-over の拡張性があってこそ リリースできたことだったり,cmigemoコマンドでも高速に migemo 検索できるのはそのまま osyo-manga/vital-migemo のおかげだったりします.
また Lingrのvim部屋 でもincsearch.vimの開発に関わる質問をしたりして参考にしたりフィードバックをもらったりしました. 皆さんありがとうございますっ!
終わりに.そして次のカイゼンへ…
incsearch.vim はシンプルかつVimデフォルトの検索と同じように快適に使用できるオススメプラグインです. それがバージョン2.0 になり,望めばもっともっと便利に,拡張可能なものになりました. 気になった方は是非つかってみてください.
そして incsearch.vim にはまだまだ改善点があるかと思います(ジッサイあります). なにか見つけた方や「おまえーっ…APIがなーっ…ふわふわでなぁーっ…使いにくくてなーっ…ゆるさーん(バシーン)」 という方は Issues や twitter:@haya14busa, はたまた Lingrのvim部屋 あたりなどでフィードバックいただければカイゼンしていきたいと思うのでよろしくお願いしますっ