2007年6月24日

Ubuntu下的C/C++環境搭建

來自對岸的blog,我比較欣賞的是他其中vim的使用方式,備份一份在這裡

我用的是Ubuntu的Server版本,安裝是很容易的,非常之簡單,不過安裝之後的操作系統幾乎是一個空白的操作系統,幾乎什麼都沒有,所以都得安裝好。

因為是Dapper (6.06) 版本,所以我用以下方法更換軟件源:

vim /etc/apt/sources.list

用以下內容替換文件中的所有內容

deb http://archive.ubuntu.com/ubuntu/ dapper main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ dapper-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ dapper-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ dapper main restricted universe multiverse

這裡你也可以直接使用更快速的ubuntu.cn99.com的源(推薦):
deb http://ubuntu.cn99.com/ubuntu/ dapper main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ dapper-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ dapper-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ dapper-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ dapper main restricted universe multiverse

這裡你還可以使用速度也非常快的的mirror.lupaworld.com的源:
deb http://mirror.lupaworld.com/ubuntu/archive/ dapper main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ dapper-security main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ dapper-updates main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ dapper-backports main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/ubuntu-cn/ dapper main restricted universe multiverse

如果是教育網用戶推薦使用上海交通大學的源:
deb http://ftp.sjtu.edu.cn/ubuntu/ dapper main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ dapper-backports main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ dapper-proposed main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ dapper-security main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ dapper-updates main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu-cn/ dapper bleeding main multiverse restricted universe

教育網用戶也推薦使用清華大學計算機系學生科協的源:
deb http://mirror.net9.org/ubuntu/ dapper main multiverse restricted universe
deb http://mirror.net9.org/ubuntu/ dapper-backports main multiverse restricted universe
deb http://mirror.net9.org/ubuntu/ dapper-proposed main multiverse restricted universe
deb http://mirror.net9.org/ubuntu/ dapper-security main multiverse restricted universe
deb http://mirror.net9.org/ubuntu/ dapper-updates main multiverse restricted universe
deb http://mirror.net9.org/ubuntu-cn/ dapper main multiverse restricted universe

保存編輯好的文件
sudo apt-get update


剛裝好的系統的root是進不去的,需要更改密碼:
sudo passwd root

反正是內網用,所以就直接用root了,sudo太麻煩!

接下來安裝SSH用以遠程登陸:
apt-get install ssh

OK,接著裝編譯器:

apt-get install gcc
apt-get install make
apt-get install autoconf
apt-get install automake
apt-get install libtool
apt-get install gdb
apt-get install g++

編輯器,我偏好使用vim,就裝上了它
apt-get install vim
默認下,vim是沒有語法染色的,
修改/etc/vim/vimrc
只要把syntax on的註釋去掉就可以了。

想要讓vim好用,還需要安裝一些必須的插件,這裡我引用兩篇文章:

第 一部分介紹了一些基本的 Vim 使用技巧。掌握這些技巧可以很大地提高編輯效率,但是 Vim 的強大功能並不僅限於此。Vim 還可以通過「插件」來進行功能擴展。精確地說,是通過腳本來進行擴展,腳本類型有插件、語法加亮、配色方案、文件類型檢測等多種。大部分的腳本都是由 Vim 的用戶寫的,解決了用戶身邊的問題,使 Vim 變得更加有用。本章將介紹最常用的一些腳本,其中除了一個屬於「語法加亮」腳本外,其它都屬於「插件」類型。關於如何寫腳本的一些基礎知識將在下一部分進 行一些介紹。

2.1. gzip(壓縮文件支持)

作者:Bram Moolenar

網站腳本編號:無(包含在 Vim 的標準發佈之中)

安裝說明:

功能說明:

該腳本使得 Vim 可以直接打開使用 gzip [1]、bzip2 [2] 和 compress [3] 壓縮的文件(要求存在相應的命令行工具)。後綴為「.gz」、「.bz2」和「.Z」的文件會在打開時被動態解壓縮,並在寫操作時被自動重新壓縮。

打開壓縮文件時,屏幕上出現一個(不正確的)「[noeol]」的提示是正常的,不必進行理睬。

2.2. netrw(網絡文件支持)

作者:Charles E. Campbell, Jr.(綽號 Dr. Chip)

網站腳本編號:1075(Vim 的標準發佈之中可能包含一個較老的版本)

安裝說明:

Vim 6.4 的標準發佈帶的版本是 42,較老、功能不齊全,但無須安裝。建議:

