本節所用命令的幫助入口:
:help compatible
:help mapleader
:help map
:help autocmd
為什麼我的vim這麼難用?不能語法高亮,沒有折行,不能開啟多個視窗多個buffer,不能……
為什麼別人用幾個鍵就可以完成乙個很複雜的功能,而我不能?
為什麼別人的vim看起來和我的很不一樣?
當你開始問這些問題的時候,是時候去檢查一下你的vimrc了。
當vim在啟動時,如果沒有找到vimrc或gvimrc,它預設工作vi相容的模式。這意味著,你只能使用vi所具備的功能,而vim中的大量擴充套件功能將無法使用。也許這就是你的vim如此難用的原因。
vim中自帶了乙個vimrc例子,讓我們從這個例子開始吧。
下面我以linux下的vim為例,windows版本的vim,會在後面提到。
示例的vimrc(名為vimrc_example.vim)通常位於/usr/share/vim/vim***/目錄下,其中vim***與你所使用的vim版本有關。
首先把這個示例的vimrc拷貝到相應的目錄,在linux下,應該把它拷貝到你的home目錄下,名字為」.vimrc」,下面是shell命令:
cp /usr/share/vim/vim70/vimrc_example.vim ~/.vimrc
或者你在vim中執行下面的命令,和上面的shell命令完成相同的功能:
:!cp $vimruntime/vimrc_example.vim ~/.vimrc
現在,你退出vim後再進入,你的vim和剛才已經不一樣了。
你可以先讀一下你的vimrc,看看它都設定了什麼:
:e ~/.vimrc
這是乙個注釋良好的檔案,不需要多解釋。
對windows版本的vim,它已經預設的有了乙個vimrc,你可以在vim在使用下面的命令來檢視它:
:e $vim/_vimrc
在這個檔案中,它包含了上面提到的vimrc_example.vim。同時,它會把vim設定的更符合windows的操作習慣。比如,支援ctrl-c拷貝,ctrl-v貼上等等。windows下的使用者,可以使用$vim/_vimrc來做為你的第乙個vimrc。
順便提一句,在unix/linux中,檔名可以以」.」開頭,表明此檔案是隱藏的。而在windows中,不允許檔名以」.」開頭,所以,windows版本的vim,將讀取_vimrc來做為自己的配置檔案。
在今後使用vim的日子裡,你會頻繁的更改你的vimrc。所以我們需要設定一些快捷方式,使我們能快速的訪問vimrc。
把下面這段內容拷貝到你的vimrc中:
1 "set mapleader
2 let mapleader = ","
34 "fast reloading of the .vimrc
5 map s :source ~/.vimrc
6 "fast editing of .vimrc
7 map e :e ~/.vimrc
8 "when .vimrc is edited, reload it
9 autocmd! bufwritepost .vimrc source ~/.vimrc
為了方便解釋,我給每一行都加了乙個行號。
在vimrc中,雙引號開頭的行,將被當作注釋忽略。
第2行,用來設定mapleader變數,當mapleader為未設定或為空時,使用預設的「/」來作為mapleader。
mapleader變數是作用是什麼呢?我們先看下面。
第5行定義了乙個對映,這個對映把「s」,對映為命令「:source ~/.vimrc」。當定義乙個對映時,可以使用字首。而在對映生效時,vim會 把替換成mapleader變數的值。也就是說,我們這裡定義的「s」,在使用時就變成了 「,s」,當輸入這一快捷方式時,就會source一次~/.vimrc檔案(也就是重新執行一遍.vimrc檔案)。
第7行,定義了「e」快捷鍵,當輸入「,e」時,會開啟~/.vimrc進行編輯。
第9行,定義了乙個自動命令,每次寫入.vimrc後,都會執行這個自動命令,source一次~/.vimrc檔案。
有了上面的快捷鍵,我們就能快速的開啟vimrc檔案編輯,快速重新source vimrc檔案,方便多了。
無論在windows還是在linux中,我都使用vim作為我的預設編輯器。並且,我想使用同乙個vimrc檔案。因此,我定義了乙個mysys()函式,用來區分不同的平台,以進行不同的配置。
另外,在編輯vimrc檔案時,我更喜歡新開乙個標籤頁來編輯,而不是在當前視窗中。因此,我定義了switchtobuf()函式,它在所有標籤頁的視窗中查詢指定的檔名,如果找到這樣乙個視窗,就跳到此視窗中;否則,它新建乙個標籤頁來開啟vimrc檔案。
下面是我的vimrc中使用的設定,希望能夠拋磚引玉:
" 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 s :source ~/.vimrc
"fast editing of .vimrc
map e :call switchtobuf("~/.vimrc")
"when .vimrc is edited, reload it
autocmd! bufwritepost .vimrc source ~/.vimrc
elseif mysys() == 'windows'
"fast reloading of the _vimrc
map s :source ~/_vimrc
"fast editing of _vimrc
map e :call switchtobuf("~/_vimrc")
"when _vimrc is edited, reload it
autocmd! bufwritepost _vimrc source ~/_vimrc
endif
注意:我在windows中也定義乙個「home」環境變數,然後把_vimrc放在「home」環境變數所指向的目錄中。如果你打算在windows中使用上面的設定,也需要這樣做!
vim自帶的示例vimrc中,只定義最基本的配置。
在有乙個非常強大的vimrc,有人戲稱為「史上最強的vimrc」,或許有些言過其實。不過,如果你通讀了這個vimrc,相信能從中學到很多很多……
我的vimrc也是基於此模板,然後自已做了很多修改。
筆記 使用VIM開發軟體專案
學習 easwy的vim專欄 記的筆記。1.在檔案中開啟外部檔案 gf 開啟當前游標處的檔案 ctrl w f 在水平分隔視窗開啟當前游標處的檔案 find 在 path 裡找到檔案並編輯 2.顯示source的檔案 scriptnames 3.tags tag 跳轉到指定的標籤 tags 顯示標籤...
使用VIM開發軟體專案 12 補全 二
本節所用命令的幫助入口 上篇文章介紹了 vim的全能補全 omni補全 本篇主要介紹 vim提供的其它補全方式。除全能補全外,最常用的補全方式應該是 ctrl n 和ctrl p 補全了。它們會在當前緩衝區 其它緩衝區,以及當前檔案所包含的標頭檔案中查詢以游標前關鍵字開始的單詞。全能補全不能對區域性...
Linux學習筆記(3) VIM的使用
先建立乙個資料夾 touch abc用vim編輯器開啟 vim abc游標預設在第一行,輸入i即可輸入內容 輸入後 按 輸出wq 即可儲存退出 vim abc 游標顯示在第一行同理 vim 100 abc 游標顯示在第100行,如果沒有100行就顯示在最後一行vim a abc 游標定位到第一次出現...