剛開(kāi)始用 vi 的人,常常抱怨 vi 的功能太小,用起來(lái)不夠方便。仔細(xì)想一想,程序員常常號(hào)稱是像狐貍一樣懶惰的人, vi 的作者們都世界級(jí)的頂尖程序員,他們自己是程序員,難道他們還不知道自己需要什么樣的編輯器? 用 vi 的歷史,算上在學(xué)校的時(shí)間,也有六七
剛開(kāi)始用vi的人,常常抱怨vi的功能太小,用起來(lái)不夠方便。仔細(xì)想一想,程序員常常號(hào)稱是像狐貍一樣懶惰的人,vi的作者們都世界級(jí)的頂尖程序員,他們自己是程序員,難道他們還不知道自己需要什么樣的編輯器?
用vi的歷史,算上在學(xué)校的時(shí)間,也有六七年光景了。大部分功能都用得比較熟練了,覺(jué)得夠用就行了,對(duì)少數(shù)奇技淫巧也不肖一顧,也就沒(méi)有再花過(guò)時(shí)間學(xué)習(xí)它的高級(jí)用法了。今天,從長(zhǎng)生兄那里學(xué)了一招,可以直接跳到grep的結(jié)果里去,比較實(shí)用。
這件事情雖小,卻對(duì)我有些觸動(dòng),想了想,即使對(duì)自己熟悉的東西,閉目塞聽(tīng)只會(huì)使人停留在原處。借這個(gè)契機(jī),總結(jié)一下一些有用的高級(jí)技巧吧。這些技巧,有的并不常用,時(shí)間一長(zhǎng),不用忘記了,要用的時(shí)間想不起來(lái),要浪費(fèi)時(shí)間去查資料,不如把它們記下來(lái)。
當(dāng)然,這些并不是什么新東西,在網(wǎng)上都可以找得到的,只是我自己做個(gè)筆記罷了。
查看符號(hào)定義。Vi提供了像Win32下IDE那樣的功能,可以很方便的查看函數(shù)原型、結(jié)構(gòu)聲明、宏的定義等。只是它的功能相比之下,要弱一些,不過(guò),結(jié)合其它一些技巧,完全可以滿足你的需要。使用這個(gè)功能,需要做一些設(shè)置:
1. 安裝ctags軟件包。在安裝光盤(pán)可以找到,也可以到網(wǎng)上下載源碼包,自己編譯。
2. 生成tags文件。進(jìn)入到你的源代碼所在的目錄,運(yùn)行ctags -R命令,它會(huì)為當(dāng)前目錄及子目錄下的源程序建立索引,并在當(dāng)前目錄下創(chuàng)建一個(gè)tags文件,里面保存的是符號(hào)索引信息。
3. 設(shè)置tags路徑。在vi的起動(dòng)腳本文件中(一般是~/.vimrc),告訴vi在哪里可以找到tags文件,一般盡量用相對(duì)路徑。如:set tags=./tags,../tags,../../tags,../../../tags
4. 跳到指定的符號(hào)。
5. 返回到原來(lái)的位置。
查看系統(tǒng)函數(shù)的幫助。Vi也可以像VC那樣,很方便的跳轉(zhuǎn)到系統(tǒng)函數(shù)的幫助那里。原理很簡(jiǎn)單,在vi運(yùn)行外部命令man就行了:!man fopen,這樣做,可能會(huì)覺(jué)得有些麻煩,vi提供了快捷的方式:
自動(dòng)定位編譯錯(cuò)誤處。在VC里,編譯時(shí),如果出現(xiàn)編譯錯(cuò)誤,雙擊錯(cuò)誤信息,編輯器自動(dòng)切換到出現(xiàn)錯(cuò)誤的地方,是不是很方便呢?其實(shí)不用羨慕,vi也有這種功能,在vi里,運(yùn)行make命令后,如果有編譯錯(cuò)誤,你按一下回車(chē),vi自動(dòng)定位到第一個(gè)編譯錯(cuò)誤那里。記得,要用內(nèi)置的make命令,即運(yùn)行:make,不是外部命令:!make。
自動(dòng)定位查找結(jié)果。在寫(xiě)程序時(shí),我們常常想知道,有哪些地方使用了某個(gè)函數(shù),怎么辦呢,你可以在shell里,用grep查找,然后打開(kāi)對(duì)應(yīng)的文件,可以看到相關(guān)的上下文信息。但這樣做比較麻煩,Vi有個(gè)內(nèi)置的grep命令,用起來(lái)很方便:
1. 查找。用法和shell中的grep一致。
2. 跳到第一個(gè)查找結(jié)果處。直接回車(chē)就行了。
3. 列出所有的查找結(jié)果。:cl命令可以列出所有的查找結(jié)果,每個(gè)結(jié)果都有一個(gè)編號(hào)。
4. 跳到某項(xiàng)查找結(jié)果的文件中。:cc <編號(hào)> 命令可以跳到指定編號(hào)查找結(jié)果的文件中,<編號(hào)>是前面用:cc列出來(lái)的編號(hào)。
5. 返回到原來(lái)的位置。
未完待續(xù)…
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com