1. 在 Vim 網站上下載版本 62(更新的版本只能用於 Vim 7);
2. 使用「tar xvfj netrw.tar.bz2 -C ~/.vim」解開;
3. 在Vim中運行「:helptags ~/.vim/doc」安裝文檔。

功能說明:

支持直接讀寫網絡上的文件,支持的協議有 ftp、http、rsync、scp 等。比如,使用 FTP 協議以用戶名 adah 打開服務器 server 上 ~/temp 目錄下的 test.cpp 文件,可以直接在命令行上使用:

          
vim ftp://adah@server/temp/test.cpp

Vim會自動提示用戶輸入口令,然後打開文件。

更多的幫助內容請參考「:help netrw」。

2.3. engspchk(英文拼寫檢查)

作者:Charles E. Campbell, Jr.(綽號Dr. Chip)

網站腳本編號:195

安裝說明:
在 Vim 網站上下載最新版本(engspchk.tar.gz);
使用「tar xvfz engspchk.tar.gz -C ~/.vim」解開;
在Vim中運行「:helptags ~/.vim/doc」安裝文檔。
提示替換拼寫功能需要 agrep [4],可能需要另外下載安裝。

功能說明:
一個Vim專用的拼寫檢查器,其最主要的特點是:

  • 可以通過變量 spchkdialect 選擇英語變體(英國、美國、加拿大),對於找不到的詞、不常見的詞、不在當前英語變體中的詞以不同的方式加亮顯示;
  • 支持用戶詞典(保存在 .vim/CVIMSYN 目錄中)和項目詞典(保存在被檢查文件所在的目錄中);
  • 對於源代碼文件,只對註釋進行拼寫檢查,而不會對你的變量名稱胡亂提抗議;
  • 通過詞典文件可支持除英語以外的其它語言。

圖 5 中的窗口裡 engspchk 正在運行中。其中可以看到,紅色部分是插件所不能識別的單詞,黃色部分是當前英文變體(缺省是美國英語)中不正確的拼法,而青色部分是很少見的單詞。圖中 運行的是包含圖形界面支持的 Vim,因而還可以看到一個名為 DrChip 的菜單項(參見圖6),在其中可通過菜單選擇拼寫檢查相關的各項功能;同時還能看到快捷鍵:「\ec」開始拼寫檢查,「\ee」結束拼寫檢查,「\ea」 選擇替換拼寫,等等。在文本模式的 Vim 中,我們一般就只使用這些快捷鍵了。




更多的幫助內容請參考「:help engspchk」。

2.4. calendar(日曆顯示)

作者:Yasuhiro Matsumoto

網站腳本編號:52

安裝說明:

在 Vim 網站上下載文件 calendar.vim,存到 ~/.vim/plugin 目錄中。

功能說明:

圖 6 的下半部分就是 calendar 的運行示例,是直接在正常模式下鍵入「\caL」顯示出來的。光標在該窗口中時,可使用左箭頭或上箭頭顯示前一個月,右箭頭或下箭頭顯示後一個月,「t」 回到「今天」,「q」關閉日曆窗口。在有鼠標支持時,也可以使用鼠標在黃色字樣的「Prev」、「Today」、「Next」上雙擊達到類似的效果。

除 使用「\caL」外,「\cal」也可以打開一個日曆窗口,但顯示位置是在 Vim 的左側而不是下方。另外,命令「:Calendar」效果和「\cal」相同,但其後可以跟參數:一個參數的話表示月份,兩個參數的話則分別表示年份和月 份。「:CalendarH」與「:Calendar」類似,但日曆窗口的打開位置和「\caL」(而不是「\cal」)一樣,是在下方而不是左側。

2.5. project(文件的「項目」管理)

作者:Aric Blumer

網站腳本編號:69

安裝說明:

1. 在 Vim 網站上下載最新版本(project-1.3.tar.gz);
2. 使用「tar xvfz project-1.3.tar.gz -C ~/.vim」解開;
3. 在 Vim 中運行「:helptags ~/.vim/doc」安裝文檔。

功能說明:

該 插件可以把文件組織成一棵樹的形式,以便於查找和管理。使用命令「:Project」即可打開一個用戶的「項目文件」(~/.vimprojects)。 項目文件採用普通的文本文件的形式,非常易於瀏覽和修改。圖 7 是一個示例。其中左邊窗口部分的就是一棵項目樹,完整內容如下:

