當我們新創建一個工程的時候(就是新建一個”.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' ]