ExVim 試用手記 —— 工程管理之 修改工程配置
Posted on 2010-05-30 01:00 besterChen 閱讀(3975) 評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi): Vi/Vim/GVim當(dāng)我們新創(chuàng)建一個(gè)工程的時(shí)候(就是新建一個(gè)”.VimEntry”文件⊙﹏⊙b汗),打開(kāi)工程,總會(huì)有許多默認(rèn)的配置被寫(xiě)到這個(gè)文件中,我想你一定很納悶這些數(shù)據(jù)都代表啥含義,也一定像我一樣,想更改這些配置,來(lái)讓我們的exVIM更符合自己的要求。OK,不多廢話,讓我們開(kāi)始吧。
exVim是通過(guò)一個(gè)名曰: exEnvironment的插件來(lái)實(shí)現(xiàn)將這些默認(rèn)的配置信息拷貝到.VimEntry文件中的,所以,我們就從這個(gè)插件下手,應(yīng)該沒(méi)錯(cuò)。
一、 VimEntry文件的語(yǔ)法
是的,如果你找到并打開(kāi)\vimfiles\plugin\exEnvironmentSetting.vim這個(gè)文件,你肯定也很確定,我們找對(duì)地方了。不管你動(dòng)不動(dòng)英文,只看里面的結(jié)構(gòu)和大致的內(nèi)容,我們都能猜的到,它在干什么。
由于大多中國(guó)人都不喜歡看說(shuō)明文檔,所以我這里大致在說(shuō)明下這個(gè)插件使用方法:
exEnvironment插件會(huì)給每個(gè)”=”號(hào)后的值創(chuàng)建一個(gè)全局變量,變量名要以g:exES開(kāi)頭,比如我們?cè)?/font>”.VimEntry”文件定義如下:
Variable1='this is a test',
這時(shí),exEnvironment會(huì)創(chuàng)建一個(gè)名為g:exES_Variable1的變量,它的值是'this is a test'。
exEnvironment也支持字符串列表,我們只需要用”+=”來(lái)代替”=”就可以了。比如:
List1+='item1'
List1+='item2'
List1+='item3'
需要說(shuō)明的是,exEnvironment 只能解析字符串。接下來(lái)怎么修改,就看大家的情況了。你可以只修改工程的VimEntry文件,也可以直接修改它的模板。
二、 配置VimEntry文件
倘若你認(rèn)真的看過(guò)VimEntry文件。你一定發(fā)現(xiàn)了下面這段配置信息
-- auto-gen settings (DO NOT MODIFY) --
CWD=D:/exDev/Project/FirstPlg
Version=23
VimEntryName=FirstPlg
VimfilesDirName=_vimfiles_FirstPlg
這段配置信息每次啟動(dòng)exVIM時(shí)都會(huì)被加載,雖然上面寫(xiě)著不需要修改,但是如果我們要更新VimEntry,就可以修改一下這個(gè)地方,exEnvironment會(huì)自動(dòng)檢測(cè)這個(gè)這里是否是合適的配置,如果不是,exEnvironment就會(huì)將這里重寫(xiě)這個(gè)配置。當(dāng)然這里一般情況下還是不修改的好,否則代價(jià)就是丟失當(dāng)前工程的配置信息。
OK,不廢話,我們進(jìn)入正題,講述下VimEntry文件中我們不曉得的一些配置選項(xiàng)。
1、 LangType選項(xiàng)
該選項(xiàng)來(lái)控制exVIM能識(shí)別那些語(yǔ)言類(lèi)型,一般默認(rèn)情況下,這個(gè)選項(xiàng)的配置如下:
-- ex-plugins File Settings --
LangType=auto
也就是說(shuō)他自動(dòng)的識(shí)別一些默認(rèn)類(lèi)型,默認(rèn)情況下,這個(gè)配置是在 g:exES_UpdateEnvironment中寫(xiě)好的:
" 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中的內(nèi)容可以在: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"
只要我們按照我們的配置來(lái)設(shè)定,去掉auto,寫(xiě)上你需要特殊處理的語(yǔ)言類(lèi)型就可以了。比如:
LangType= asm, lua, c
當(dāng)然這個(gè)選項(xiàng)也不能亂填,默認(rèn)的這個(gè)選項(xiàng)后面可以填寫(xiě)如下的內(nèi)容:
c,cpp,c#,shader,python,vim,math,uc,javascript,java,html,lua
如果你要讓exVIM支持一種新的語(yǔ)言類(lèi)型,可以參考后面的內(nèi)容。
2、 vimentryRefs
通過(guò)這個(gè)選項(xiàng)我們可以引用其它vimentry的配置到當(dāng)前的工程中。比如繼承其它vimentry 的tags文件,符號(hào)信息等。
當(dāng)然這個(gè)選項(xiàng)也很簡(jiǎn)單,只要將要引用的vimentry文件的路徑添加上就可以了。比如:
vimentryRefs+= D:\exDev\Project\kllan\kllan.vimentry
vimentryRefs+= D:\exDev\Project\SqlLib\Sqlib.vimentry
3、 Restore Buffer
這個(gè)選項(xiàng)是說(shuō)明,當(dāng)我們打開(kāi)一個(gè)vimentry文件時(shí),是否恢復(fù)到上次的使用上下文。如果設(shè)置為:"RestoreBuffer=true", 保存并退出exVim,當(dāng)你下次打開(kāi)這個(gè)工程師,就會(huì)提示你是否恢復(fù)到上次退出時(shí)的環(huán)境。
當(dāng)然,如果不想要這個(gè)功能,只要將這個(gè)選項(xiàng)設(shè)置為false就可以了。
三、 添加一種新的語(yǔ)言類(lèi)型
我們?cè)诒菊乱婚_(kāi)頭寫(xiě)到過(guò)如何設(shè)置LangType選項(xiàng),但是這個(gè)后面僅能跟已經(jīng)支持過(guò)的語(yǔ)言類(lèi)型,倘若我們現(xiàn)在要讓exVIM支持一個(gè)新的語(yǔ)言類(lèi)型(比如我們自己寫(xiě)的一套腳本引擎,要想用exVIM作為它的開(kāi)發(fā)環(huán)境…)的話就要在以下幾個(gè)方面做修改。
1、 添加新的exVIM語(yǔ)言映射
據(jù)說(shuō)明書(shū)上說(shuō),ExVIM默認(rèn)支持如下一些語(yǔ)言類(lèi)型:
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 |
當(dāng)我們?cè)O(shè)置LangType選項(xiàng)為auto時(shí),exVIM將通過(guò)exProject插件以” File Type”為過(guò)濾條件來(lái)獲取相應(yīng)的語(yǔ)言類(lèi)型。如果LangType選項(xiàng)被設(shè)置為某一個(gè)具體的語(yǔ)言時(shí)(比如: LangType=c,cpp,python),則exVIM將找到這個(gè)文件類(lèi)型并將它應(yīng)用的exProject的文件過(guò)濾中和quick_gen_project腳本中。
如果你要添加一個(gè)新的語(yǔ)言映射,你可以使用:
function exUtility#AddLangMap( langmap_type, lang_type, file_type_list )
l "langmap_type" : 這個(gè)值可以設(shè)置為"exvim"或者"ctags",稍后我們?cè)谥v'ctags'的情況,這里我們?cè)O(shè)置為'exvim'
l "lang_type": 這里就填 語(yǔ)言類(lèi)型(也就是上面表中的 language type) ,如果這里填寫(xiě)的不是上面表中存在的語(yǔ)言類(lèi)別。那它就會(huì)在表中新建一項(xiàng)
l "file_type_list": 就填我們要添加的文件類(lèi)型,如果文件類(lèi)型已經(jīng)存在了,這個(gè)函數(shù)將跳過(guò)這個(gè)選項(xiàng)。
比如,我們要給JavaScript語(yǔ)言添加一個(gè)’as’的文件類(lèi)型,就可以這樣:
call exUtility#AddLangMap ( 'exvim', 'javascript', ['as'] )
你也可以用這個(gè)函數(shù)來(lái)重新這個(gè)文件類(lèi)型的映射,它將用新的文件類(lèi)型覆蓋已經(jīng)存在的映射項(xiàng)目:
function exUtility#ResetLangMap( langmap_type, lang_type, file_type_list )
2、 添加ctags的語(yǔ)言映射
Ctags也有它自己的語(yǔ)言映射表,如下:
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 |
如果我們要添加新的語(yǔ)言映射,方法跟添加exVIM語(yǔ)言映射一樣。只是第一個(gè)參數(shù)填寫(xiě):’ ctags’
3、 讓cscope支持新的文件類(lèi)型
Cscope本來(lái)是用來(lái)分析C程序的,有時(shí)人們用他來(lái)分析C++或者匯編程序。要想讓cscope在exVim中支持新添加的語(yǔ)言。你只需要在g:ex_cscope_langs中添加新的語(yǔ)言類(lèi)型就可以了。默認(rèn)情況下,g:ex_cscope_langs的內(nèi)容是:
let g:ex_cscope_langs = ['c', 'cpp', 'shader', 'asm' ]
四、 更多的配置信息
現(xiàn)在只通過(guò)wiki學(xué)到了這些,如果有新學(xué)到的知識(shí),我再補(bǔ)充。