【发布时间】:2010-10-10 00:50:32
【问题描述】:
在 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 提供任何改进吗?还是我忽略了其他一些方法?
【问题讨论】:
-
是的,Emacs 允许您连接到 isearch 来执行此操作,但 highlight-symbols 包更好。我发现让符号成为我当前思维过程的中心非常有帮助。此外,您可以获得一个键搜索,并且您的点相对于符号的开头保持不变。