在程式寫很大的時候,常常要編輯很多檔案。雖然名字取的好可以幫助記憶,但是還是需要輸入很多指令來切換編輯檔案。
下面的方式就是用一些vim的plugin,來達到輕鬆的專案開啟以及管理。也能夠很容易的做trace code的動作。
要達要目標我們需要2個vim plugins
1. taglist
2. project
taglist
source code browser,用來方便瀏覽各種語言的原始碼。配合ctags所產生的tags,能跳到variable和function的所在位址。
設定:
1. 確認ctags為Exuberant ctags 5.0以上,vim版本要6.0以上。
2. 安裝taglist.vim這個plugin
3. 在.vimrc設定
nnoremap
nnoremap
project.vim
產生一個project的檔案瀏覽器。
設定:
1. 安裝project.vim
2. 在.vimrc設定
" Open default Project (in ~/.vimprojects)
nnoremap
" taglist 執行的ctags的路徑, 在這裡安裝在家目錄底下
let Tlist_Ctags_Cmd='~/bin/ctags'
" 自動更新tags
function UPDATE_TAGS()
call system("ctags -R")
endfunction
autocmd BufWrite,BufWritePost *.cpp,*.h,*.c :call UPDATE_TAGS()
3. 設定.profile (.cshrc)
for .profile
alias openproj='ctags -R;vim +Project'
for .cshrc
alias openproj 'ctags -R;vim +Project'
使用方法:
在專案的目錄下(source code存放的目錄),輸入
$openproj
開啟檔案,第一次要在project的視窗裡面做設定。
在project視窗輸入'\C'
根據出現的提示做設定
Enter the Name of the Entry: MyProject #專案名稱
Enter the Absolute Directory to Load:/home/powentan/project #專案絕對路徑
Enter the CD parameter:#輸入enter
Enter the File Filter: *.cpp *.h #要加入專案的檔案格式
設定好了以後會產生叫做~/.vimprojects存放你的專案設定,之後再用openproj開啟檔案時,就會自動load專案設定檔。
開好專案以後,選取空白的視窗,按下
產生好了以後按
利用project browser (project.vim)跟source code browser (taglist.vim),我們就能很方便的進行code的修改和trace。
參考資料 :
Using vim as an IDE all in one
vim: lightning fast navigation in a large software project
2008年7月25日 星期五
[+/-] |
[vim] 自訂專案開啟 (project.vim taglist.vim) |
2008年7月24日 星期四
[+/-] |
[google] google bookmark的使用 |
目前使用的網路書籤為google bookmark,配合上firefox的GMarks這個plugin,在瀏覽和管理上都相當的方便。GMark可以在側欄開啟,比起在menubar上面好用很多。在IE 6.0上面使用menubar來瀏覽書籤移動會變的卡卡的不好用,用側欄開啟就沒有這個困擾。
另外google bookmark還能在google notebook裡面瀏覽和編輯,增加了很多方便性。
還有匯出的功能,這樣就算不用google bookmark也不怕因為書籤被綁死還無法使用其他服務,在這點google的"Don't be evil"還算蠻好的。
在使用書籤要注意的一點是,如果一個書籤有好幾個tags,而只要刪除其中的一些tags,要使用移除分類標籤這個功能,而不是使用刪除。如果用刪除的話,整個書籤就會完全被刪除,唯一補救的方法就是在google notebook裡面的垃圾桶救回。
2008年7月15日 星期二
[+/-] |
[Unix] 轉換不同時區的時間 |
轉換不同地方的時間因為有些地區的夏季時間(day light saving time)不同,所以不能只用和GMT
的差距來計算,還要知道夏季時間差、開始以及結束,非常不方便。
因此使用環境變數"TZ"來設定系統的時間,只要知道那個地區的time zone string就能方便的進行轉換。
time zone string在系統的位址為 /usr/share/zoneinfo 底下的檔案和資料夾就是代表各地區的time zone string。
例如:台北的為Asia/Taipei,是在Asia資料夾底下的Taipei檔案,而英國倫敦則是Europe/London。
在shell底下只要用下面的指令就可以把目前系統時間轉換成當地時間:
for ksh:
$TZ="Europe/London";export TZ
for csh:
$setenv TZ "Europe/London"
而在C程式裡面則是呼叫setenv這個function:
setenv("TZ", "Europe/London", 1);
在不同地方時間的轉換則是用下面的方法:
1. 取得source地區的系統時間
2. 轉換到destination的時區
3. 利用source地區的系統時間,經由localtime轉變成destination的struct tm時間。
參考資料 :
[+/-] |
[Socket] 用Multicast來傳輸資料 |
unicast, multicast, broadcast 介紹三種的網路傳輸方式。
其中 Multicast 是用廣播的方式,將資料傳送給所有加入群組的 ip。
IP區段為:224.0.0.0 ~ 239.255.255.255
下面介紹如何設定傳送和接收 Multicast的 Socket。
標頭檔:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <errno.h>
#include <err.h>
#define PORT 6000
#define GROUP_IP "224.0.0.1"
1. 首先產生一個socket,設定為datagram
sock = socket(AF_INET, SOCK_DGRAM, 0);
2. 設定sockaddr
struct sockaddr_in addr;
bzero(&addr, sizeof(struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(GROUP_IP); //傳送要設定傳送的multicast ip
//接收則是要將ip設定成INADDR_ANY
//透過bind來接收multicast資料
addr.sin_port = htons(PORT);
3. 接收設定資料要進行bind和設定multicast addr
addr.sin_addr.s_addr = inet_addr(INADDR_ANY);
//bind
if (bind(sock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) < 0)
{
perror("bind");
exit(1);
}
mreq.imr_multiaddr.s_addr = inet_addr(GROUP_IP);
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(struct ip_mreq)) < 0)
{
perror("setsockopt mreq:");
printf("%d %s\n", errno, strerror(errno));
exit(1);
}
4. 傳送和接收
傳送:
sendto(sock, buf, bufLen, 0, (struct sockaddr *)&addr, sizeof(struct sockaddr));
接收:
u_int addrLen = sizeof(struct sockaddr);
recvfrom(sock, buf, bufLen, 0, (struct sockaddr *)&addr, &addrLen);
參考資料 :
unicast, multicast, broadcast - http://www.hoyo.idv.tw/hoyoweb/document/view.php?sid=109&author=hoyo&status=view
2008年7月8日 星期二
[+/-] |
[Vim] Class Browser : Taglist |
taglist是一個vim的class browser plugin,它能讓vim編寫程式更方便。
設定方式:
1. exuberant ctags 版本要在5.0以上
2. 下載taglist
3. 如果沒有建立過vim的plugin,要建立~/.vim,以及~/.vim/plugin這兩個目錄
4. 把taglist解壓縮,把裡面的 plugin/taglist.vim複製到 ~/.vim/plugin底下
5. 在.vimrc裡面加入 nnoremap <silent> <F8>
以上設定完畢,只要在進入vim時按F8,就能把這個檔案的class browse顯示在視窗左邊。
如果要一次開啟整個資料夾,也可以用以下的方法:
:TlistAddFilesRecursive /my/project/dir *.c
這樣就能一次把/my/project/dir 底下的所有.c檔匯入。
TlistAddFilesRecursive是把目錄底下的所有檔案以遞回方式全部載入,而TlistAddFiles則只載入這個目錄底下的檔案。
參考資料 :
Taglists plugin for Vim - http://bubudog.blogspot.com/2007/01/taglists-plugin-for-vim.html
2008年7月1日 星期二
[+/-] |
wxPython : 能改變顏色的文字編輯區塊StyledTextCtrl |
我們在編輯程式的編輯器中,顯示程式碼的區塊能根據不同語言的程式關鍵字而變色。
這樣的編輯區塊在wxPython裡面也有。
wx.stc.StyledTextCtrl:由Scintilla這個open source的編輯套件移植過來的,可以設定一些和編輯器相關的設定。
stc = wx.stc
stc.SetText(text) #設定string text到editor中
stc.SetKeyWords(keywordset, keywords) #設定editor的keyword
stc.SetCurrentPos(pos) #設定目前的位址
用這個元件我們就可以實作出屬於自己的editor。
參考資料 :
StyledTextCtrl - http://www.wxpython.org/docs/api/wx.stc.StyledTextCtrl-class.html