使用VIM開發軟體專案3 vimrc初步

2021-06-16 02:17:21 字數 3998 閱讀 2886

本節所用命令的幫助入口:

: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 游標定位到第一次出現...