В 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-w
, он копирует с начала слова в мини-буфер поиска.
Однако это все еще не идеально. В идеале он будет искать regexp для "\<" word "\>"
, чтобы не показывать частичные совпадения (поиск слова "bar" не должен соответствовать "foobar", просто "bar" сам по себе). Я попытался использовать search-forward-regexp и concat'ing\< > но это не обернуто в файл, не выделяет совпадения и, как правило, довольно хромым. Функция isearch- * кажется лучшим выбором, но при написании сценариев они плохо себя ведут.
Любые идеи? Может ли кто-нибудь предложить какие-либо улучшения в бит elisp? Или есть другой способ, который я забыл?