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://ergoemacs.org/emacs/modernization_isearch.html'
Version 2015-04-09"
  (interactive)
  (let ( $p1 $p2 )
    (if (use-region-p)
        (progn
          (setq $p1 (region-beginning))
          (setq $p2 (region-end)))
      (save-excursion
        (skip-chars-backward "-_A-Za-z0-9")
        (setq $p1 (point))
        (right-char)
        (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 / Highlight Words〕 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”.

Find and Replace Topic

  1. Emacs: Search / Highlight Words
  2. Emacs: Search Text in Files
  3. Emacs: Find and Replace Commands
  4. Emacs: Find Replace Text in Directory
  5. Emacs: Regex Tutorial
  6. Emacs: isearch Current Word
  7. Emacs: xah-find.el, Find Replace in Pure Elisp
Like it? Buy Xah Emacs Tutorial. Thanks.