Emacsでカーソルの下にある単語を検索

Vimの"*"に当たるものがEmacsにはないので既存のisearch-forwardを少し便利にしてみました.

isearch-forward-with-headingコマンド(isearch-forwardの前に単語の頭にカーソルを移動する)をC-sにバインドすることにより, カーソルの乗っている単語をC-s C-wでさくっと検索できるようになります.

6行目のgridのiの前にカーソルがあるときに,C-s C-wを押すと

検索できる.

カーソルのある位置の単語の頭にカーソルを持ってくるのはgtags.elのgtags-find-tagをインスパイアしたので長いですが,本当は5行ぐらいで書けると思います.「今いるカーソル下の単語の頭にカーソルを移動する」関数ってありそうですよね.

;; Heading to the beginning of word before incsearch
;; isearch-forward-with-headingで"isfh"

(defconst isfh-symbol-regexp "[A-Za-z_][A-Za-z_0-9]*"
  "Regexp matching word chars.")
(defconst isfh-symbol-chars "[0-9A-Za-z_]"
  "Regexp matching word char.")
(defun isfh-match-string (n)
  (buffer-substring (match-beginning n) (match-end n)))

(defun isfh-get-current-token ()
  (cond
   ((looking-at isfh-symbol-chars)
    (while (looking-at isfh-symbol-chars)
      (forward-char -1))
    (forward-char 1))
   (t
    (while (looking-at "[ \t]")
      (forward-char 1))))
  (if (looking-at isfh-symbol-regexp)
      (isfh-match-string 0) nil))

(defun isearch-forward-with-heading ()
  "Search the word your cursor looking at."
  (interactive)
  (isfh-get-current-token)
  (command-execute 'isearch-forward))

(global-set-key "\C-s" 'isearch-forward-with-heading)

追記

やっぱりあった: backward-word.

(defun isearch-forward-with-heading ()
  "Search the word your cursor looking at."
  (interactive)
  (command-execute 'backward-word)
  (command-execute 'isearch-forward))

(global-set-key "\C-s" 'isearch-forward-with-heading)

これだけでok