Slime/Emacs: сочетание клавиш для перехода к функции (не M-.)

Как мне напрямую перейти к определению функции в заданном файле в Slime/Emacs с помощью сочетаний клавиш? Я знаю о М-. но это не я хочу. Я уже в файле и знаю имя функции. Поиск по тексту не приведет меня напрямую к определению функции, поскольку мне также потребуется вызывать сайты этой функции.

Для тех из вас, кто также знаком с Eclipse, я ищу эквивалент использования Ctrl-O, чтобы открыть представление структуры, а затем, когда я набираю имя метода, он будет фильтровать (исключать) нужную мне функцию, затем я просто нажимаю войти, и это приведет меня туда.

Если есть альтернатива, которую вы используете, я был бы рад попробовать и ее.


person RAbraham    schedule 28.03.2014    source источник


Ответы (3)


Похоже, вы ищете M-x imenu. По умолчанию у него нет сочетания клавиш; Мне нравится привязывать его к s-i:

(global-set-key [(super ?i)] 'imenu)
person legoscia    schedule 28.03.2014

Как сказал @legoscia, Imenu — это ответ. В качестве дополнительной информации я упомяну, как Icicles может улучшить использование Imenu.

Очевидным улучшением является улучшенное завершение (подстрока, регулярное выражение,...), включая сужение вариантов с несколькими шаблонами.

Неочевидными являются Icicles мультикоманды, специализированные для навигации по Imenu, что дает вам, по сути, браузер Imenu. Это описано здесь.

  • Существуют разные команды для навигации между различными типами определений Emacs Lisp: команды, некомандные функции, лица, раскладки клавиш разных типов, пользовательские опции и другие переменные.

  • Во время навигации вы можете сортировать кандидатов, которые соответствуют введенным вами данным, и циклически переключаться между любым их подмножеством в порядке сортировки.

  • Существуют «полные» версии команд, которые предоставляют в качестве кандидатов не только то, что соответствует регулярным выражениям Imenu (например, (defun foobar () и вашему текущему вводу, но и полные определения (например, полное определение функции).

  • Эти команды навигации также предназначены для поиска. В частности, «полные» версии предоставляют в качестве кандидатов полные определения, соответствующие вашему текущему входу в минибуфер. По мере постепенного изменения ввода выполняется поиск полных определений, что сужает выбор. Затем вы можете перемещаться между любыми из них.

person Drew    schedule 28.03.2014

Вы также можете сделать это с помощью lispy. Это смесь функций Paredit, vi и IDE для Elisp, Clojure, Common Lisp и Scheme.

Нужная вам функция предоставляется lispy-goto, привязанной к g. Он использует CEDET для анализа всего исходного каталога, позволяя вам перейти к тегу во всех файлах в текущем каталоге.

Также есть lispy-goto-local, связанный с G, который ищет теги только в текущем файле.

helm завершение используется для обеих команд, так что это очень быстро. Взгляните на Навигация по каталогу кода Common Lisp с помощью lispy.el для скринкаста.

Вы можете видеть, что он гораздо более продвинут, чем imenu: он распознает такие типы тегов, как in-package, defparameter, defconstant, defclass и т. д. Это также может быть расширено на произвольные теги, такие как define-pattern-substitution SLIME.

Кроме того, lispy использует SLIME для предоставления встроенных аргументов (альтернативы eldoc) и привязок eval.

person abo-abo    schedule 28.03.2014