Slime/Emacs: Клавишна комбинация за Go to функция (не 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