你试过TagBar吗?这是对相同想法的更现代的看法,它更适用于 JavaScript,甚至支持 jsctags。

左边是 TagList,右边是 TagBar。
TagList 不起作用,因为 Exuberant ctags(TagList 用来索引您的代码的程序)对 JavaScript 不是很好,尤其是带有回调、闭包和自执行函数的现代东西。
另一方面,如果 JavaScript 可用,TagBar 使用 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 一起工作的 SO 上有很多问题:here和here。
所以,基本上,有两种方法可以解决你的问题:自定义 ctags 或使用 tagbar+jsctags。