Возвышенный текст 2 «Goto Anything» (или мгновенный поиск) для Emacs?
Я попробовалВозвышенный текст 2 недавно, и я нашелGoto Anything очень полезно для навигации по исходному коду (Ctrl-P файл @ символ кажется, работает очень хорошо). Есть ли что-то похожее на Emacs? Желательно что-то, что просто работает, без тонны кастомных элисп.
Что я пробовал до сих пор:
я виделШлем а такжеЧто-нибудь, но, насколько я понимаю, ни один из них не способен на настоящий «мгновенный» поиск (см. правку ниже).
Я использовалmulti-occur-in-matching-buffers
Но, похоже, он также не может удовлетворить критерий «мгновенного действия».
imenu
/ idomenu
хорошо работает для отдельных файлов, но не работает для всех файлов.
В настоящее время я использую № 2 и № 3 вместе, как плохую замену Goto Anything.
Если бы не точный клон Goto Anything, то я мог бы обойтись с наивным решением мгновенного поиска (которое ищет данную строку во всех открытых буферах и отображает результаты динамически). Так что это тоже приемлемо.
Я использую Emacs 24.2, так что любой elisp только для v24 тоже подойдет.
РЕДАКТИРОВАТЬ: Я дал Хелму еще один шанспредложение event_jrи я обнаружил, что этоделает поддержка мгновенного поиска по всем открытым буферам.helm-multi-occur
+ helm-follow-mode
подходит на удивление близко к удовлетворению моих потребностей, единственными незначительными проблемами являются (рискуя казаться придирчивыми):
Я не нашел способ включитьhelm-follow-mode
автоматически когда я бегуhelm-multi-occur
, Я должен вызвать его вручную сC-c C-f
, Кто-нибудь хочет сделать снимок с помощью фрагмента elisp? (см. правку № 2 ниже)
он не «интеллектуален», как ST2 Goto Anything (то есть он не понимает «символы» в исходном коде, как это делает Goto Anything).
РЕДАКТИРОВАТЬ № 2: Теперь у меня есть большая часть Goto Anything, благодаряEvent_jr ответ ниже (и, конечно же, благодаря создателю Хелма,Тьерри Вольпятто). Я рекомендую это от всей души всем, кто ищет подобную функцию. Ниже приведен elisp, который я сейчас использую:
;; instant recursive grep on a directory with helm
(defun instant-rgrep-using-helm ()
"Recursive grep in a directory."
(interactive)
(let ((helm-after-initialize-hook #'helm-follow-mode))
(helm-do-grep)))
;; instant search across all buffers with helm
(defun instant-search-using-helm ()
"Multi-occur in all buffers backed by files."
(interactive)
(let ((helm-after-initialize-hook #'helm-follow-mode))
(helm-multi-occur
(delq nil
(mapcar (lambda (b)
(when (buffer-file-name b) (buffer-name b)))
(buffer-list))))))
;; set keybindings
(global-set-key (kbd "C-M-s") 'instant-search-using-helm)
(global-set-key (kbd "C-M-S-s") 'helm-resume)
(global-set-key (kbd "C-M-g") 'instant-rgrep-using-helm)