本節(jié)所用命令的幫助入口:
:help compatible
:help mapleader
:help map
:help autocmd
為什么我的VIM這么難用?不能語(yǔ)法高亮,沒(méi)有折行,不能打開(kāi)多個(gè)窗口多個(gè)buffer,不能……
為什么別人用幾個(gè)鍵就可以完成一個(gè)很復(fù)雜的功能,而我不能?
為什么別人的VIM看起來(lái)和我的很不一樣?
……
當(dāng)你開(kāi)始問(wèn)這些問(wèn)題的時(shí)候,是時(shí)候去檢查一下你的vimrc了。
當(dāng)VIM在啟動(dòng)時(shí),如果沒(méi)有找到vimrc或gvimrc,它缺省工作VI兼容的模式。這意味著,你只能使用VI所具備的功能,而VIM中的大量擴(kuò)展功能將無(wú)法使用。也許這就是你的VIM如此難用的原因。
VIM中自帶了一個(gè)vimrc例子,讓我們從這個(gè)例子開(kāi)始吧。
下面我以Linux下的VIM為例,windows版本的VIM,會(huì)在后面提到。
示例的vimrc(名為vimrc_example.vim)通常位于/usr/share/vim/vimXXX/目錄下,其中vimXXX與你所使用的VIM版本有關(guān)。
首先把這個(gè)示例的vimrc拷貝到相應(yīng)的目錄,在Linux下,應(yīng)該把它拷貝到你的home目錄下,名字為”.vimrc”,下面是shell命令:
cp /usr/share/vim/vim70/vimrc_example.vim ~/.vimrc
或者你在VIM中執(zhí)行下面的命令,和上面的shell命令完成相同的功能:
:!cp $VIMRUNTIME/vimrc_example.vim ~/.vimrc
現(xiàn)在,你退出VIM后再進(jìn)入,你的VIM和剛才已經(jīng)不一樣了。
你可以先讀一下你的vimrc,看看它都設(shè)定了什么:
:e ~/.vimrc
這是一個(gè)注釋良好的文件,不需要多解釋。
對(duì)windows版本的VIM,它已經(jīng)缺省的有了一個(gè)vimrc,你可以在VIM在使用下面的命令來(lái)查看它:
:e $VIM/_vimrc
在這個(gè)文件中,它包含了上面提到的vimrc_example.vim。同時(shí),它會(huì)把VIM設(shè)置的更符合windows的操作習(xí)慣。比如,支持CTRL-C拷貝,CTRL-V粘貼等等。Windows下的用戶,可以使用$VIM/_vimrc來(lái)做為你的第一個(gè)vimrc。
順便提一句,在unix/linux中,文件名可以以”.”開(kāi)頭,表明此文件是隱藏的。而在windows中,不允許文件名以”.”開(kāi)頭,所以,windows版本的VIM,將讀取_vimrc來(lái)做為自己的配置文件。
在今后使用VIM的日子里,你會(huì)頻繁的更改你的vimrc。所以我們需要設(shè)置一些快捷方式,使我們能快速的訪問(wèn)vimrc。
把下面這段內(nèi)容拷貝到你的vimrc中:
1 "Set mapleader
2 let mapleader = ","
3
4 "Fast reloading of the .vimrc
5 map <silent> <leader>s :source ~/.vimrc<cr>
6 "Fast editing of .vimrc
7 map <silent> <leader>e :e ~/.vimrc<cr>
8 "When .vimrc is edited, reload it
9 autocmd! bufwritepost .vimrc source ~/.vimrc
為了方便解釋,我給每一行都加了一個(gè)行號(hào)。
在vimrc中,雙引號(hào)開(kāi)頭的行,將被當(dāng)作注釋忽略。
第2行,用來(lái)設(shè)置mapleader變量,當(dāng)mapleader為未設(shè)置或?yàn)榭諘r(shí),使用缺省的“\”來(lái)作為mapleader。
mapleader變量是作用是什么呢?我們先看下面。
第5行定義了一個(gè)映射,這個(gè)映射把“<leader>s”,映射為命令“:source ~/.vimrc<cr>”。當(dāng)定義一個(gè)映射時(shí),可以使用<Leader>前綴。而在映射生效時(shí),VIM會(huì)把<Leader>替換成mapleader變量的值。也就是說(shuō),我們這里定義的“<leader>s”,在使用時(shí)就變成了“,s”,當(dāng)輸入這一快捷方式時(shí),就會(huì)source一次~/.vimrc文件(也就是重新執(zhí)行一遍.vimrc文件)。
第7行,定義了“<leader>e”快捷鍵,當(dāng)輸入“,e”時(shí),會(huì)打開(kāi)~/.vimrc進(jìn)行編輯。
第9行,定義了一個(gè)自動(dòng)命令,每次寫(xiě)入.vimrc后,都會(huì)執(zhí)行這個(gè)自動(dòng)命令,source一次~/.vimrc文件。
有了上面的快捷鍵,我們就能快速的打開(kāi)vimrc文件編輯,快速重新source vimrc文件,方便多了。
無(wú)論在windows還是在linux中,我都使用VIM作為我的缺省編輯器。并且,我想使用同一個(gè)vimrc文件。因此,我定義了一個(gè)MySys()函數(shù),用來(lái)區(qū)分不同的平臺(tái),以進(jìn)行不同的配置。
另外,在編輯vimrc文件時(shí),我更喜歡新開(kāi)一個(gè)標(biāo)簽頁(yè)來(lái)編輯,而不是在當(dāng)前窗口中。因此,我定義了SwitchToBuf()函數(shù),它在所有標(biāo)簽頁(yè)的窗口中查找指定的文件名,如果找到這樣一個(gè)窗口,就跳到此窗口中;否則,它新建一個(gè)標(biāo)簽頁(yè)來(lái)打開(kāi)vimrc文件。
下面是我的vimrc中使用的設(shè)定,希望能夠拋磚引玉:
" Platform
function! MySys()
return "linux"
endfunction
" Switch to buffer according to file name
function! SwitchToBuf(filename)
let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "")
" find in current tab
let bufwinnr = bufwinnr(fullfn)
if bufwinnr != -1
exec bufwinnr . "wincmd w"
return
else
" find in each tab
tabfirst
let tab = 1
while tab <= tabpagenr("$")
let bufwinnr = bufwinnr(fullfn)
if bufwinnr != -1
exec "normal " . tab . "gt"
exec bufwinnr . "wincmd w"
return
endif
tabnext
let tab = tab + 1
endwhile
" not exist, new tab
exec "tabnew " . fullfn
endif
endfunction
"Fast edit vimrc
if MySys() == 'linux'
"Fast reloading of the .vimrc
map <silent> <leader>s :source ~/.vimrc<cr>
"Fast editing of .vimrc
map <silent> <leader>e :call SwitchToBuf("~/.vimrc")<cr>
"When .vimrc is edited, reload it
autocmd! bufwritepost .vimrc source ~/.vimrc
elseif MySys() == 'windows'
"Fast reloading of the _vimrc
map <silent> <leader>s :source ~/_vimrc<cr>
"Fast editing of _vimrc
map <silent> <leader>e :call SwitchToBuf("~/_vimrc")<cr>
"When _vimrc is edited, reload it
autocmd! bufwritepost _vimrc source ~/_vimrc
endif
注意:我在windows中也定義一個(gè)“HOME”環(huán)境變量,然后把_vimrc放在“HOME”環(huán)境變量所指向的目錄中。如果你打算在windows中使用上面的設(shè)定,也需要這樣做!
VIM自帶的示例vimrc中,只定義最基本的配置。
在http://www.amix.dk/vim/vimrc.html有一個(gè)非常強(qiáng)大的vimrc,有人戲稱為“史上最強(qiáng)的vimrc”,或許有些言過(guò)其實(shí)。不過(guò),如果你通讀了這個(gè)vimrc,相信能從中學(xué)到很多很多……
我的vimrc也是基于此模板,然后自已做了很多修改。
建議:不要照拷這個(gè)vimrc!可能這個(gè)文件的設(shè)定并不符合你的習(xí)慣。另外,這個(gè)文件的設(shè)定,可能也不能在你的工作環(huán)境中運(yùn)行。
在http://blog.csdn.net/redguardtoo/archive/2006/09/03/1172136.aspx,有一個(gè)redguardtoo修改過(guò)的版本,可以對(duì)照參考一下。
[參考文檔]
1. VIM幫助文件
2. http://vimcdoc.sourceforge.net/
3. http://www.amix.dk/vim/vimrc.html
來(lái)自:http://blog.csdn.net/easwy/archive/2007/02/26/1514639.aspx