开发者

"super star" or find the word under the cursor equivalent in emacs

开发者 https://www.devze.com 2022-12-12 06:47 出处:网络
I\'m a vim user and have recently been trying out emacs for fun.I find that the feature I\'m missing most so far from vim is the \"super star\" (find the word under the cursor by typing *) feature,开发

I'm a vim user and have recently been trying out emacs for fun. I find that the feature I'm missing most so far from vim is the "super star" (find the word under the cursor by typing *) feature,开发者_如何转开发 and I have yet to find the equivalent in emacs. If it's not built in, what would I need to add to my emacs file to get something similar?


As pointed out by paldepind, isearch-forward-symbol-at-point (M-s., by default) is a close equivalent to * in Vim. This function is available starting in GNU Emacs 24.4; if your Emacs is different or older, read on for alternatives.

Usually I just do (M-b ...) C-s C-w ... C-s. That is:

  1. M-b to move to beginning of word(s) of interest
    • zero or more of these
  2. C-s to start an I-Search
  3. C-w to yank the word(s) starting at point
    • one or more of these
  4. C-s to find the next match
  5. more C-s to find later matches
  6. RET to exit the I-search at the most recent match
    • or a bunch of C-g to abort back to the original starting location

Here is a go at integrating it into I-Search (invoked via C-s and C-r; use C-h k C-s for info on isearch).

(require "thingatpt")
(require "isearch")
(define-key isearch-mode-map (kbd "C-*")
  (lambda ()
    "Reset current isearch to a word-mode search of the word under point."
    (interactive)
    (setq isearch-word t
          isearch-string ""
          isearch-message "")
    (isearch-yank-string (word-at-point))))

Integrating it into I-Search takes advantage of its word matching and case sensitivity settings (C-s M-c C-* would do a case-sensitive search on the word under point).


Try C-sC-w


Here is a start:

(global-set-key (kbd "C-*")
  (lambda ()
    (interactive)
    (re-search-forward (format "\\b%s\\b" (thing-at-point 'word)))))


These days there is also Smart Scan, a lightweight add-on package that provides this functionality.

It is available from MELPA; instructions for adding MELPA to the list of enabled package-archives are here.

To install it:

M-x package-install RET smartscan RET

You can then enable it via

(global-smartscan-mode t) ;; Turn on Smart Scan globally

The default key bindings for searching forward and backward are M-n and M-p, respectively.


PS: If you are interested, the original blog post introducing this package is here.


if you're using viper (which works great) this should work similarly enough:

(require 'thingatpt)
(require 'viper)

(defun viper-search-word-at-point ()
  "Reset viper-s-string to word at point and start a forward viper search."
    (interactive)
    (setq viper-s-string (word-at-point))
    (viper-search viper-s-string 't nil))

(global-set-key (kbd "C-*") 'viper-search-word-at-point)


C-s C-w is ok but it's not strictly symbol search, but "word part at the right of point" search.

The correct answer is M-s . This starts symbol search with the symbol at point preloaded. Symbol search is a special mode of isearch that you can start with M-s _. If you're already in isearch (for example, after pressing C-s or C-r) you can also type M-s _ to enter symbol search.

I urge you to read the entire documentation of isearch since it's very powerful and versatile.

0

精彩评论

暂无评论...
验证码 换一张
取 消