【问题标题】:Vim tagslist plugin not detecting custom language (racket)Vim tagslist 插件未检测到自定义语言(球拍)
【发布时间】:2012-04-27 00:05:36
【问题描述】:

我最近开始使用球拍,我做的第一件事就是尝试让 vim TagList plugin 使用它。但是,它根本不起作用。我可以打开球拍文件,并且 TagList 窗口将像打开文本文件一样空白。

根据extending page*,我已将以下内容添加到我的 ~/.vimrc 文件中:

let Tlist_Ctags_Cmd = 'ctags --langdef=racket --langmap=racket:.rkt --regex-racket=/^\(def[a-zA-Z0-9\-_\?\/\\]+[ \t]+([a-zA-Z0-9\-_\/\\\?]+)/\1/d,definition/'
let Tlist_racket_settings = 'racket;d:Definition'

额外的 ctags 内容也在我的 ~/.ctags 文件中,但 TList 吐出关于我的设置行不好的错误。我最初尝试使用 ctags 现有的方案功能,但我没有得到相同的结果。要使用现有的方案功能,我在 ~/.vimrc 中尝试了以下操作

let Tlist_Ctags_Cmd = 'ctags --langmap=scheme:.rkt'
let Tlist_racket_settings = 'racket;f:Functions'

如果其他人对如何使其工作有任何想法,那么我将非常感激。

谢谢,

  • 我也会在一个页面上发布一个指向 ctags 的链接,但它不会让我(新用户)。可以在扩展的 taglist 页面上找到指向它的链接。

编辑

来自命令行的 ctags

我可以从命令行使用 ctags。使用 TagList FAQ 页面上的 ctags 行进行测试,我得到以下信息:

 $ cat ~/.ctags
--langdef=racket
--langmap=racket:.rkt
--regex-racket=/^\(def[a-zA-Z0-9\-_\?\/\\]+[ \t]+([a-zA-Z0-9\-_\/\\\?]+)/\1/d,definition/
--regex-racket=/^\(define\-syntax(\-rule)?[ \t]+([a-zA-Z0-9\-_\/\\\?]+)/\2/m,macro/
--regex-racket=/^\(define?[ \t]+(([a-zA-Z0-9\-_\/\\\?]+)[ \t]+\(lambda|\(([a-zA-Z0-9\-_\/\\\?]+))/\2\3/f,function/
$ ctags  -f - --format=2 --excmd=pattern --fields=nks XMMSClient.rkt 
defenum XMMSClient.rkt  /^(define-syntax defenum$/;"    m   line:11
defxmmsc    XMMSClient.rkt  /^(define-syntax defxmmsc$/;"   m   line:20
libxmmsclient   XMMSClient.rkt  /^(define libxmmsclient (ffi-lib "libxmmsclient"))$/;"  d   line:5

如果我使用开关强制语言定义,或者如果我将语言更改为方案,则输出是相同的。

关于标签栏

在人们建议之前,我没有见过 TagBar。有趣的是,它只适用于对我的 .ctags 文件的更改。不幸的是,我没有找到像 TagList 那样显示所有加载缓冲区中的标签的设置,所以我更喜欢使用 TagList。

我会发布比较图像,但我认为它不会让我作为新成员。根据 romainl 的建议,我可以将 vim 文件类型设置为方案,它确实有效。然而,这似乎只是一个 80% 的解决方案,当根据扩展页面的文档似乎表明我所拥有的应该工作时。也许我应该考虑提交错误报告。

再次感谢,

【问题讨论】:

  • 当您直接从命令行使用 ctags 时,您的设置是否有效?如果不是,这不是 TagList 或 Vim 的问题,而是你的正则表达式的问题。
  • 当直接使用 ctags 时,--langmap=scheme:.rkt 是否有效?
  • 试试 tagbar 比 taglist 好看
  • @locojay 确实如此,但它不会(据我所知)一次显示多个缓冲区的标签。
  • @romainl 对这两个问题都是肯定的。我正在编辑帖子以提供更多详细信息。

标签: vim ctags taglist tagbar


【解决方案1】:

这是我从official documentation 取出并保存为tt.rkt 的一个小球拍sn-p:

(define (checker p1 p2)
  (let ([p12 (hc-append p1 p2)]
        [p21 (hc-append p2 p1)])
    (vc-append p12 p21)))

如果没有特定于球拍的语法/缩进文件,则无论ft 设置为racket(当然)还是什么都不显示(默认设置),都不会显示任何内容。如果我:set ft=scheme,TagList 和TagBar 都将checker 列为“函数”。

从左到右:文件、TagBar、TagList。

据我了解,“Racket”是对某些 Scheme 衍生产品的更名。如果它不偏离规范太多,在您的 ~/.vimrc 中添加这一行可能会有所帮助:

autocmd BufRead,BufNewFile *.rkt set filetype=scheme

【讨论】:

  • 感谢您的回答。我实际上并没有找到 TagBar,有趣的是,它只适用于我的 .ctags 文件,我在测试时添加了该文件。不幸的是,虽然它确实有效,但它不会同时显示来自多个缓冲区的标签(至少,我没有看到它的选项)。我想看看我是否可以解决问题,但很高兴知道我可以解决它。谢谢。
  • 不,TagBar 不显示多个缓冲区的标签,但您仍然可以使用像 :tselect 这样的本机命令。它没有那么漂亮和方便,但它确实有效。
【解决方案2】:

我一直在为同样的问题苦苦挣扎,但对于 xslt 文件...我的解决方案是通过在 taglist.vim 中四处寻找找到的,因此我为

添加了一行
let s:tlist_def_xslt_settings = 'xslt;f:function:v:variable'

尝试搜索 Vim 代码的 s:tlist_def_ 部分并输入一些看起来合理的内容。 Tagbar 中也有类似的机制。我没有详细阅读代码,所以我不知道为什么它需要这个并且不使用 cta 的输出

【讨论】:

  • 注:我上面的代码行不完整...仅作为示例。
猜你喜欢
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 2022-10-06
相关资源
最近更新 更多