開(kāi)發(fā)者的實(shí)用Vim插件(二)
毫無(wú)疑問(wèn),Vim 是一個(gè)開(kāi)箱即用并能夠勝任編程任務(wù)的編輯器,但實(shí)際上是該編輯器中的插件幫你實(shí)現(xiàn)這些方便的功能。在 開(kāi)發(fā)者的實(shí)用 Vim 插件(一),我們已經(jīng)討論兩個(gè)編程相關(guān)的 Vim 插件——標(biāo)簽側(cè)邊欄(Tagbar)和定界符自動(dòng)補(bǔ)齊(delimitMate)。作為相同系列,我們?cè)诒疚挠懻摿硪粋€(gè)非常有用、專(zhuān)門(mén)為軟件開(kāi)發(fā)正定制的插件——語(yǔ)法高亮插件。
請(qǐng)注意:本教程中列舉的所有例示、命令和說(shuō)明都是在 Ubuntu 16.04 環(huán)境下進(jìn)行測(cè)試的,并且,我們使用的 Vim 版本是 7.4。
語(yǔ)法高亮(Syntastic)插件
假如你的軟件開(kāi)發(fā)工作涉及到 C/C++ 語(yǔ)言,毫無(wú)疑問(wèn)的說(shuō),遇到編譯錯(cuò)誤也是你每天工作中的一部分。很多時(shí)候,編譯錯(cuò)誤是由源代碼之中的語(yǔ)法不正確造成的,因?yàn)殚_(kāi)發(fā)者在瀏覽源碼的時(shí)候很少能夠一眼就看出所有這些錯(cuò)誤。
那么 Vim 中是否存在一種插件可以讓你不經(jīng)編譯源碼就可以顯示出語(yǔ)法錯(cuò)誤呢?當(dāng)然是有這樣一種插件的,其名字就是 Syntastic。
“Syntastic 是 Vim 用來(lái)檢驗(yàn)語(yǔ)法的插件,通過(guò)外部語(yǔ)法校驗(yàn)器校驗(yàn)文件并將錯(cuò)誤呈現(xiàn)給用戶。該過(guò)程可以在需要時(shí)進(jìn)行,或者在文件保存的時(shí)候自動(dòng)進(jìn)行。”該插件 官方文檔 如是說(shuō)。“如果檢測(cè)到語(yǔ)法錯(cuò)誤就會(huì)提示用戶,因?yàn)椴挥镁幾g代碼或者執(zhí)行腳本就可以知道語(yǔ)法錯(cuò)誤,用戶也就樂(lè)享與此了。”
安裝過(guò)程和***部分提到的方法類(lèi)似,你只需要運(yùn)行下列命令即可:
- cd ~/.vim/bundle/
 - git clone https://github.com/scrooloose/syntastic.git
 
一旦你成功安裝這個(gè)插件(即上述命令執(zhí)行成功),你就不需要進(jìn)行任何配置了——當(dāng) Vim 啟動(dòng)時(shí)會(huì)自動(dòng)加載這個(gè)插件。
現(xiàn)在,打開(kāi)一個(gè)源碼文件并用 :w Vim 命令保存即可使用這個(gè)插件了。等待片刻之后,如果在源碼中有語(yǔ)法錯(cuò)誤的好,就會(huì)高亮顯示出來(lái)。比如,看看一下截圖你就會(huì)明白該插件是如何高亮顯示語(yǔ)法錯(cuò)誤的:
Vim Syntax error highlighting
在每行之前的 >> 表示該行中有語(yǔ)法錯(cuò)誤。了解確切的錯(cuò)誤或者想知道是什么東西錯(cuò)了,將光標(biāo)移到該行——錯(cuò)誤描述就會(huì)展示在 Vim 窗口的***下。
View Syntax errors in Vim
這樣,不用進(jìn)行編譯你就能夠修復(fù)大多數(shù)語(yǔ)法相關(guān)的錯(cuò)誤。
再往下,如果你運(yùn)行 :Errors 命令,就會(huì)展現(xiàn)當(dāng)前源文件中所有語(yǔ)法相關(guān)錯(cuò)誤的描述。比如,我運(yùn)行 :Errors 命令就是下圖的效果:
Syntastic :Errors command
請(qǐng)記住,:Errors 展現(xiàn)的語(yǔ)法錯(cuò)誤是不會(huì)自動(dòng)更新的,這意味著在你修復(fù)錯(cuò)誤之后,你需要重新運(yùn)行 :Errors 命令,編輯器底部的錯(cuò)誤描述才會(huì)消除。
值得一提的是,還有 許多配置選項(xiàng) 能夠使得 Syntastic 插件使用起來(lái)更加友好。比如,你可以在你的 .vimrc 中添加下列內(nèi)容,然后 :Errors 就可以在修復(fù)錯(cuò)誤之后自動(dòng)更新它的底部描述。
- let g:syntastic_always_populate_loc_list = 1
 
