<2015-02-11 Wed>追記
ace-isearch(レビュー) と併用している場合、デフォルトでは
6文字以上でhelm-swoop(レビュー) が発動するため併用できません。
そのため、isearchからhelm-swoopが発動しないように
ace-isearch-use-function-from-isearch をnilにしました。

たった今思い付いたコードです。

バッファ内の特定の行やシンボルをコピーするときどうしますか?

行の場合は、

  1. isearchなどでターゲットの行へジャンプ
  2. C-a C-SPC C-n M-wでその行をコピー
  3. C-u C-SPCで元の位置に戻る
  4. C-yで貼り付け

と、isearch後に7ストロークも必要とします。

シンボルの場合は dabbrev-expand (M-/) や
hippie-expand が使えるのでまだマシですが、
Emacs Lispのシンボルは共通のprefixなので、
いまいち使いづらいです。

シンボル名の途中ならば

  1. isearchなどでターゲットのシンボルへジャンプ
  2. C-M-b C-M-SPC M-wでそのシンボルをコピー
  3. C-u C-SPCで元の位置に戻る
  4. C-yで貼り付け

と、やはり6ストローク必要とします。

そこでisearch後、即に行はシンボルを貼り付けられるようにする
Emacs Lispを書きました。

isearch後、C-eでシンボルを、C-u C-eでその行を
元の位置に貼り付けます。

検索文字列がシンボルをまたがる場合は、
検索文字列を含むシンボル単位の塊を貼り付けます。

検索文字列を伸ばすにはC-w (標準機能)でできます。

行を指定してからコピーというのは昔から
知る人ぞ知る fcopy.el がありますが、
こちらはisearchという標準機能からすぐに使える手軽さがあります。

長いシンボルのdabbrev代わりに使ってあげてください。

(defun insert-from-isearch (&optional whole-line)
  (interactive "P")
  (let ((str (insert-from-isearch-target-string whole-line)))
    (isearch-done t)
    (goto-char (mark))
    (pop-mark)
    (and whole-line (beginning-of-line))
    (undo-boundary)
    (insert str)))
(defun insert-from-isearch-target-string (whole-line)
  (if whole-line
      (thing-at-point 'line)
    (let ((bound (bounds-of-thing-at-point 'symbol))
          (min (min (point) isearch-other-end))
          (max (max (point) isearch-other-end)))
      (cons (point) isearch-other-end)
      (if (and bound (<= (car bound) min max (cdr bound)))
          (buffer-substring (car bound) (cdr bound))
        (save-excursion
          (buffer-substring
           (progn (goto-char min)
                  (or (car (bounds-of-thing-at-point 'symbol)) min))
           (progn (goto-char max)
                  (or (cdr (bounds-of-thing-at-point 'symbol)) max))))))))
(define-key isearch-mode-map (kbd "C-e") 'insert-from-isearch)
(setq ace-isearch-use-function-from-isearch nil)

20150130105919.png
Fig1: 初期状態

20150130113214.png
Fig2: thiを検索

20150130113222.png
Fig3: C-eでThisが貼り付けられる

20150130113317.png
Fig4: ant C-wでant toを検索

20150130113323.png
Fig5: C-eでwant toが貼り付けられる

20150130113346.png
Fig6: この状態でbuffを検索し、C-u C-eを押すとその行を貼り付ける

本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。