我正在使用vim和ctags来获取标记列表.但对于javascript,它不适用于此约定
MyClass.extend({
xxx: function(){
},
...
})
MyClass.prototype = {
method : function(){ }
}
MyClass.prototype.method = function () {
}
Run Code Online (Sandbox Code Playgroud) 我最近放弃了鼠标驱动的,特定于平台的GUI编辑器,并完全致力于vim.迄今为止的体验非常棒,但是当涉及到Javascript时我就陷入了困境.
广受欢迎的taglist实用程序(使用Exuberant Ctags)除了Javascript外,一切都很棒.使用该语言过于自由的形式和结构,taglist只能在我打开它时获取一些功能 - 只有以下格式定义的那些:
function FUNCNAME (arg1, arg2) {
Run Code Online (Sandbox Code Playgroud)
但没有定义的变量或函数对象:
var myFunc = function (arg1, arg2) {
Run Code Online (Sandbox Code Playgroud)
所以我google了一下,找到了ctags的以下定义集,我把它放在〜/ .ctags文件中:
--langdef=js
--langmap=js:.js
--regex-js=/([A-Za-z0-9._$]+)[ \t]*[:=][ \t]*\{/\1/,object/
--regex-js=/([A-Za-z0-9._$()]+)[ \t]*[:=][ \t]*function[ \t]*\(/\1/,function/
--regex-js=/function[ \t]+([A-Za-z0-9._$]+)[ \t]*([^])])/\1/,function/
--regex-js=/([A-Za-z0-9._$]+)[ \t]*[:=][ \t]*\[/\1/,array/
--regex-js=/([^= ]+)[ \t]*=[ \t]*[^""]'[^'']*/\1/,string/
--regex-js=/([^= ]+)[ \t]*=[ \t]*[^'']"[^""]*/\1/,string/
Run Code Online (Sandbox Code Playgroud)
之后,从命令行运行ctags非常棒.它找到了我需要它找到的每个功能和对象.
问题是taglist.vim插件没有看到这些新结果.当我在vim中打开我的javascript文件并点击:TlistToggle时,我得到了与之前相同的少量功能.我点击'u'更新列表,没有任何效果.
深入taglist.vim,我发现了这个:
" java language
let s:tlist_def_java_settings = 'java;p:package;c:class;i:interface;' .
\ 'f:field;m:method'
" javascript language
let s:tlist_def_javascript_settings = 'javascript;f:function'
Run Code Online (Sandbox Code Playgroud)
...这意味着我们只是从jta的ctags实用程序中查看一种特定类型的输出.不幸的是,我对taglist或vim一般都不够精明(尚未)发现我可以做出哪些改变以使所有那些精彩的ctags命令行结果显示在vim中.
帮助赞赏!