添加以下內(nèi)容,以確保在你打開(kāi)文件時(shí) Syntastic 插件自動(dòng)高亮顯示錯(cuò)誤。
- let g:syntastic_check_on_open = 1
 
類(lèi)似的,你也可以在保存或打開(kāi)文件時(shí)讓光標(biāo)跳轉(zhuǎn)到檢測(cè)到的***個(gè)問(wèn)題處,將下列行放到你的 .vimrc 文件之中:
- let g:syntastic_auto_jump = 1
 
這個(gè)值也可以指定為其它兩個(gè)值: 2 和 3,其官方文檔的解釋如下:
“如果設(shè)置為 2 的話,光標(biāo)就會(huì)跳到檢測(cè)到的***個(gè)問(wèn)題,當(dāng)然,只有這個(gè)問(wèn)題是一個(gè)錯(cuò)誤的時(shí)候才跳轉(zhuǎn);設(shè)置為 3 的話,如果存在錯(cuò)誤,則會(huì)跳到***個(gè)錯(cuò)誤。所有檢測(cè)到的問(wèn)題都會(huì)有警告,但光標(biāo)不會(huì)跳轉(zhuǎn)。”
以下信息可能對(duì)你有幫助:
“使用 :SyntasticCheck 來(lái)手動(dòng)檢測(cè)錯(cuò)誤。使用 :Errors 打開(kāi)錯(cuò)誤位置列表并使用 :lclose 來(lái)關(guān)閉。使用 :SyntasticReset 可以清除掉錯(cuò)誤列表,使用 :SyntasticToggleMode 來(lái)切換激活(在寫(xiě)到 buffer 時(shí)檢測(cè))和被動(dòng)(即手動(dòng)檢測(cè))檢測(cè)錯(cuò)誤。”
注意:Syntastic 并不局限于 C/C++ 所寫(xiě)的代碼,它同時(shí)也支持很多的編程語(yǔ)言——點(diǎn)擊 此處 了解更多相關(guān)信息。
結(jié)論
毫無(wú)疑問(wèn)的,Syntastic 是一個(gè)非常有用的 Vim 插件,因?yàn)樵诔霈F(xiàn)語(yǔ)法相關(guān)錯(cuò)誤時(shí)候,它至少能夠讓免去頻繁編譯的麻煩,而且不用說(shuō),同時(shí)也節(jié)約了你不少的時(shí)間。
正如你所看到的一樣,配置好幾個(gè)主要選項(xiàng)之后,Syntastic 變得非常好用了。為了幫助你了解這些設(shè)置,官方文檔中包含了一份“推薦設(shè)置”——跟著文檔進(jìn)行設(shè)置即可。加入你遇到一些錯(cuò)誤、有些疑問(wèn)或者問(wèn)題,你也可以查詢一下 FAQ。


















 
 
 






 
 
 
 