2009年1月20日 星期二

vim的plugin初體驗 ─ supertab.vim

如果你有用過一些IDE(Integrated development environment,就是可以輔助編輯程式並compile的軟體),例如visual studio系列、dev c++,或者eclipse,那麼在寫程式的時候應該很熟析一個功能:當function或variable的名字太長,我們常常會打幾個字之後按下tab鍵(通常在Q的右邊左邊),然後它就會幫我們自動完成,或是列出可選的清單。

vim其實也有自動完成的功能。你可以在vim中
:h ins-completion
查看相關操作。不過,看起來還滿複雜的。沒關係,vim的網站上有人提供了方便的plugin,可以簡單地按個tab就達到自動完成的功能。這個plugin叫做supertab。底下就教你怎麼安裝這個plugin。

首先,要先下載supertab的檔案,還記得wget嗎?以寫本文的時間為例,目前supertab出到0.48版,所以我們可以
% wget http://www.vim.org/scripts/download_script.php?src_id=9837
來下載,然後就可以在home directory底下發現supertab.vim的蹤跡囉!接下來要將他移到正確的位置才能發揮作用。vim的plugin都是放在.vim/plugin/資料夾底下的,首先先用ls檢查看看.vim/plugin在不在,不存在的話就用mkdir建立,然後再將supertab.vim mv進去。
% ls .vim/plugin
% mkdir -p .vim/plugin
% mv supertab.vim .vim/plugin/
這樣就安裝完成啦!!很簡單吧! 趕快來測試看看吧。首先我們來寫一個簡單的程式:
int main()
{
int thisIsVarWithLongName = 0;
return 0;
}
接下來,當我們要對thisIsVarWithLongName做運算時,你可以打thisIs然後開心地按下tab鍵,你就會發現它自動幫你完成了!! 如果有超過兩個字是thisIs開頭的話,他還會有清單列出來讓你可以上下選咧!只要移動上下鍵或是繼續按tab鍵就可以選擇啦。

如果選單的顏色不喜歡的話,可以把底下貼進你的~/.vimrc,就可以改變選單的顏色啦。("開頭表示被註解掉)
"hi Pmenu        term=standout   cterm=reverse   ctermfg=Magenta
hi PmenuSel term=bold cterm=bold ctermfg=Blue ctermbg=White
"hi PmenuSbar term=standout cterm=bold ctermfg=White ctermbg=White
hi PmenuThumb term=bold cterm=bold ctermbg=Blue
怎麼加阿... 用vim加囉,我必須承認我自己提供的這組配色也很難看,不過算是給個範例,大家可以自己嘗試其他的配色,找到自己順眼的。

其實關於自動完成,還有更好用的套件,叫做OmniCppComplete,在我拖稿到介紹這個東西如何安裝使用前,不妨自己先玩玩看它吧 :)

2009年1月18日 星期日

if condition

在寫if condition或是其他一些condition時,一般人習慣的寫法是:
if(a==0) {
// do something
}
通常是左手邊變數,右手邊常數。不過寫C/C++最常犯的bug之一,就是相等比較的2個=常常會不小心少寫一個=寫成assignment的一個等於。如下
if(a=0) {
// do something
}
這可是差很多的! 由於在語法上完全合法,所以並不會有compile error。有些compiler會吐warning出來,但是有些不會。忽略這個錯誤將會造成debug時的痛苦...

下面的coding小技巧可以幫助避免這樣的事情發生,我們只要將上面那段code改成
if(0==a) {
// do something
}
將左右手邊對調,左手邊是常數,右手邊是變數,這樣不小心寫成一個=時,一定會有compile error被report。雖然這樣寫剛開始會很不習慣就是了。
另一個好處就是,常數通常都很短,但變數命名通常都較長,這樣寫會有另一種alignment的美感,可以試著體會看看 :)