天天看點

将VIM打造成一個IDE一、VIM相關的基本概念二、原生VIM功能三、pathogen簡介四、安裝新插件 五、利用pathogen,配置vim文法高亮

參考: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打造成一個IDE一、VIM相關的基本概念二、原生VIM功能三、pathogen簡介四、安裝新插件 五、利用pathogen,配置vim文法高亮

了解了這三個概念和三者之間的關系,對我們用好Vim有非常大的幫助。

vim中有關buffer、windows及tab的概念了解,因為vim中的windows跟我們平時所了解的windows有所不同,其實vim中的buffer就相當于一個檔案,windows相當于一個視窗的frame(一個顯示區,viewport),tab相當于一個視窗。

也就是說,一個顯示區(frame)顯示一個檔案(buffer),一個視窗(tab)可以有多個顯示區(frame)。

tab可以了解為浏覽器上的tab,如下圖,圖中有三個TAB頁,每頁可以有多個顯示區域,每個區域顯示不同的HTML檔案。

将VIM打造成一個IDE一、VIM相關的基本概念二、原生VIM功能三、pathogen簡介四、安裝新插件 五、利用pathogen,配置vim文法高亮

二、原生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分别放到這兩個目錄下,否則插件不會生效

    效果如下圖,儲存時提示錯誤和警告,當光标移動到錯誤或警告行時,會顯示錯誤資訊

将VIM打造成一個IDE一、VIM相關的基本概念二、原生VIM功能三、pathogen簡介四、安裝新插件 五、利用pathogen,配置vim文法高亮

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

将VIM打造成一個IDE一、VIM相關的基本概念二、原生VIM功能三、pathogen簡介四、安裝新插件 五、利用pathogen,配置vim文法高亮

五、利用pathogen,配置vim文法高亮

vim自身可以設定關鍵字高亮,卻無法設定函數名和自定義的資料結構高亮,可以通過taghighlight插件解決這一問題。

首先安裝taghighlight插件,在~/.vim/bundle/目錄運作以下指令:(或者直接手動下載下傳到bundle目錄即可)

hg clone https://bitbucket.org/abudden/taghighlig
           

等一小段時間,等待taghighlight下載下傳完畢後,就可以使用了。

繼續閱讀