xra*_*alf 2 javascript vim taglist
我正在使用taglist插件几天,现在我尝试使用Javascript,但在Javascript中它只显示部分信息或没有信息.似乎问题可能出在名称空间中,因为函数是在
var namespace_name = {
f1: function() {
},
f2: function() {
},
.
.
.
};
Run Code Online (Sandbox Code Playgroud)
或者这种功能(匿名)
var something = (function f() {
}
...
})();
Run Code Online (Sandbox Code Playgroud)
你知道如何纠正这个问题吗?
谢谢
你试过TagBar吗?这是一个更现代的相同想法,它可以更好地使用JavaScript,甚至支持jsctags.

左边是TagList,右边是TagBar.
TagList不起作用,因为Exuberant ctags(TagList用来索引代码的程序)对JavaScript不是很好,尤其是具有回调,闭包和自执行功能的现代东西.
另一方面,TagBar使用jsctags作为JavaScript,如果可用的话.Jsctags是用现代JavaScript制作的,因此工作得更好.
比较根据以下代码生成的这些标记文件(基于您的示例):
var namespace_name = {
f1: function() {
window.alert("f1");
},
f2: function() {
window.alert("f2");
}
};
var something = (function f() {
window.alert("something");
})();
Run Code Online (Sandbox Code Playgroud)
产量$ ctags .:
// empty file expect for the header
Run Code Online (Sandbox Code Playgroud)
产量$ 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
Run Code Online (Sandbox Code Playgroud)
关于自定义丰富的ctags以使其在JavaScript中更好地工作有很多问题:在这里和这里.
所以,基本上,有两种方法可以解决您的问题:自定义ctags或使用tagbar + jsctags.