RTFSC 是程序員打怪升級(jí)路上避不開的功課,那營(yíng)造一個(gè)舒適的環(huán)境來提升上課的體驗(yàn)就很有必要了。
比如閱讀 AOSP 這種大型源碼,用什么姿勢(shì)來閱讀才能絲般順滑,讓 F**king Source Code 也變得不那么可惡呢?
工具的選擇
閱讀源碼的工具我嘗試過以下幾類:
IDE
在看特定類型項(xiàng)目時(shí)這是我的首選。比如它原本就是一個(gè) Visual Studio 工程,那當(dāng)然用 Visual Studio 來打開閱讀,看 Android App 或者 Library 源碼當(dāng)然用 Android Studio 體驗(yàn)更好。
編輯器配合插件
比如 Vim + Ctags + Cscope,再配合文件模糊查找插件 LeaderF 和神器 YouCompleteMe,在源碼規(guī)模不大時(shí)很方便,打開也輕快,閱讀一些小項(xiàng)目時(shí)我還是樂意使用它們。
專門的源碼閱讀工具
在針對(duì)特大型源碼時(shí),比如 AOSP 和 Chromium,使用上述兩種方案可能會(huì)感覺乏力,這時(shí)候就需要祭出專門的源碼閱讀工具了。
一類是商業(yè)軟件,比如 Windows 下有著名的 Source Insight,跨平臺(tái)的有 Understand,功能都很強(qiáng)大,都是不錯(cuò)的選擇。當(dāng)然它們都價(jià)格不菲。
而我這里要講的主角 OpenGrok 屬于另一類,免費(fèi),開源,運(yùn)行流暢,功能也毫不遜色。
如果你還在尋覓適合你自己的解決方案,大可以花一點(diǎn)時(shí)間將以上幾種都嘗試一遍,哪個(gè)稱手用哪個(gè),也可以像我一樣,針對(duì)不同的項(xiàng)目使用不同的工具。想直觀了解 OpenGrok 的同學(xué)可以直接先看看一些使用 OpenGrok 的在線源碼查看網(wǎng)站,看看它能否滿足你的需求,其中的一些列在 OpenGrok installations。
OpenGrok 特性
譯自官方 Wiki。
OpenGrok 提供如下特性:
快速搜索代碼的引擎
搜索全文、定義、符號(hào)、文件路徑和修改歷史
搜索任意指定子目錄(分層搜索)
增量更新索引文件
支持類似 Google 的查詢語法,比如
path:Makefile defs:target
搜索日期范圍內(nèi)修改的文件
支持使用通配符搜索,如
*
表示多個(gè)字符,?
表示單個(gè)字符在搜索結(jié)果中展示匹配行
一個(gè) Web 只讀版的版本歷史查看界面
文件的修改日志
文件在兩個(gè)版本間的 diff
文件夾的歷史記錄
帶語法高亮的交叉引用顯示,可以使用 CSS 自定義樣式
可以開發(fā)插件支持新的語言和版本控制系統(tǒng)
已經(jīng)支持的語言: Supported Languages and Formats
已經(jīng)支持的版本控制系統(tǒng):Supported Revision Control Systems
配置 OpenGrok
截屏
按慣例先上圖吧,萬一你一眼就發(fā)現(xiàn)不是你的菜呢(截圖來自官網(wǎng))。
搜索功能和源碼樹:
代碼導(dǎo)航和版本歷史記錄:
安裝和配置
如下以 Windows 下為例,Mac OS X 與 Linux 下與此類似,很多步驟能使用 brew 或者 apt-get 會(huì)更方便。
安裝 JDK。
下載 Tomcat,解壓到一個(gè)目錄,如 D:\Programs\apache-tomcat-8.5.8。
下載 Universal Ctags for Windows,將 ctags.exe 文件所在目錄添加到 PATH 環(huán)境變量。
下載 OpenGrok 的最新包,比如 opengrok-0.13-rc4.zip,解壓到一個(gè)目錄,如 D:\Programs\opengrok-0.13-rc4。
配置 data root。
data root 用于放置生成的索引文件和配置信息,比如我在 OpenGrok 目錄下創(chuàng)建了一個(gè) data 目錄用作 data root,即 D:\Programs\opengrok-0.13-rc4\data。
將 OpenGrok 的 lib 目錄里的 source.war 解壓到 D:\Programs\apache-tomcat-8.5.8\webapps\source,配置 WEB-INF\web.xml 文件的 CONFIGURATION 為上一步生成的 data 目錄下的 configureation.xml,比如我的配置:
<display-name>OpenGrok</display-name><description>A wicked fast source browser