CvsMenu="~/.vim" CD=. {
plugin/cvsmenu.vim
doc/cvsmenu.txt
}
Nvwa="~/nvwa_local" CD=. {
doc=doc {
ChangeLog
README
webupdate.sh
}
nvwa=nvwa {
bool_array.cpp
debug_new.cpp
mem_pool_base.cpp
static_mem_pool.cpp
bool_array.h
class_level_lock.h
cont_ptr_utils.h
debug_new.h
fast_mutex.h
fixed_mem_pool.h
mem_pool_base.h
object_level_lock.h
pctimer.h
set_assign.h
static_assert.h
static_mem_pool.h
}
}

在 這個項目文件中存在兩個項目:CvsMenu 和 Nvwa。引號中的內容表示路徑,「CD=.」則表示打開該項目中的文件時,當前目錄會更改到項目所在的目錄。項目下面可以再分子項目,如 Nvwa 項目下有 doc 和 nvwa 兩個子項目,沒有「CD=.」表示打開子項目裡的文件時不再更改當前目錄。

圖中並沒有顯示出完整的 內容,因為其中的內容可以摺疊(缺省打開項目文件時是完全摺疊起來的,即在上面的例子中,只能看到兩個項目的名字「CvsMenu」和「Nvwa」)。在 非文件名行上使用鼠標雙擊或回車鍵可以進行展開或摺疊,在文件名行上使用鼠標雙擊或回車鍵則可以打開對應的文件。

更多的幫助內容請參考「:help project」。

2.6. taglist(源代碼結構瀏覽)

作者:Yegappan Lakshmanan

網站腳本編號:273

安裝說明:

1. 確保機器上有一個可用的 Exuberant Ctags 的版本(可以執行命令「ctags」)

2. 在 Vim 網站上下載 taglist(假設為 taglist.zip);

3. 使用「unzip taglist.zip -d ~/.vim」解開;

4. 在 Vim 中運行「:helptags ~/.vim/doc」安裝文檔。

雖然 taglist 使用 ctags,但並不要求 tags 文件的存在。

功能說明:

使用命令「:Tlist」啟用/關閉 taglist,效果請先看一下圖 8。Taglist 的主要特性有:



  • 可以顯示宏(macro)、函數(function)、變量(variable)、類型定義(typedef)、類(class)、結構(struct)等多種內容信息;
  • 打開多個文件時,可以同時看到多個文件的結構信息;
  • 在左邊的 taglist 窗口顯示的名稱上雙擊鼠標或按回車鍵,右邊主窗口中會跳轉到相應的定義位置;
  • 右邊窗口中光標的位置改變,左邊的窗口也會在 4 秒內(缺省值,參見「:help 'updatetime'」)黃色加亮顯示相應的名稱;
  • 在啟用/關閉 taglist 時,插件能夠自動改變當前 Vim 窗口的大小(不管是文本模式的 Vim 還是圖形界面的 Vim),除非使用「:let Tlist_Inc_Winwidth=0」關閉這一功能(當使用這一功能導致兼容性問題時)。

更多的幫助內容請參考「:help taglist」。

2.7. cvsmenu(CVS集成)

作者:Thorsten Maerz/吳詠煒

網站腳本編號:1245

安裝說明:

1. 在 Vim 網站上下載文件 cvsmenu.vim,存到 ~/.vim/plugin 目錄中;
2. 啟動 gvim,在菜單中選擇「CVS-Settings-Install-Install updates」(文本模式的 Vim 可以使用快捷鍵「,cgii」),從網上(SourceForge)的 CVS 中安裝最新版本和幫助文檔(此步驟可選)。

功能說明:

在 Vim 中集成 CVS [24]版本管理功能。該插件最初由 Thorsten Maerz 編寫,在 2002 年以來沒有再得到維護。我在 2005 年初開始使用這個插件後,非常喜歡它,修正了其中存在的錯誤,並一直維護該插件。如果大家發現有 bug,報告給我就可以了。

主要功能可在圖 9 的菜單中看到:

瞭解 CVS 環境的基本信息和 cvsmenu 中的變量設定(參見圖 10);


  • 調整設定,安裝更新版本;
  • 插入 CVS 的可擴展關鍵字,如「$Date$」、「$Id$」;
  • 對目錄進行基本操作(cvs update 等);
  • 接受附加參數的基本操作(文件比較等);
  • 管理功能,如登錄;
  • 刪除類操作;
  • 打標籤;
  • 觀察(跟蹤)和編輯功能;
  • 將本地文件和 CVS 中的文件進行比較(以 Vim 的分左右兩列使用顏色加亮顯示修改、增加、刪除部分的比較方式;效果參見圖 11);
    圖 11
