14

我正在寻找与 Haskell 等效的 ctags。我试过hasktags,但它有一些问题:

enumerator的源文件夹中,运行hasktags .给出:

hasktags: tags: openFile: resource busy (file is locked)

当我运行时vim -t enumFile,会发生错误:

E431: Format error in tags file "tags"
Before byte 4085
E426: tag not found: enumFile

我也试过gasbag,但它不能在 ghc-7.0.4 上编译。

4

2 回答 2

13

您使用的是 Mac OS X(或 Windows,见下文),不是吗?在这种情况下,hasktags -c(仅创建 Vi 格式标签)将解决您的问题。

这不是唯一的解释,以下是在 OS X 系统上发生的情况:

  • 默认情况下,hasktags 假定您需要 vi 和 Emacs 的两个标签。
  • 因此,它尝试同时创建tags(for Vi) 和TAGS(for Emacs)
  • 但是,OS X 与 Unix 不同,默认情况下不区分大小写。因此,您不能同时拥有这两个文件。
  • 而不是用另一个文件覆盖一个文件,由于某种原因,hasktags 会发生冲突,可能是因为它在关闭“其他”之前打开了一个文件。正如 Evan Laforge 所解释的那样,我希望这是由于惰性 I/O。

更新:正如评论所指出的,Windows 也不区分大小写,因此可能会出现类似的问题。

于 2013-02-10T02:25:12.800 回答
9

hasktags 有一些错误,其中之一是它使用了惰性 IO,这往往会导致那些资源繁忙的错误。

碰巧,我刚刚写了一个标签程序,在http://hackage.haskell.org/package/fast-tags

其他选项是 hothasktags,它可以制作合格的 Module.function 标签,以及 lushtags,它旨在与一个花哨的 IDE 类 vim 标签栏集成。根据我的经验,hothasktags 会生成巨大的标签文件,并且一旦无法解析文件,lustags 就会崩溃。两者都使用 haskell-src-exts 这意味着它们是准确的,但是如果它们无法解析您的文件并且无法处理 .hsc 文件,则会崩溃。fast-tags 有自己的解析器,这意味着它没有这些问题,但也更容易解析丢失标签或提供虚假标签的错误。

正如您所注意到的,gasbag(和 htags)使用 haskell-src,这意味着它们仅适用于 Haskell 98。

免责声明:如果 TAGS 你的意思是 emacs 标签,fast-tags 还没有做这些,但如果有人关心它会很容易添加。

于 2012-04-08T01:33:51.573 回答