Emacs: isearch Current Word

By Xah Lee. Date: . Last updated: .

Here's a command to isearch the word under cursor.

(defun xah-search-current-word ()
  "Call `isearch' on current word or text selection.
“word” here is A to Z, a to z, and hyphen 「-」 and underline 「_」, independent of syntax table.
URL `http://xahlee.info/emacs/emacs/modernization_isearch.html'
Version 2015-04-09"
  (let ( $p1 $p2 )
    (if (use-region-p)
          (setq $p1 (region-beginning))
          (setq $p2 (region-end)))
        (skip-chars-backward "-_A-Za-z0-9")
        (setq $p1 (point))
        (skip-chars-forward "-_A-Za-z0-9")
        (setq $p2 (point))))
    (setq mark-active nil)
    (when (< $p1 (point))
      (goto-char $p1))
    (isearch-mode t)
    (isearch-yank-string (buffer-substring-no-properties $p1 $p2))))

You need to give it a easy key. Such as F8. [see Emacs: How to Define Keys]

Also, you should set your isearch repeat to arrow keys. Emacs: isearch by Arrow Keys.

Problem with Emacs's isearch

Emacs's “isearch” has some problems. Suppose you have this line:

… aa-bb-cc xx yy …

and your cursor is on the second dash. You want to search the next occurrence of the word “aa-bb-cc”. You have to press Alt+b Alt+b Ctrl+s Ctrl+w Ctrl+w Ctrl+w Ctrl+s. That's about 8 keys. In vim, it's just a single key press *.

addendum: Emacs 24.4 has the new command isearch-forward-symbol-at-point that improved the situation but still pretty bad. Now to search current word under cursor, you need to press Alt+s . Alt+s _ Ctrl+s. [see Emacs: Search Text in Current File] Besides the too-many-keys problem, this command has more problems:

  1. isearch-forward-symbol-at-point is on “symbols” only. What chars are part of “symbol” is unpredictable, mode-dependent.
  2. The search is with boundary check. That is, if current symbol is “xyz”, it'll will not find occurrences of “xyz2”.

Emacs Find Replace

Emacs Modernization

ErgoEmacs mascot-s276x226
Buy Xah Emacs Tutorial

Xah Emacs Commands