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"
  (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 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


Xah Emacs Commands