我是一个使用vim的用户,最近为了好玩尝试使用emacs。目前我发现我最想从vim中转移到emacs的特性是"超级星号"(通过输入*来查找光标下的单词),但我还没有在emacs中找到它的等效物。如果emacs内置不支持这个功能,我需要在我的emacs文件中添加什么才能得到类似的功能?
我是一个使用vim的用户,最近为了好玩尝试使用emacs。目前我发现我最想从vim中转移到emacs的特性是"超级星号"(通过输入*来查找光标下的单词),但我还没有在emacs中找到它的等效物。如果emacs内置不支持这个功能,我需要在我的emacs文件中添加什么才能得到类似的功能?
正如 paldepind {{pointed out}},isearch-forward-symbol-at-point
(默认情况下使用M-s.)是与Vim中的*相似的一个函数。这个函数在GNU Emacs 24.4及以上版本中可用;如果你的Emacs版本不同或较旧,请继续阅读查看替代方案。
通常我会执行 (M-b ...) C-s C-w ... C-s。也就是说:
以下是将其集成到 I-Search 中的尝试(通过 C-s 和 C-r 调用;使用 C-h k C-s 获取关于 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))))
isearch-forward-symbol-at-point
,默认情况下绑定为C-s .
。 - paldepind尝试按下C-sC-w
这里是一个开始:
(global-set-key (kbd "C-*") (lambda () (interactive) (re-search-forward (format "\\b%s\\b" (thing-at-point 'word)))))
现在还有Smart Scan这个轻量级的附加包,提供了这个功能。
它可以从MELPA获取;将MELPA添加到已启用的package-archives
列表的说明在这里。
安装它:
M-x package-install
RET smartscan
RET
然后你可以通过以下方式启用它:
(global-smartscan-mode t) ;; Turn on Smart Scan globally
向前和向后搜索的默认键绑定分别为M-n和M-p。
PS:如果您感兴趣,介绍此软件包的原始博客文章在这里。
如果您正在使用 Viper(非常好用),那么这应该可以达到类似的效果:
(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
可以使用,但它并不是严格的符号搜索,而是“点右侧的单词部分”搜索。
正确的答案是M-s .
。这将启动符号搜索,并预先加载指针所在位置的符号。符号搜索是isearch的一种特殊模式,您可以使用M-s _
启动。如果您已经在isearch中(例如,按下了C-s
或C-r
),您也可以键入M-s _
进入符号搜索。
我敦促您阅读整个isearch文档,因为它非常强大和多功能。