Taglist插件不显示Javascript函数

时间:2011-10-20 10:37:04

标签: javascript vim taglist

我正在使用taglist插件几天,现在我尝试使用Javascript,但在Javascript中它只显示部分信息或没有信息。似乎问题可能出在命名空间上,因为函数在

var namespace_name = {

f1: function() {
},
f2: function() {
},
.
.
.

};

或此类功能(匿名)

var something = (function f() {
   }
   ...
})();

你知道如何纠正这个问题吗?

谢谢

1 个答案:

答案 0 :(得分:5)

你试过TagBar吗?对于同样的想法,这是一个更现代的看法,它可以更好地使用JavaScript,甚至支持jsctags。

taglist on the left, tagbar on the right

左边的TagList,右边的TagBar。

TagList不起作用,因为Exuberant ctags(TagList用来索引你的代码的程序)对JavaScript不是很好,尤其是具有回调,闭包和自执行功能的现代东西。

另一方面,如果可用,TagBar会使用JavaScript的jsctags。 Jsctags是用现代JavaScript制作的,因此工作得更好。

比较根据以下代码生成的这些标记文件(基于您的样本):

var namespace_name = {

    f1: function() {
        window.alert("f1");
    },
    f2: function() {
        window.alert("f2");
    }
};
var something = (function f() {
    window.alert("something");
})();

$ ctags .的输出:

// empty file expect for the header

$ jsctags .的输出:

// skipped header
namespace_name  test.js /^var namespace_name = {$/;"    v   lineno:1    type:Object
f1  test.js /^\tf1: function() {$/;"    f   lineno:3    type:void function()
f2  test.js /^\tf2: function() {$/;"    f   lineno:6    type:void function()
f   test.js /^var something = (function f() {$/;"   f   lineno:11   type:void function()
something   test.js /^var something = (function f() {$/;"   v   lineno:11   type:undefined

关于自定义丰富的ctags以使其更好地使用JavaScript,有很多问题:herehere

所以,基本上,有两种方法可以解决您的问题:自定义ctags或使用tagbar + jsctags。