2012年11月30日 星期五

Vim as your IDE

0.安裝中文help

中文幫助手冊的安裝

http://vcd.gro.clinux.org    (中文)

解壓後其中有個doc文件夾, 將其中的內容全部复制到~/.vim/doc, 或者vim安裝目錄下的doc目錄中, 此時vim中的help信息已經是中文的了.
注意:
a. 如果無法顯示中文, 在~/.vimrc中增加下面這句試試:
   set helplang=cn
b. 幫助文件的文本是utf-8編碼的, 如果想用vim直接查看, 需要在~/.vimrc中設置:
   set encoding=utf-8

 

 

1.TeTrIs.vim : A tetris game in pure vim

為了練習vim的樂趣及操作.

image

To start the game, press <Leader>te.
(If you don't know what is <Leader>, you should press \te, and type :help Leader<Enter> to learn about what the heck leader is)
Controls:
h: left
l: right
j: down
i,k: rotate
<Space>: drop
<Esc> or q: quit

 

2.快速瀏覽和操作Buffer -- 插件: MiniBufExplorer

上面那個狹長的窗口就是MiniBufExplorer窗口, 其中列出了當前所有已經打開的buffer, 當你把光標置於這個窗口時, 有下面幾個快捷鍵可以用:

image

<Tab>
向前循環切換到每個buffer名上

<S-Tab>
向後循環切換到每個buffer名上

<Enter>
在打開光標所在的buffer

d
刪除光標所在的buffer

let g:miniBufExplMapWindowNavVim = 1

則可以用<C-h,j,k,l>切換到上下左右的窗口中去,就像:
C-w,h j k l    向"左,下,上,右"切換窗口.

 

4.Ctag+TagList

image

接下來將 Taglist 的 Plugin 放置到 C:\Program Files\Vim\vim71\plugin 內。
在 C:\Program Files\Vim\_vimrc 設定 ctags.exe 的路徑
let Tlist_Ctags_Cmd = 'C:\ctags.exe'
再加上 map ,設定 F12 為開啟/關閉 Tag List 的快捷鍵:
nnoremap <F12> :TlistToggle<CR>

使用

1.開啓專案,按F12來產生Ctag檔

2."Enter”在buffer中開啓;

  "o” 在視窗中開啓

  "x”放大 Ctag視窗

  "space”顯示出其定義(查看函式)

5.WinManager

文件瀏覽器和窗口管理器 -- 插件: WinManager

image

文件瀏覽器: netrw.vim

在該界面上你可以用下面的一些命令來進行常用的目錄和文件操作:

<F1>
顯示幫助

<cr>
如果光標下是目錄, 則進入該目錄; 如果光標下文件, 則打開該文件

-
返回上級目錄

c
切換vim 當前工作目錄正在瀏覽的目錄

d
創建目錄

D
刪除目錄或文件

i
切換顯示方式

R
文件或目錄重命名

s
選擇排序方式

x
定制瀏覽方式, 使用你指定的程序打開該文件

 

WinManager插件來將TagList窗口和netrw窗口整合

let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>

參考:

http://rritw.com/a/JAVAbiancheng/ANT/20120817/206260.html

http://haridas.in/vim-as-your-ide.html

TeTrls.vim

http://www.vim.org/scripts/script.php?script_id=172

Setting Up Ctags + Gvim in Windows:

http://c9s.blogspot.tw/2007/07/setting-up-ctags-gvim-in-windows.html

Graphical vi-vim Cheat Sheet and Tutorial:

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

用Gvim建立IDE编程环境 (Windows篇):

http://rokin.iteye.com/blog/475274

USB系統開發工具

Bus Hound: 可顯示設備配置資訊,並能夠擷取USB主機對USB設備進行列舉的過程。

也可利用USB Hound來除錯。

使用用方法

1.在Devices tab中

image fig 1. Step 1

 

2. 介面操作

image fig 2. 設備資訊介面

3.使用

a.選擇Endpoint

b.設定USB command

c.發送

d.查看

image fig 3. 向設備發送取得設備描述資訊請求

image fig 4. 獲得設備配置描述資訊集合

4.利用Bus Hound來Capture取設備和主機所進行的過程***

image

image

 

參考資料:USB 2.0 系統開實例精解

queue

佇列;

定義

,只允許在一端進行插入操作,而在另一端中進行刪除操作的線性表(有限、有序)

其為一種先進先出(FIFO,first in first out)的線性表。

q=(a1,a2,...,an-1,an);則可設定a1為首,而an為尾。

image

queue的ADT(抽象資料類型)

ADT queue
Data
    元素為相同的類型,相鄰元素具有前後關係.
Operater
    InitQueue(*Q);//初始化,建立一個空queue
    DestoryQueue(*Q);//若queue存在,則刪除
    ClearQueue(*Q);//清除queue.
    QueueEmpty(Q);//若Q存在且為空,則回傳true
    GetHead(Q,*e);//若queue且非空,則e傳回Q首
    EndQueue(*Q,e);//若queue存在,插入新元素e到queue中.其e成為queue尾
    DeQueue(*Q,*e);//刪除queue首元素,並用e傳回
    QueueLenght(Q);//反回queue中的元素個數.
 
endADT


因為是線性表,故相同地有



順序儲存



其順序存儲時,有下列問題



image



其加入元素時,其時間O(1)



image



刪除時,則時間變為O(n)。這是因為使其queue首必須要在前面的位置上,所導致的。



而其可以改為下列,用二個變數指標來指定其首'尾.



image



 



1.空



image



2.滿



image



3.非空非滿



image



在此時,會出現"虛溢出",指還有空間(0)。但無法存放。



image



而為了改進此我們把rear放在0來形成循環,稱為循環queue



image



但其該如何來判斷其是是滿或空



方法1:



加一個flag



在初始時front==rear,flag=0.為空



若下次出現front==rear且flag==0.則改flag=1(滿)



方2:



保留一個空間。如下圖的情況即代表為滿。



image



image



而其



判斷是否為滿



(rear+1)%QueueSize==front



EX:



rear=0,front=1



((0+1)%5==1)?滿:非滿



rear=4,front=0



(4+1)%5==0? 滿



rear=4,front=1



(4+1)%5==1?非滿





長度



(rear-front+QueueSize)%QueueSize





typedef int QElemType;
typedef struct
{
QElemType data[MAXSIZE];
int front;
int rear;
}SqQueue;




Status InitQueue(SqQueue *Q)
{
Q->front=0;
Q->rear=0;
return OK;
}




int QueueLength(Q)
{
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE);




Status EnQueue(SqQueue *q,QElemType e)
{
if((q->rear+1)%MAXSIZE==q->front))
  return ERROR;
q->data[q->rear]=e;
q->rear=q->rear+1%MAXSIZE;
}




Status DeQueue(SqQueue *q, QElemType *e)
{
if(q->rear==q->front)
    return ERROR;
*e=q->data[q->front];
q->front=q->front+1%MAXSIZE;
return OK;
}


 



 



link list