当我们新创建一个工程的时候(就是新建一个”.VimEntry”文件⊙﹏⊙b汗),打开工程,总会有许多默认的配置被写到这个文件中,我想你一定很纳闷这些数据都代表啥含义,也一定像我一样,想更改这些配置,来让我们的exVIM更符合自己的要求。OK,不多废话,让我们开始吧。
exVim是通过一个名曰: exEnvironment的插件来实现将这些默认的配置信息拷贝到.VimEntry文件中的,所以,我们就从这个插件下手,应该没错。
一、 VimEntry文件的语法
是的,如果你找到并打开\vimfiles\plugin\exEnvironmentSetting.vim这个文件,你肯定也很确定,我们找对地方了。不管你动不动英文,只看里面的结构和大致的内容,我们都能猜的到,它在干什么。
由于大多中国人都不喜欢看说明文档,所以我这里大致在说明下这个插件使用方法:
exEnvironment插件会给每个”=”号后的值创建一个全局变量,变量名要以g:exES开头,比如我们在”.VimEntry”文件定义如下:
Variable1='this is a test',
这时,exEnvironment会创建一个名为g:exES_Variable1的变量,它的值是'this is a test'。
exEnvironment也支持字符串列表,我们只需要用”+=”来代替”=”就可以了。比如:
List1+='item1'
List1+='item2'
List1+='item3'
需要说明的是,exEnvironment 只能解析字符串。接下来怎么修改,就看大家的情况了。你可以只修改工程的VimEntry文件,也可以直接修改它的模板。
二、 配置VimEntry文件
倘若你认真的看过VimEntry文件。你一定发现了下面这段配置信息
-- auto-gen settings (DO NOT MODIFY) --
CWD=D:/exDev/Project/FirstPlg
Version=23
VimEntryName=FirstPlg
VimfilesDirName=_vimfiles_FirstPlg
这段配置信息每次启动exVIM时都会被加载,虽然上面写着不需要修改,但是如果我们要更新VimEntry,就可以修改一下这个地方,exEnvironment会自动检测这个这里是否是合适的配置,如果不是,exEnvironment就会将这里重写这个配置。当然这里一般情况下还是不修改的好,否则代价就是丢失当前工程的配置信息。
OK,不废话,我们进入正题,讲述下VimEntry文件中我们不晓得的一些配置选项。
1、 LangType选项
该选项来控制exVIM能识别那些语言类型,一般默认情况下,这个选项的配置如下:
-- ex-plugins File Settings --
LangType=auto
也就是说他自动的识别一些默认类型,默认情况下,这个配置是在 g:exES_UpdateEnvironment中写好的:
" set default language type map
if exists('g:exES_LangType')
if g:exES_LangType != 'auto' " if auto, we use default language map.
let lang_list = split( g:exES_LangType, ',' )
silent call exUtility#SetProjectFilter ( "file_filter", exUtility#GetFileFilterByLanguage (lang_list) )
endif
endif
file_filter中的内容可以在:D:\exDev\exVim\toolkit\quickgen\bash\quick_gen_project.sh中找到:
file_filter="c|cpp|cxx|c\+\+|C|cc|h|H|hh|hxx|hpp|inl|cs|uc|hlsl|vsh|psh|fx|fxh|cg|shd|glsl|py|pyw|vim|awk|m|dox|doxygen|ini|cfg|wiki|mk|err|exe|bat|sh"
只要我们按照我们的配置来设定,去掉auto,写上你需要特殊处理的语言类型就可以了。比如:
LangType= asm, lua, c
当然这个选项也不能乱填,默认的这个选项后面可以填写如下的内容:
c,cpp,c#,shader,python,vim,math,uc,javascript,java,html,lua
如果你要让exVIM支持一种新的语言类型,可以参考后面的内容。
2、 vimentryRefs
通过这个选项我们可以引用其它vimentry的配置到当前的工程中。比如继承其它vimentry 的tags文件,符号信息等。
当然这个选项也很简单,只要将要引用的vimentry文件的路径添加上就可以了。比如:
vimentryRefs+= D:\exDev\Project\kllan\kllan.vimentry
vimentryRefs+= D:\exDev\Project\SqlLib\Sqlib.vimentry
3、 Restore Buffer
这个选项是说明,当我们打开一个vimentry文件时,是否恢复到上次的使用上下文。如果设置为:"RestoreBuffer=true", 保存并退出exVim,当你下次打开这个工程师,就会提示你是否恢复到上次退出时的环境。
当然,如果不想要这个功能,只要将这个选项设置为false就可以了。
三、 添加一种新的语言类型
我们在本章一开头写到过如何设置LangType选项,但是这个后面仅能跟已经支持过的语言类型,倘若我们现在要让exVIM支持一个新的语言类型(比如我们自己写的一套脚本引擎,要想用exVIM作为它的开发环境…)的话就要在以下几个方面做修改。
1、 添加新的exVIM语言映射
据说明书上说,ExVIM默认支持如下一些语言类型:
Language Type
|
File Type
|
asm
|
asm, ASM
|
awk
|
awk, gawk, mawk
|
batch
|
bat
|
c
|
c, C
|
cpp
|
c++, cc, cp, cpp, cxx, h, H, h++, hh, hp, hpp, hxx, inl, ipp
|
c#
|
cs
|
doxygen
|
dox, doxygen
|
debug
|
log, err, exe
|
html
|
htm, html
|
ini
|
ini, cfg
|
java
|
java
|
javascript
|
js
|
lua
|
lua
|
make
|
mak, mk, Makefile, makefile
|
math
|
m
|
python
|
py, pyw, pyx, pxd
|
ruby
|
rb, ruby
|
sh
|
sh, SH, bsh, bash, ksh, zsh
|
shader
|
hlsl, vsh, psh, fx, fxh, cg, shd, glsl
|
uc
|
uc
|
vim
|
vim
|
wiki
|
wiki
|
xml
|
xml
|
当我们设置LangType选项为auto时,exVIM将通过exProject插件以” File Type”为过滤条件来获取相应的语言类型。如果LangType选项被设置为某一个具体的语言时(比如: LangType=c,cpp,python),则exVIM将找到这个文件类型并将它应用的exProject的文件过滤中和quick_gen_project脚本中。
如果你要添加一个新的语言映射,你可以使用:
function exUtility#AddLangMap( langmap_type, lang_type, file_type_list )
l "langmap_type" : 这个值可以设置为"exvim"或者"ctags",稍后我们在讲'ctags'的情况,这里我们设置为'exvim'
l "lang_type": 这里就填 语言类型(也就是上面表中的 language type) ,如果这里填写的不是上面表中存在的语言类别。那它就会在表中新建一项
l "file_type_list": 就填我们要添加的文件类型,如果文件类型已经存在了,这个函数将跳过这个选项。
比如,我们要给JavaScript语言添加一个’as’的文件类型,就可以这样:
call exUtility#AddLangMap ( 'exvim', 'javascript', ['as'] )
你也可以用这个函数来重新这个文件类型的映射,它将用新的文件类型覆盖已经存在的映射项目:
function exUtility#ResetLangMap( langmap_type, lang_type, file_type_list )
2、 添加ctags的语言映射
Ctags也有它自己的语言映射表,如下:
Language Type
|
File Type
|
asm
|
asm, ASM, s, S, A51
|
asp
|
asp, asa
|
awk
|
awk, gawk, mawk
|
basic
|
bas, bi, bb, pb
|
beta
|
bet
|
c
|
c
|
cpp
|
c++, cc, cp, cpp, cxx, h, h++, hh, hp, hpp, hxx
|
c#
|
cs
|
cobol
|
cbl, cob, CBL, COB
|
eiffel
|
e
|
erlang
|
erl, ERL, hrl, HRL
|
fortran
|
fo, ft, f7, f9, f95
|
html
|
htm, html
|
java
|
java
|
javascript
|
js
|
lisp
|
cl, clisp, el, l, lisp, lsp, ml
|
lua
|
lua
|
make
|
mak, mk, Makefile, makefile
|
pascal
|
p, pas
|
perl
|
pl, pm, plx, perl
|
php
|
php, php3, phtml
|
python
|
py, pyx, pxd, scons
|
rexx
|
cmd, rexx, rx
|
ruby
|
rb, ruby
|
scheme
|
SCM, SM, sch, scheme, scm, sm
|
sh
|
sh, SH, bsh, bash, ksh, zsh
|
slang
|
sl
|
sml
|
sml, sig
|
sql
|
sql
|
tcl
|
tcl, tk, wish, itcl
|
vera
|
vr, vri, vrh
|
verilog
|
v
|
vim
|
vim
|
yacc
|
y
|
如果我们要添加新的语言映射,方法跟添加exVIM语言映射一样。只是第一个参数填写:’ ctags’
3、 让cscope支持新的文件类型
Cscope本来是用来分析C程序的,有时人们用他来分析C++或者汇编程序。要想让cscope在exVim中支持新添加的语言。你只需要在g:ex_cscope_langs中添加新的语言类型就可以了。默认情况下,g:ex_cscope_langs的内容是:
let g:ex_cscope_langs = ['c', 'cpp', 'shader', 'asm' ]