在 Vim 中,正常模式下的 * 键搜索光标下的单词。在 GNU Emacs 中,最接近的原生等价物是:
C-s C-w
但这不完全一样。它打开增量搜索迷你缓冲区并从当前缓冲区中的光标复制到单词的末尾。在 Vim 中,您会搜索整个单词,即使您在按 * 时位于单词的中间。
我已经做了一些 elisp 来做类似的事情:
(defun find-word-under-cursor (arg)
(interactive "p")
(if (looking-at "\\<") () (re-search-backward "\\<" (point-min)))
(isearch-forward))
在启动 isearch 之前,它会倒退到单词的开头。我已经将它绑定到 C-+,它很容易在我的键盘上键入并且类似于 *,所以当我键入C-+ C-w
它时,它会从单词的开头复制到搜索迷你缓冲区。
然而,这仍然不完美。理想情况下,它会正则表达式搜索"\<" word "\>"
不显示部分匹配(搜索单词“bar”不应该匹配“foobar”,只匹配“bar”)。我尝试使用 search-forward-regexp 和 concat'ing \<> 但这不会包含在文件中,不会突出显示匹配项并且通常很蹩脚。isearch-* 函数似乎是最好的选择,但这些函数在编写脚本时表现不佳。
有任何想法吗?任何人都可以对 elisp 提供任何改进吗?还是有其他我忽略的方法?