13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ace-isearch : isearch、ace-jump-mode、avy、helm-swoopを滑らかに統合

Last updated at Posted at 2014-04-26

##概要
以前るびきちさんがツイートしていた,
https://twitter.com/rubikitch/status/412473497529503744
というのを自分で書いてみた,ということ.
差分としては一文字入力後にいくらかのディレイを挟んでace-jump-mode(or avy)が発動するようにしていることと、anything-occurではなくhelm-swoopを発動させるようにしていることである。

詳細はREADMEを見ていただくとよい。

参考記事

以下のブログ記事は参考になるだろう。
インストールについても参考にされたい。

##機能実現のカギ
以下はace-isearch-modeの定義部分である。

(define-minor-mode ace-isearch-mode
  "Minor-mode which combines isearch, ace-jump-mode, avy, and helm-swoop seamlessly."
  :group      'ace-isearch
  :init-value nil
  :global     nil
  :lighter    ace-isearch-lighter
  (if ace-isearch-mode
      (progn
        (add-hook 'isearch-update-post-hook 'ace-isearch--jumper-function nil t)
        (ace-isearch--make-ace-jump-or-avy))
    (remove-hook 'isearch-update-post-hook 'ace-isearch--jumper-function t)))

重要なのはisearch-update-post-hookがisearch実行中のクエリ(isearch-string)が更新されるタイミングで実行されるということである。これさえ分かってしまえば、あとはace-isearch--jumper-functionをクエリの長さに応じて振る舞いを変えるように作るだけなので、実装はそれほど難しくはないのである。

##補足情報

ace-isearch-jump-during-isearch

isearchで移動中、そのクエリを用いてさらにjumpするための関数として用意した。isearchによってバッファを移動するときに、クエリによっては候補がヒットしすぎるため、C-sC-rを連打することがしばしばあるだろう。その移動時の連打の負担を減らす効果が期待できる。

典型的な使用例としては、C-sを2,3回叩いて目的地に行かなかったらその時点でisearchを抜けて、サクッとジャンプする感じである。設定例は以下である。

(define-key isearch-mode-map (kbd "C-'") 'ace-isearch-jump-during-isearch)

上記設定ではisearch中にC-'を押下すると現在のクエリを対象にjumpできる。

ace-isearch-fallback-function(デフォルト値:helm-swoop-from-isearch

こちらの機能も完全におまけである。isearch が失敗し、かつace-isearch-use-fallback-functionがnon-nilのとき、ace-isearch-fallback-functionがfallback関数として呼び出されるという機能である。

例えば(画面外の)文字やクエリをC-s(isearch-forward)で検索するというときに、実は当該クエリはC-rで後ろ向きに探さないと見つからないという状況で(その場合isearchは失敗する)fallback関数が発動されることにより、素早くアクセス可能といった具合であろうか。

###追記
ace-isearch-use-jumpに新しいオプション項目を追加した。詳細は以下を参考に。
ace-isearch に新オプション項目が追加された話

###追記その2
最近の更新により、avyもサポートするようにした。

(setq ace-isearch-function 'avy-goto-char)

とすればavy-goto-charをジャンプの関数として利用できる。
もはや'ace'ではない気もするが。

13
15
2

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
13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?