【问题标题】:How to jump to a Scheme definition in EMACS如何跳转到 EMACS 中的方案定义
【发布时间】:2015-05-25 20:18:32
【问题描述】:

EMACS 具有用于 SLIME 的 Meta . 键绑定,该键绑定仅适用于 Common Lisp。

有没有更通用的方法来定义一个适用于 Scheme 的函数?也许是通过 Cscope 之类的资源进行搜索的东西?

【问题讨论】:

    标签: emacs scheme racket


    【解决方案1】:

    对于 Racket,请使用 Greg Hendershott 编写的 racket-mode

    https://github.com/greghendershott/racket-mode

    racket-visit-definition 上与 M-. 绑定的文档。

    Docs on racket-visit-documentation

    【讨论】:

    • 这比 SLIME 版本有更严格的限制。它甚至有时需要你使用racket-run,它被记录为类似于重新启动 Racket REPL 并重新加载所有内容。避免这样做(在 Racket 可能的有限范围内)是我使用 EMACS 而不是 DrRacket 的原因之一。而且它找不到任何在不同命名空间中的东西,所以如果我用 C-f 找不到它,我也将无法找到它。
    • 请注意,由于宏的原因,在 Scheme 和 Common Lisp 中比在 C 中更难实现查找定义功能。例如考虑: (struct foo (bar)) 在扩展标识符 foo 之后?富酒吧设置富酒吧!可用。这些都不存在于源代码中。
    • 由于模块,标识符排序可能会同时在多个模块中定义。模式racket-mode 将由于命名空间限制能够找到在调用racket-visit-definition 时实际使用的sort
    • 如果您想使用M-. 作为发现现有功能的一种方式,那么我建议您同时搜索 docs.racket-lang.org 和 github.org。在 githun 添加 language:racket 以将结果限制为 Racket 函数。
    • C 也有宏,它们会导致相同类型的问题。但是,拥有能够解析源代码中可以解析的内容的东西比必须放到 shell 中运行 grep -rl 更好,这就是我现在找到这些定义的方式。
    【解决方案2】:

    试试Geiser。它相当于 SLIME for Scheme。 M-. 也在那里。

    【讨论】:

      【解决方案3】:

      您可以使用etags 自己生成标签文件(类似于vim 的ctags)。这些应该可以在 vanilla emacs 中工作(没有粘液):

      etags *.scm

      etags 不会递归遍历目录。至于解决方案,这看起来很有希望:How to use shell magic to create a recursive etags using GNU etags?

      etag 文档:https://www.gnu.org/software/emacs/manual/html_node/eintr/etags.html

      【讨论】:

        猜你喜欢
        • 2022-01-07
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        • 1970-01-01
        • 2012-10-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多