我最近放弃了鼠标驱动的、特定于平台的 GUI 编辑器,完全致力于 vim。到目前为止的体验非常棒,但是在谈到 Javascript 时我被困住了。
广受欢迎的 taglist 实用程序(使用 Exuberant Ctags)非常适合除 Javascript 之外的所有内容。由于语言过于自由的形式和结构,当我打开 taglist 时,它只能获取少数几个函数——只有那些以以下格式定义的函数:
function FUNCNAME (arg1, arg2) {
但没有定义如下变量或函数对象:
var myFunc = function (arg1, arg2) {
所以我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/
之后,从命令行运行 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'
...这意味着我们只查看 ctags 实用程序用于 javascript 的一种特定类型的输出。不幸的是,我对 taglist 或 vim 的了解还不够(还),无法发现我可以做出哪些改变来让所有那些美妙的 ctags 命令行结果显示在 vim 中。
帮助表示赞赏!