メンテ出来てなかったので、atom.io から削除(unpublish)しました。 2016.8.3.
isearch
インクリメンタル・サーチが出来る
開発状況
Very Alpha. Beta
[注意] リファクタリング、仕様が固まるまでは、style や、keymap が変わる可能性あり.
機能
- インクリメンタル・サーチ(キーをタイプする度に、マッチ箇所にスクロール)
- 標準の Find and Replace と異なり、あえて
onDidStopChanging
ではなく、onDidChange
を使っている。サーチ結果がすぐに UI にフィードバックされるように。 - マッチした数と、現在のインデックスをインプットパネルに表示(将来的に色もインデックスに応じて変える)。
- 決定するまではカーソル位置を動かさない(cursor-historyの様な Package はカーソル位置を保存するので、重要)。
- インプットエリアにカーソル配下の単語を keymap で挿入。
- 元のカーソル位置をハイライト。サーチ中、カレントマッチをフラッシュ(瞬間点滅)。
- WildCard サポート。好きな文字を wild card として設定可能
コマンド
-
isearch:search-forward
: 前方サーチ -
isearch:search-backward
: 後方サーチ -
isearch:fill-cursor-word
: カーソル配下の単語をインプットエリアに挿入 -
isearch:cancel
: キャンセルしてインプットパネルを閉じる
使い方
- サーチ開始
isearch:search-forward
. - サーチする文字を打ち込む
- 元カーソル位置、マッチ箇所のハイライト。最初のマッチに自動スクロール
-
core:confirm
で着地。isearch:cancel
でキャンセル(元のカーソル位置に戻る)
Keymap
デフォルト・キーマップは無し。
e.g.
'atom-workspace':
'ctrl-s': 'isearch:search-forward'
'ctrl-cmd-r': 'isearch:search-backward'
'.platform-darwin atom-text-editor.isearch':
'ctrl-s': 'isearch:search-forward'
'ctrl-r': 'isearch:search-backward'
'ctrl-cmd-r': 'isearch:search-backward'
'ctrl-g': 'isearch:cancel'
'cmd-e': 'isearch:fill-cursor-word'
私の設定。とても実験的。
[
, ]
, ;
がサーチできないが、移動や、決定が楽なので良しとする。
最悪、Find and Replace を使えば良い。
'atom-text-editor.vim-mode.command-mode':
's': 'isearch:search-forward'
'S': 'isearch:search-backward'
'.platform-darwin atom-text-editor.isearch[mini]':
'ctrl-g': 'isearch:cancel'
'ctrl-u': 'editor:delete-to-beginning-of-line'
']': 'isearch:search-forward'
'[': 'isearch:search-backward'
';': 'core:confirm'
類似プロジェクト
TODO
- コードを綺麗にする。
- ワイルドカードサポート
- marker の destroy() 漏れが無いよう、見直す(リファクタとセット)
- スタイルをカスタマイズ出来るように。
- smalls と統合?
- マッチ箇所全てにマルチカーソルを置く。
-
Excursion mode をつけて、vim-like に
hjkl
,gg
とかでマッチを移動できるように? - Regexp, Ignore case 等の検索オプション対応、検索パネルにオプション状態を反映。
- パフォーマンス改善。見えている範囲を素早く decorate して、画面外は delay させてやるとか。
-
マッチ箇所の色区別。
top
,bottom
がすぐ分かるように。nomatch
が直ぐに分かる様に画面フラシュとか?
メモ
smalls をつくった 時、jumpy を書き換えることからスタートした。
今回も同様のアプローチをしてみようと考え、incremental-search を folk して書き換え始めたが、
古いAPI満載、そもそも動いてない(?) とかで、やめて、いちからつくった。
動作は Emacs の isearch を参考にしている。
改善の予定、余地は大幅にある。数週間後には Done になっている予定。
smalls と Rapid cursor positioning(高速カーソル配置)という目的ではかぶるので、実験的に統合してみようかとも考えている。
Emacs の AceJump の FAQ でも isearch と、ace-jump の使い分けについて言及されており、
- 目的地が見えていれば: ace-jump (Atom: smalls に相当)
- 見えていなければ: isearch (Atom: isarch に相当)
と書いてある。
しかし、人間の脳は、もっと曖昧にキータイプしたいもので、明確に使い分けるのは疲れるものだ。
もっと気まぐれに、isearch や、ラベルジャンプ(smalls) が出来るように、統合してみるのはやってみたい。
そういえば、vim-easymotion でも、検索機能の拡張で、
スクロール出来るようだ。このアプローチは、smalls に scroll 機能をつけるようなものだが、どっちを主にすべきか。
私は、isearch の方が頻度が多い(他のPaneに飛ぶより、現在バッファを移動する方が多い)ので、isearch にラベルジャンプをつける方が、使い勝手が良いと思う。
何にしろ、実装して、自分で使って、感触を確かめてから決めよう。