Vim配置钢铁雄心文档大纲
2023年9月20日Tagbar (https://majutsushi.github.io/tagbar/)是一个Vim插件,可以在Vim里显示代码大纲。它其实不限定自己只能显示“代码”大纲,它可以显示任何大纲式的内容。所以它可以显示XML大纲,也能显示钢铁雄心mod文件的大纲。
Tagbar仅仅负责显示大纲,而不负责生成。生成大纲的工作由Exuberant ctags (http://ctags.sourceforge.net)或Universal Ctags(http://docs.ctags.io)担任。Universal Ctags是Exuberant ctags的后继,所以推荐使用。
安装Tagbar和Universal Ctags,确保在Vim里运行:Tagbar可以显示c++、Java、C#等文件的大纲,然后再配置钢铁雄心mod文件。
既然Tagbar仅仅负责显示,我们要先让Universal Ctags学会钢铁雄心文件结构。我用以下文件为例。
buildings = { # show_on_map: # if provincial = yes, then show_on_map = X is amount per each province # if provincial = no, then show_on_map = X is amount per state infrastructure = { base_cost = 3000 icon_frame = 3 infrastructure = yes max_level = 10 value = 1 } arms_factory = { show_on_map = 6 base_cost = 7200 base_cost_conversion = 4000 military_production = 1 icon_frame = 2 max_level = 20 shares_slots = yes value = 8 infrastructure_construction_effect = yes } }
我要把buildings、infrastructure、arms_factory等作为大纲标题显示出来。
Universal Ctags的帮助文档写得比较面向使用过Exuberant ctags的老用户,不太有关于ctags的基础知识,所以还得去看Exuberant ctags的帮助文档。
按照How to Add Support for a New Language to Exuberant Ctags (http://ctags.sourceforge.net/EXTENDING.html),在%HOME%\.ctags.d路径下创建一个扩展名.ctags的文件。HOME是环境变量。我把该文件命名为hoi.ctags,比较好辨认。文件里写
--langdef=hoi --langmap=hoi:.txt --regex-hoi=/^([a-zA-Z0-9_]+)\s*\=//s,section/
第一行定义语言名称,第二行指定语言映射,即hoi语言的文件扩展名是.txt。这个定义过于广泛,但还算能用。第三行使用正则表达式提取标签(tag)。
/^([a-zA-Z0-9_]+)\s*\=//s,section/
^([a-zA-Z0-9_]+)\s*\=
匹配原文件,\1把匹配组提取为标签,s,section指定该标签的类型——短名称和长名称。没有预设的标签类型,都是自定义的。
最后在命令行里运行
B:\>ctags -f - --format=2 --excmd=pattern --extra= --fields=nksaSmt 00_buildings.txt ctags: Warning: --extra option is obsolete; use --extras instead buildings 00_buildings.txt /^buildings = {$/;" s line:10
确保能输出提取到的标签,Universal Ctags就算配置完成了。
接着配置Tagbar。添加以下代码到_vimrc。
autocmd BufNewFile,BufRead */Hearts\sof\sIron*.txt set ft=hoi let g:tagbar_type_hoi = { \ 'ctagstype': 'hoi', \ 'kinds': [ 's:section' ] \}
第一句是说在Hearts of Iron文件夹里的txt文件的语言都是hoi。尽管Universal Ctags里我们制定了语言映射,Vim仍需要再次指定映射。其中原因尚不明确。
第二段是tagbar设置,指定对于hoi语言,要显示section。
最后打开钢铁雄心文件,调用:Tagbar
,确认大纲显示成功。