Vim tagslist插件没有检测到自定义语言(球拍)

时间:2012-01-26 02:22:34

标签: vim ctags taglist tagbar

我最近开始使用球拍,我做过的第一件事就是尝试让vim TagList plugin使用它。但是,它丝毫不起作用。我可以打开racket文件,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的页面,但它不会让我(新用户)。可以在扩展标记列表页面上找到它的链接。

编辑

来自命令行的

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

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

关于TagBar

在人们提出建议之前,我没有见过TagBar。有趣的是,它只是改变了我的.ctags文件。不幸的是,我没有找到一个设置来按照TagList的方式显示所有加载缓冲区中的标记,所以我更喜欢使用TagList。

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

再次感谢,

2 个答案:

答案 0 :(得分:1)

以下是我从official documentation解除并保存为tt.rkt的小型球拍片段:

(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和TagBarchecker列为“函数”。

从左到右:文件TagBar,TagList。

TagList and TagBar against a racket file

据我了解,“球拍”是一些Scheme衍生品的品牌重塑。如果它与标准没有太大差异,那么在~/.vimrc中添加此行可能会有所帮助:

autocmd BufRead,BufNewFile *.rkt set filetype=scheme

答案 1 :(得分:1)

我一直在努力解决同样的问题,不过对于xslt文件......我的解决方案是通过在taglist.vim中进行搜索找到的,我为此添加了一行

let s:tlist_def_xslt_settings = 'xslt;f:function:v:variable'

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