LoginSignup
5
5

More than 5 years have passed since last update.

isearch つくった

Last updated at Posted at 2015-07-09

メンテ出来てなかったので、atom.io から削除(unpublish)しました。 2016.8.3.

isearch

インクリメンタル・サーチが出来る

gif

開発状況

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: キャンセルしてインプットパネルを閉じる

使い方

  1. サーチ開始 isearch:search-forward.
  2. サーチする文字を打ち込む
  3. 元カーソル位置、マッチ箇所のハイライト。最初のマッチに自動スクロール
  4. 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 にラベルジャンプをつける方が、使い勝手が良いと思う。
何にしろ、実装して、自分で使って、感触を確かめてから決めよう。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5