參考:http://blog.csdn.net/zhaoyw2008/article/details/8012757
http://blog.csdn.net/dx2880/article/details/7940351 http://blog.csdn.net/varkychan/article/details/9246643 http://www.cnblogs.com/chijianqiang/archive/2012/10/31/vim-2.html
一、VIM相關的基本概念
基本概念:
Buffer:使用Vim打開的檔案都會被加載到記憶體中,在記憶體中我們使用Buffer來描述被編輯的檔案,一個Buffer對應一個被編輯的檔案副本。當我們在完成了一個Buffer的編輯後就可以儲存該檔案。Buffer不僅包含了檔案的内容,也記錄了該檔案的編輯狀态等配置資訊,比如激活、隐藏、上次編輯行數等,具體可以查閱幫助文檔。用Vim可以打開多個檔案同時編輯,也可以把不需要的檔案關掉,但這時檔案副本依然儲存在緩沖區中,我們可以通過
:ls
或
:buffers
檢視這些Buffer,還可以通過類似
:buffer n
的方式重新打開檔案(n表示Buffer的序号)。當然,我們有更好的方式來處理這些Buffer,那就是CommandTBuffer,要想使用CommandTBuffer,先要安裝CommandT插件,請大家記住這個插件的名字,稍後介紹。
Window:是對應Buffer的一個展示視窗。一個Buffer可以對應多個視窗,比如我們可以通過
:split filename
或
:vsplit filename
指令在多個視窗打開一個檔案,當修改某一個視窗的檔案是,其他視窗都會同步更新。當然我們也可以在多個視窗打開多個檔案,編輯後用
:wq
儲存退出,但是記住,隻要沒有最終退出Vim程序,那麼這些打開的檔案Buffer依然儲存在緩存區中,可以随時再次打開。
Tab-page:Tab-page就比較容易了解,對應一組視窗,我們可以通過`:tabedit filename`在另一個标簽頁中打開一個檔案,在這個标簽頁中又可以打開多個視窗。
下面我們來介紹一下Vim中的幾個基本概念:Buffer、Window和Tab-page。
下圖可以清晰的表達Buffer、Window和Tab-page的關系:
了解了這三個概念和三者之間的關系,對我們用好Vim有非常大的幫助。
vim中有關buffer、windows及tab的概念了解,因為vim中的windows跟我們平時所了解的windows有所不同,其實vim中的buffer就相當于一個檔案,windows相當于一個視窗的frame(一個顯示區,viewport),tab相當于一個視窗。
也就是說,一個顯示區(frame)顯示一個檔案(buffer),一個視窗(tab)可以有多個顯示區(frame)。
tab可以了解為浏覽器上的tab,如下圖,圖中有三個TAB頁,每頁可以有多個顯示區域,每個區域顯示不同的HTML檔案。
二、原生VIM功能
原生的功能(這些功能不需要任何設定和插件,且隻支援一個檔案内的代碼,跨檔案不行,若要跨檔案查找則需要安裝ctags插件,并配合ctrl+]和ctrl+t使用):
1、% 跳轉到配對的括号(小括号,方括号,大括号都在次範圍),一般用于檢視if,while的範圍;
2、萬能的方括号:方括号主要是用于在比對的互相符号(一般是括号)之間移動:
[( 表示将光标移動到比對的左括号,“])”表示将光标移動到比對的右括号,同理,如果将小括号變成大括号,就不用我解釋了吧?
[/ 表示在注釋之間移動
[# 表示在編譯預處理之間移動(不太常用)
[[ 表示回到目前函數最開始的左大括号,這個東西和[+{的差別是,[[肯定是回到函數的左大括号,而[{則有可能移動光标到while或者switch的左大括号……
[i i表示identifer,當你看到一個變量卻不知道變量類型的時候,就用它看變量的聲明(函數也可以)。i還可以大寫哦,i大寫以後還可以[+tab哦,另外,還可以直接先“[”然後ctrl+i哦,功能很強大,自己去點點看啦……
[d d表示define,當你想看看某個宏名究竟怎麼定義的時候,就用它啦,同樣d可以大寫……
3、找定義:
gd 表示goto defination,查找變量或者函數的定義就用它啦,和[i類似,具體差別自己體驗一下便知
gD 小寫表示函數内查找,大寫表示全局查找(其實隻能在一個檔案内部,并不是真正的全局)
4、傳回光标:
‘’ 是兩個單引号,不是雙引号,當你用上面的指令找一些東西的時候,有時光标就跑了,這個指令就是讓光标趕快“回家”,也就是回到你檢視之前的位置,以便繼續寫程式……
5、縮進:
>>和<< 和c++的輸入輸出流用的符号一樣,這個縮進或者反縮進的量由shiftwidth控制,預設是8個空格。一般來說,這個功能都會和v指令一起用,以實作 整塊縮進,當和v一起使用的時候,隻需要>和<即可,也就是隻輸入一次
6、多行注釋:
誰說vi不能多行注釋,ctrl+v,選好行以後,I(大寫很重要),然後//,然後兩次ESC,搞定,神奇吧?删除還用我教你嘛?ctrl+v,記得選兩列哦,然後d一下,搞定……
7、格式對齊:
vim一樣可以把混亂的格式排列整齊,隻要輸入“gg=G”,就萬事OK啦……
三、pathogen簡介
通常情況下安裝vim插件,通常是将所有的插件和相關的doc檔案都安裝在中一檔案夾中,如将插件全部安裝在/usr/share/vim/vim73/plugin/目錄下,将幫助文檔全部安裝在/usr/share/vim/vim73/doc/目錄下(有的是~/.vim/plugin 和~/.vim/doc)。
這樣做帶來的後果就是:修改和解除安裝插件很麻煩,很難弄清楚哪個檔案屬于哪個插件。
如果用pathogen來管理插件的話,就會變得友善很多了。pathogen讓每個插件占有一個單獨的目錄,解決了檔案分散的問題。安裝完pathogen之後,隻需要在~/.vim/目錄下建立一個目錄~/.vim/bundle/,并将要安裝的所有插件放在~/.vim/bundle/目錄下即可以使用。如果要删除某個插件,隻需要将~/.vim/bundle/目錄下對應的插件目錄删除即可。如果想保持某個插件為最新版本,直接從插件的倉庫checkout一份代碼到bundle目錄即可。
1、安裝pathogen
pathogen的下載下傳位址為:https://github.com/tpope/vim-pathogen
下載下傳後可以直接解壓。pathogen插件隻有一個單獨的腳本,所謂安裝就是把它放在目前使用者的 ~/.vim/autoload 目錄下即可。
即,将解壓後的autoload目錄連同裡面的pathogen.vim插件拷貝到~/.vim/目錄下。
2、啟用pathogen
要啟用pathogen,還需要在~/.vimrc 檔案裡, filetype plugin indent on 之前的任何地方,加入下面這句:
call pathogen#infect()
注:這裡需要說明一下,該插件不能放到/usr/share/vim/vim73/目錄下,而隻能放到~/.vim/目錄下。要啟用pathogen也隻能修改~/.vimrc,而不能修改/etc/vimrc (Ubuntu下一般隻需要修改~/.vimrc即可。如果使用Fedora,當以root使用者打開vim時,如果要使插件或對VIM的配置生效,則需要修改/etc/vimrc檔案)。
如果沒有~/.vimrc檔案,建立該檔案并将以下内容拷貝到該檔案中:
call pathogen#infect()
syntax on
filetype plugin indent on
要生成幫助文檔的話,就在vim下輸入:call pathogen#helptags()即可。
關于.vimrc的配置我在這裡強調下:
vimrc是vim的配置檔案。 如果你配置vim的全局變量,那麼就應該是在/etc/vimrc中配置 如果是配置vim的個人變量,那.vimrc這個檔案就應該在使用者的家目錄下。 如果家目錄中沒有.vimrc,就會使用系統配置檔案。不過也可以在家目錄下自建.vimrc。 |
四、安裝新插件
到目前為止,pathogen已經啟用,要安裝新插件,隻需要下載下傳該插件,并将其放到~/.vim/bundle/目錄下即可。
1、安裝NERDTree
例如,要下載下傳安裝NERDTree插件,隻需要進入到~/.vim/bundle/目錄,然後執行以下指令:
git clone http://github.com/scrooloose/nerdtree.git
下載下傳完成後,會看到~/.vim/bundle/目錄下會多出一個新的目錄:nerdtree
OK!NERDTree插件已經安裝完成了!可以看到這種方式比傳統的vim插件安裝方式簡單多了!
而要解除安裝該插件也非常簡單,隻需要在~/.vim/bundle/目錄下删除nerdtree目錄即可,幹淨利落!
要更新該插件到最新版本,隻需要進入到該目錄~/.vim/bundle/nerdtree/,并執行以下指令:
git pull origin
當然這種安裝和更新插件的方法隻适用于代碼倉庫支援git的方法。
對于無法用git下載下傳的插件,就更新bundle裡的那個以插件名為名的目錄就好。
2、安裝tagbar
tagbar可以做為taglist的替代者,在~/.vim/bundle/目錄執行安裝指令如下:
git clone https://github.com/majutsushi/tagbar.git
之後同樣可以在vimrc檔案中設定快捷鍵:
nmap <F4> :TagbarToggle<CR> "設定快捷鍵
let g:tagbar_width = 40 "設定寬度,預設為40
autocmd VimEnter * nested :call tagbar#autoopen(1)"打開vim時自動打開
let g:tagbar_left = 1 "在左側"
let g:tagbar_right = 1 "在右側
列舉幾點比taglist優化了的地方:
(1)支援頭檔案的函數清單顯示
tagbar對函數的可見級别也是做了區分的,分别用+ - # 并配合着色來做了區分。
(2)對面向對象的支援更好
taglist雖然也會列出類清單,但是整體還是很不直覺。
(3)自動根據檔案修改時間來重建
taglist在這一點上體驗就很不好,其實明明可以通過這種時間戳的方式來實作。
(據說tagbar最好配置ctags使用,效果會更好)
3、ctags 插件的安裝:
ubuntu 作業系統 sudo apt-get install ctags。
僅僅ctags并沒有太大的功能改善,它比vim原生的功能唯一強大的地方就在于是跨檔案查找而已,其他的其實沒什麼。另外,還有一點不友善的,就是如果你不手動ctags -R,那麼它永遠不會自動更新,怎麼辦?下載下傳插件autotag.vim
http://www.vim.org/scripts/script.php?script_id=1343
看名字就知道了嘛,自動更新的插件,OK,隻要添加好插件,這個插件就會在我們儲存的時候,為我們自動更新tags檔案啦。
4、安裝supertab插件
SuperTab插件的作用是使鍵盤上的Tab鍵具有更快捷的自動補齊和上下文提示功能。在~/.vim/bundle/目錄下下載下傳并安裝該插件:
git clone https://github.com/ervandew/supertab.git
安裝好之後,就可以在vim中直接使用自動補齊功能了。比如,用vim打開一個.c檔案,要聲明一個unsigned int 類型的變量,隻需要輸入unsi,之後按Tab鍵,就會将該關鍵字自動補齊了,非常好用。
5、cppSyntaxCheck文法檢測插件
一個c++文法檢查插件,基本的原理就是利用編譯器來檢查,擷取其結果,并在源檔案中辨別出對應的行。可以參見以下位址下載下傳:
http://www.vim.org/scripts/script.php?script_id=4205
git hub 位址:
git clone https://github.com/phonzia/cppSyntaxCheck.git
注意:下載下傳後~/.vim/bundle/cppSyntaxCheck目錄下隻有cppSyntaxCheck.vim和README.md兩個檔案,現在應該在該目錄下自己建立一個/plugin和一個/doc目錄,然後把cppSyntaxCheck.vim和README.md分别放到這兩個目錄下,否則插件不會生效
效果如下圖,儲存時提示錯誤和警告,當光标移動到錯誤或警告行時,會顯示錯誤資訊
i=1後面少一個";",則會提示錯誤
* 增加了顯示和關閉警告的選項
* 現在在不同buffer之間切換時不會丢失分析結果,無須重新儲存來促發分析
* 增加了一個快捷鍵,以便跳轉到辨別的錯誤處
* 去除了一個會導緻重複檢查的問題,提高了檢查的速度
* 修改了預設的編譯器選項,以支援更多的語言環境
* 錯誤提示現在更完整了
* 當錯誤或警告資訊太長時,現在隻提示存在錯誤或警告,而不顯示錯誤或警告資訊
6、c/h檔案間互相切換 -- 插件:A
下載下傳位址:http://www.vim.org/scripts/script.php?script_id=31
a.vim下載下傳後的安裝方法同上。
安裝好a.vim後有下面的幾個指令可以用了:
:A
在新Buffer中切換到c/h檔案
:AS
橫向分割視窗并打開c/h檔案
:AV
縱向分割視窗并打開c/h檔案
:AT
建立一個标簽頁并打開c/h檔案
其他還有一些指令, 你可以在它的網頁上看看, 我都沒用過, 其實也都是大同小異, 找到自己最順手的就行了.
我在~/.vimrc中增加了一句:
nnoremap <silent> <F12> :A<CR>
意思是按F12時在一個新的buffer中打開c/h檔案,這樣在寫程式的時候就可以不假思索地在c/h檔案間進行切換,減少了按鍵的次數,思路也就更流暢了,阿彌陀佛...
7.minibufexpl.vim : Elegant buffer explorer - 插件
下載下傳方式:git clone https://github.com/fholgado/minibufexpl.vim.git
下載下傳後檔案夾的名字為minibufexpl.vim,要改成minibufexpl
五、利用pathogen,配置vim文法高亮
vim自身可以設定關鍵字高亮,卻無法設定函數名和自定義的資料結構高亮,可以通過taghighlight插件解決這一問題。
首先安裝taghighlight插件,在~/.vim/bundle/目錄運作以下指令:(或者直接手動下載下傳到bundle目錄即可)
hg clone https://bitbucket.org/abudden/taghighlig
等一小段時間,等待taghighlight下載下傳完畢後,就可以使用了。