I ve recently abandoned mouse-driven, platform-specific GUI editors and committed entirely to vim. The experience so far has been fantastic, but I m stuck when it comes to Javascript.
The ever-popular taglist utility (using Exuberant Ctags) has been great for everything but Javascript. With the language s overly-free form and structure, taglist could only pick up a handful of functions when I opened it up -- only those defined in the format:
function FUNCNAME (arg1, arg2) {
but no variables or function objects defined like:
var myFunc = function (arg1, arg2) {
So I googled a bit and found the following definition set for ctags, which I put in my ~/.ctags file:
--langdef=js
--langmap=js:.js
--regex-js=/([A-Za-z0-9._$]+)[ ]*[:=][ ]*{/1/,object/
--regex-js=/([A-Za-z0-9._$()]+)[ ]*[:=][ ]*function[ ]*(/1/,function/
--regex-js=/function[ ]+([A-Za-z0-9._$]+)[ ]*([^])])/1/,function/
--regex-js=/([A-Za-z0-9._$]+)[ ]*[:=][ ]*[/1/,array/
--regex-js=/([^= ]+)[ ]*=[ ]*[^""] [^ ]*/1/,string/
--regex-js=/([^= ]+)[ ]*=[ ]*[^ ]"[^""]*/1/,string/
After that, running ctags from the command line was fantastic. It found every function and object that I needed it to find.
The problem is that the taglist.vim plugin isn t seeing those new results. When I open my javascript file in vim and hit :TlistToggle, I get the exact same meager handful of functions I got before. I hit u to update the list, with no effect.
Digging into taglist.vim, I found this:
" 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
...which implies we re only looking at one specific kind of output from the ctags utility for javascript. Unfortunately, I m not savvy enough with taglist or vim in general (yet) to discover what change I can make to get all those wonderful ctags command-line results to show up in vim.
Help appreciated!