顯示文件每一行的更改人和更改時間(cvs annotate,參見圖 12);
圖 12

  • 顯示庫的訪問歷史(cvs history);
  • 顯示文件修訂日誌(cvs log;參見圖 13);
    圖 13

  • 顯示文件狀態;
  • 顯示較短的文件狀態;
  • 根據本地信息顯示文件狀態(不訪問庫);
  • 簽出模塊(cvs checkout);
  • 查詢更新;
  • 更新,如有衝突會高亮顯示(cvs update);
  • 取消修改;
  • 添加當前文件到 CVS 中(cvs add);
  • 簽入當前文件(cvs commit);
  • 導入文件(cvs import);
  • 添加並簽入當前文件。

根據實際使用的需要,除了修訂錯誤之外,我加入了一些編碼相關 的支持。拿一個最實際的情況,如果使用「set encoding=utf-8」,但源代碼中仍使用了 GBK 編碼的中文字符,那麼,必須在 .vimrc 中加入一行「let g:CVScvsoutputencoding='gbk'」才能保證「cvs annotate」操作的結果是正確的。

Thorsten 把該插件的易用性設計得相當好。舉例來說,在作文件比較時,按 Tab 可跳轉到下一個不同處,左側的比較窗口中按一下「q」即可關閉該窗口。更多的幫助內容請參考「:help cvsmenu」。

2.8. doxygen(文檔註釋語法加亮)

作者:Michael Geddes

網站腳本編號:5

安裝說明:

1. 在 Vim 網站上下載最新版本(doxygen.zip);
2. 使用「unzip doxygen.zip」解開;
3. 執行「cp -p doxygen.vim ~/.vim/syntax」和「cp -p doxygen.txt ~/.vim/doc」複製文件到 Vim 目錄下;
4. 在 Vim 中運行「:helptags ~/.vim/doc」安裝文檔。
5. 如果 ~/.vim/after/syntax 目錄不存在,使用「mkdir -p ~/.vim/after/syntax」創建該目錄;
6. 進入 ~/.vim/after/syntax 目錄,使用下面三行創建語法文件之間的關聯,使得在 C、C++ 和Java 文件中可以識別文檔註釋:


     
ln -s ../../syntax/doxygen.vim c.vim
ln -s ../../syntax/doxygen.vim cpp.vim
ln -s ../../syntax/doxygen.vim java.vim"


6. 可選地,看一下我的個人編程網頁 [6] 下有沒有對 doxygen.vim 的更新(裡面包含有作者尚未併入到標準發佈中去的我的更改——好奇的話,你可以在 doxygen.vim 文件中數一下,看一看 Wu Yongwei 的名字出現了幾次:-))。

功能說明:

如果你用過文檔註釋,相信我不需要多說,看一下圖 14你就知道這個腳本的功能了。如果你沒有用過文檔註釋,強烈建議你到 Doxygen [7] 的網站上看一下,瞭解一下這個非常有用的工具。作為示例,可在 http://nvwa.sourceforge.net/doc/debug__new_8cpp.html#a17 看一下圖中的代碼使用 Doxygen 自動生成的 HTML 網頁。


圖 14

2.9. matrix(!)

作者:Don Yang

網站腳本編號:1189

安裝說明:

在 Vim 網站上下載文件 matrix.vim,存到 ~/.vim/plugin 目錄中即可。

功能說明:

是的,說的就是電影 Matrix!Vim 的腳本並不是都干「正經事」的。想看一下電影裡那些酷酷的字符在 Vim 的窗口裡翻滾嗎?發一個命令「:Matrix」即可(按任意鍵退出)。效果見圖 15。


圖 15

參考資料

[1] The gzip home page: http://www.gzip.org/

[2] bzip2: http://www.bzip.org/

[3] Compress for UNIX: http://www.answers.com/compress#Wikipedia

[4] agrep: http://www.answers.com/agrep

[5] CVS-Concurrent Versions System: http://www.nongnu.org/cvs/

[6] Wu Yongwei's Programming Page: http://wyw.dcweb.cn/

[7] Doxygen: http://www.stack.nl/~dimitri/doxygen/

沒有留言: