vim自定義快捷鍵

vim自定義快捷鍵


# cat ~/.vimrc


noremap <F5> :Tlist<cr> //定義F5爲":Tlist"命令。<cr>的意思是不需要再敲回車確認


map <F10> :NERDTreeToggle<CR> //windows下定義的快捷鍵
map <F9> :Tlist<CR //windows下定義的快捷鍵

自定義狀態欄

set laststatus=2
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [ASCII=\%03.3b]\ [HEX=\%02.2B]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]

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

: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/vimXXX/目錄下,其中vimXXX與你所使用的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中:

"Set mapleader
let mapleader = ","

"Fast reloading of the .vimrc
map <silent> <leader>ss :source ~/.vimrc<cr>
"Fast editing of .vimrc
map <silent> <leader>ee :e ~/.vimrc<cr>
"When .vimrc is edited, reload it
autocmd! bufwritepost .vimrc source ~/.vimrc

爲了方便解釋,我給每一行都加了一個行號。

在vimrc中,雙引號開頭的行,將被當作註釋忽略。
第2行,用來設置mapleader變量,當mapleader爲未設置或爲空時,使用缺省的”\”來作爲mapleader。
mapleader變量是作用是什麼呢?看下面的介紹。

第5行定義了一個映射(map),這個映射把<leader>ss,映射爲命令:source ~/.vimrc<cr>。當定義一個映射時,可以使用<leader>前綴。而在映射生效時,vim會把<leader>替換成mapleader變量的值。也就是說,我們這裏定義的<leader>ss在使用時就變成了”,ss“,當輸入這一快捷方式時,就會source一次~/.vimrc文件(也就是重新執行一遍.vimrc文件)。
第7行,定義了<leader>ee快捷鍵,當輸入,ee時,會打開~/.vimrc進行編輯。
第9行,定義了一個自動命令,每次寫入.vimrc後,都會執行這個自動命令,source一次~/.vimrc文件。
有了上面的快捷鍵,我們就能快速的打開vimrc文件編輯,快速重新source vimrc文件,方便多了。

無論在windows還是在linux中,我都使用vim作爲我的缺省編輯器。並且,我想使用同一個vimrc文件。因此,我定義了一個MySys()函數,用來區分不同的平臺,以進行不同的配置。

另外,在編輯vimrc文件時,我更喜歡新開一個標籤頁來編輯,而不是在當前窗口中。因此,我定義了SwitchToBuf()函數,它在所有標籤頁的窗口中查找指定的文件名,如果找到這樣一個窗口,就跳到此窗口中;否則,它新建一個標籤頁來打開vimrc文件。(注:標籤頁(tab)功能只有在vim 7.0版本以上才支持。)

下面是我的vimrc中使用的設定,希望能夠拋磚引玉:

" Platform
function! MySys()
if has("win32")
return "windows"
else
return "linux"
endif
endfunction

function! SwitchToBuf(filename)
"let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "")
" find in current tab
let bufwinnr = bufwinnr(a:filename)
if bufwinnr != -1
exec bufwinnr . "wincmd w"
return
else
" find in each tab
tabfirst
let tab = 1
while tab <= tabpagenr("$")
let bufwinnr = bufwinnr(a:filename)
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 " . a:filename
endif
endfunction

"Fast edit vimrc
if MySys() == 'linux'
"Fast reloading of the .vimrc
map <silent> <leader>ss :source ~/.vimrc<cr>
"Fast editing of .vimrc
map <silent> <leader>ee :call SwitchToBuf("~/.vimrc")<cr>
"When .vimrc is edited, reload it
autocmd! bufwritepost .vimrc source ~/.vimrc
elseif MySys() == 'windows'
" Set helplang
set helplang=cn
"Fast reloading of the _vimrc
map <silent> <leader>ss :source ~/_vimrc<cr>
"Fast editing of _vimrc
map <silent> <leader>ee :call SwitchToBuf("~/_vimrc")<cr>
"When _vimrc is edited, reload it
autocmd! bufwritepost _vimrc source ~/_vimrc
endif

" For windows version
if MySys() == 'windows'
source $VIMRUNTIME/mswin.vim
behave mswin
endif

注意:我在windows中也定義一個”HOME”環境變量,然後把_vimrc放在”HOME”環境變量所指向的目錄中。如果你打算在windows中使用上面的設定,也需要這樣做!

好了,現在我們知道如何永久更改‘sessionoptions’選項和‘viminfo’選項了,把對它們的配置放入你的vimrc即可。

vim自帶的示例vimrc中,只定義最基本的配置。

在http://www.amix.dk/vim/vimrc.html有一個非常強大的vimrc,有人戲稱爲”史上最強的vimrc”,或許有些言過其實。不過,如果你通讀了這個vimrc,相信能從中學到很多……

這裏有一個redguardtoo修改過的版本,可以對照參考一下。

我的vimrc也是基於Amix的模板,然後自已做了很多修改。

建議:不要照拷這個vimrc!可能這個文件的設定並不符合你的習慣。另外,這個文件的設定,可能也不能在你的工作環境中運行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章