Incremental Search + Multiple Cursors
「複数カーソル」というものが便利だと教わった。調べてみたところ multiple-cursors.el と smartrep.el を使えば Emacs でも似たようなことができそうだったので、真似をしつつ設定を追加してみた。
まずは isearch-forward
した状態から mc/mark-next-like-this
したい。
(define-key isearch-mode-map (kbd prefix) #'(lambda () (interactive) (push-mark isearch-other-end t 'activate) (isearch-exit))) (smartrep-define-key global-map prefix ...)
これだと prefix
を押さなければいけない回数が多くて嬉しくないのだけど、さしあたり良い案を思いつけなかった。
あとは選択状態に合わせてスクロールさせたい。これは mc/cycle-forward
や mc/cycle-backward
を呼ぶだけなので易しい。
(defun mc/mark-next-like-this-and-cycle-forward () (interactive) (mc/mark-next-like-this 1) (mc/cycle-forward)) (smartrep-define-key global-map prefix '(("C-v" . 'mc/cycle-forward) ("M-v" . 'mc/cycle-backward) ("n" . 'mc/mark-next-like-this-and-cycle-forward) ...))
ついでにsmartrepによるコマンド実行中はキー入力をエコーしないようにしたら快適だった。