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))
我设置了一个快捷键C-+,当我在单词上按下C-+ C-w时,它会退回到单词的开头并启动isearch来复制单词。但这并不完美。最好使用regexp搜索“\<”word“\>”来避免显示部分匹配(搜索单词“bar”不应与“foobar”匹配,而只应匹配“bar”本身)。我尝试使用search-forward-regexp和concat'ing \<>,但它不会在文件中换行,也不会突出显示匹配项,而且通常很糟糕。isearch-*函数似乎是最好的选择,但这些函数在脚本化时表现不佳。请问有什么想法吗?是否有人可以改进elisp的一点?或者我是否忽略了其他方法?
isearch-forward-symbol-at-point
,可以通过全局键序列M-s .
调用。我已经在 https://dev59.com/NXRB5IYBdhLWcg3wj32c#75425861 上发布了一个答案。 - Susam Pal