Slime / Emacs:转到功能的键盘快捷键(非M-。)

时间:2014-03-28 19:00:05

标签: emacs slime

如何使用键盘快捷键直接导航到Slime / Emacs中给定文件中的函数定义?我知道M-。但那不是我想要的。我已经在文件中并知道函数名称。按文字搜索不会直接将我带到函数定义,因为它也会让我调用该函数的网站。

对于那些也了解Eclipse的人,我正在寻找相当于使用Ctrl-O打开大纲视图,然后当我输入方法名称时,它会过滤(删除)我想要的功能,我然后按下回车,它就在那里。

如果您有其他选择,我也很乐意尝试。

3 个答案:

答案 0 :(得分:1)

听起来你正在寻找M-x imenu。它默认没有键盘快捷键;我想将它绑定到s-i

(global-set-key [(super ?i)] 'imenu)

答案 1 :(得分:1)

正如@legoscia所说, Imenu 就是答案。作为附加信息,我将提及Icicles如何增强您对Imenu的使用。

明显的增强是更好的完成(substring,regexp,...),包括缩小多种模式的选择。

非常明显的是专门用于Imenu导航的冰柱 multi-commands,实际上为您提供了一个Imenu浏览器。这被描述为here

  • 有不同的命令可以导航到不同类型的Emacs Lisp定义中:命令,非命令函数,面,不同类型的键映射,用户选项和其他变量。

  • 导航时,您可以对与您的输入匹配的候选项进行排序,并按排序顺序在它们的任何子集中循环。

  • 这些命令有“完整”版本,它们不仅提供与Imenu regexp匹配的内容(例如(defun foobar ()和您当前的输入,还提供完整的定义(例如,完整的函数定义) )。

  • 这些导航命令也适用于 搜索 。特别是,“完整”版本提供了与您当前的迷你缓冲输入匹配的完整定义作为候选。当您逐步更改输入时,将搜索完整定义,从而缩小选择范围。然后,您可以在其中任何一个中进行导航。

答案 2 :(得分:1)

您也可以使用lispy执行此操作。 它是Elisp,Clojure的Paredit,vi和IDE功能的混合体, Common Lisp和Scheme。

您想要的功能由lispy-goto提供,绑定到 。它使用CEDET来解析整个源目录, 允许您跳转到当前目录中所有文件中的标记。

还有lispy-goto-local绑定到 G 只在当前文件中查找标签。

helm完成用于两个命令,所以它真的很快。 看一下 Navigating a directory of Common Lisp code with lispy.el 用于截屏视频。

您可以看到它比imenu更先进: 它可以识别in-packagedefparameter等标记类型, defconstantdefclass等。这也可以扩展为任意 标签,例如SLIME的define-pattern-substitution

此外,lispy使用SLIME提供内联参数(替代eldoc)和 eval bindings。