【问题标题】:What are some useful emacs functions for refactoring?有哪些有用的 emacs 重构函数?
【发布时间】:2010-09-16 03:11:44
【问题描述】:

目前我一直坚持使用 multi-occur-in-matching-buffersrgrep,虽然功能强大,但我想还是很基本的。

尽管我意识到除了匹配正则表达式和重命名之外,还需要与 CEDET's semantic bovinator 集成,但我觉得这里仍有改进的空间。

内置函数、包或自定义代码对完成工作有什么帮助?

干杯

【问题讨论】:

标签: emacs refactoring elisp


【解决方案1】:

在 CEDET 中,有一个符号引用工具。默认情况下,它还在项目中使用 find/grep 来查找符号的出现。最好使用 GNU Global、IDUtils 或 CScope 在您的项目中创建数据库。然后,您可以使用 semantic-symref-symbol ,然后使用 gnu global 或其他任何东西来查找所有引用。

一旦进入 symref 列表缓冲区,您就可以查看命中。然后,您可以选择各种命中并执行符号重命名等操作,或者更强大的是,对所有命中执行宏。

虽然可以创建更多集中的命令,但宏功能几乎可以让熟悉 Emacs 键盘宏的专家用户执行任何操作。

【讨论】:

  • 嗨 Eric,所以基本上 CEDET 可以提供一个通用架构来引用符号,根据手头的语言可以从更专业的包中填充?如果是这样,这听起来很有趣!
  • 在您的网站上了解它,我现在有了答案。但是,我仍然想知道如何扩展它以使用其他工具,例如在另一个答案中提到的粘液......这里的起点是什么?
  • 是的。 CEDET 试图在特定语言的解决方案和更通用的接口之间提供通用接口。因此,任何特定语言的任何特定代码索引器都可以改装到 Semantic 中的“symref”api 中。之后,任何使用 symref 的工具,比如我上面提到的 symref 列表模式都可以使用。其他人也可以实现一些新工具,使用 symref API 来做其他事情,因为知道它可以与各种工具一起使用。如果您查看 semantic-symref-global.el,如果您想支持 slime,这是一个非常基本的示例。
  • 似乎 CEDET 是要走的路,在定义诸如“将方法移动到超类”之类的重构时是否允许与语言无关的语义(当然不是最好的例子......)。我一直在拖延一段时间,但听起来是时候系好安全带了!感谢 Eric 的回答和出色的工作。
【解决方案2】:

这取决于您使用的语言;如果slime 支持您的语言,则有 who 命令系列:slime-who-calls、who-references、who-binds、calls-who 等。它们提供真实的、基于语义的信息,因此更可靠比正则表达式匹配。

【讨论】:

    【解决方案3】:

    如果您正在编辑 lisp,我发现(通常)使用 paredit.el 包很有用。点击文档链接,视频是一个很好的介绍。

    【讨论】:

      猜你喜欢
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 2010-09-18
      相关资源
      最近更新 更多