PIXNET Logo登入

飛天's blog

跳到主文

部落格全站分類:

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 8月 09 週二 201115:34
  • =vim使用小技巧==

 
=vim使用小技巧==
                                                                                
vi -R file (唯讀)
vi -r file (回複buffer)
D 游標以後全部刪除
:ctags *.c      (直接移到這個function上按 Ctrl+] 就到了,要回到原處就按 Ctrl+T)
:e #
:% (會對應到括號)
:set showmatch
:set autoindent     (簡寫: :set ai /noai)
:set ic 忽略大小寫  (簡寫: :set ic/noic) -全名:ignorecase
:set nu  顯示行號   全名:number
                                                                                
v (字元區塊選取)
V (行區塊選取)
ctrl + ^ (二檔案切換)
                                                                                
"f5yy (啟動buffer,複製5行,f是暫存器)
"fp
在單字上K(大寫K直拉啟動此字的man)
單字上# (shift + 3)搜尋上一個字串
單字上* (shift + 8)搜尋下一個字串
                                                                                
自定縮寫
:ab pf prinf("          (取消縮寫:no ab pf)
                                                                                
折疊的記憶
:mkview
:loadview
                                                                                
忽略大小寫
:set noignorecase
                                                                                
還原"上一次的還原"
ctrl+r
                                                                                
zs(捲動視窗,讓游標在螢幕的左端-開始)
ze(捲動視窗,讓游標在螢幕的右端-結束)
                                                                                
去除空行:
:g/^$/d
==============================================================
多檔編輯
:160,224 y a    (拉動 buffer a)
:pu a       (置放 buffer a)
================================================================
ex編輯器:
:g/^[  tab]*$/d     (刪除所有空白行,以及所有只包含空格的行)
:g/^[  tab][  tab]*$/d
                                                                                
:%s/\(.*\)    *S/\1/    (刪除每一行結尾的所有空白)
:%s/^    *\(.*\)/\1/    (刪除每一行開頭的所有空白)
                                                                                
:%s/./\U&/g     (將檔案中每一個單字轉成大寫)
                                                                                
--如何消去文字檔中的 ^M
:%s/^M//g
注意, ^M 是按 Ctrl + V 不放,再按 M,是一個字元,不是兩個字元
                                                                                
#在shell中使用
cat 1.txt | col -b > outfile
========================================================
========================================================
/* 把目錄下這個三資料copy過去  */
drwxr-xr-x   3 kaijun   misgrp       512 Oct 14 09:00 .vim/     (vim的語法檔)
-rwxr-xr-x   1 kaijun   misgrp     11175 Oct 19 09:32 .viminfo*     (vim的記錄檔
)
-rwxr-xr-x   1 kaijun   misgrp       489 Oct 19 09:31 .vimrc*       (vim的設定檔
)
(繼續閱讀...)
文章標籤

飛天!! 發表在 痞客邦 留言(0) 人氣(930)

  • 個人分類:程式設計
▲top
  • 8月 02 週二 201122:55
  • gcc 自製 Library

Library可分成三種,static、shared與dynamically loaded。
1. Static libraries
Static 
程式庫用於靜態連結,簡單講是把一堆object檔用ar(archiver)
包裝集合起來,檔名以 `.a' 結尾。優點是執行效能通常會比後兩者快,
而且因為是靜態連結,所以不易發生執行時找不到library或版本錯置而
無法執行的問題。缺點則是檔案較大,維護度較低;例如library如果發
現bug需要更新,那麼就必須重新連結執行檔。
1.1 
編譯
編譯方式很簡單,先例用 `-c' 編出 object 檔,再用 ar 包起來即可。
____ hello.c ____
#include 
void hello(){ printf("Hello "); }
____ world.c ____
#include 
void world(){ printf("world."); }
____ mylib.h ____
void hello();
void world();
$ gcc -c hello.c world.c /* 
編出 hello.o 與 world.o */
$ ar rcs libmylib.a hello.o world.o /* 
包成 limylib.a */
這樣就可以建出一個檔名為 libmylib.a 的檔。輸出的檔名其實沒有硬性規定,
但如果想要配合 gcc 的 '-l' 參數來連結,一定要以 `lib' 開頭,中間是你要
的library名稱,然後緊接著 `.a' 結尾。
1.2 
使用
____ main.c ____
#include "mylib.h"
int main() {
hello();
world();
}
使用上就像與一般的 object 檔連結沒有差別。
$ gcc main.c libmylib.a
也可以配合 gcc 的 `-l' 參數使用
$ gcc main.c -L. -lmylib
`-Ldir' 
參數用來指定要搜尋程式庫的目錄,`.' 表示搜尋現在所在的目錄。
通常預設會搜 /usr/lib 或 /lib 等目錄。
`-llibrary' 
參數用來指定要連結的程式庫 ,'mylib' 表示要與mylib進行連結
,他會搜尋library名稱前加`lib'後接`.a'的檔案來連結。
$ ./a.out
Hello world.
2. Shared libraries
Shared library 
會在程式執行起始時才被自動載入。因為程式庫與執行檔
是分離的,所以維護彈性較好。有兩點要注意,shared library是在程式起始
時就要被載入,而不是執行中用到才載入,而且在連結階段需要有該程式庫
才能進行連結。
首先有一些名詞要弄懂,soname、real name與linker name。
soname 
用來表示是一個特定 library 的名稱,像是 libmylib.so.1 。
前面以 `lib' 開頭,接著是該 library 的名稱,然後是 `.so' ,接著
是版號,用來表名他的介面;如果介面改變時,就會增加版號來維護相容度。
real name 
是實際放有library程式的檔案名稱,後面會再加上 minor 版號與
release 
版號,像是 libmylib.so.1.0.0 。
一般來說,版號的改變規則是(印象中在 APress-Difinitive Guide to GCC中有
提到,但目前手邊沒這本書),最尾碼的release版號用於程式內容的修正,
介面完全沒有改變。中間的minor用於有新增加介面,但相舊介面沒改變,所以
與舊版本相容。最前面的version版號用於原介面有移除或改變,與舊版不相容
時。
linker name
是用於連結時的名稱,是不含版號的 soname ,如: libmylib.so。
通常 linker name與 real name是用 ln 指到對應的 real name ,用來提供
彈性與維護性。 
(繼續閱讀...)
文章標籤

飛天!! 發表在 痞客邦 留言(0) 人氣(36)

  • 個人分類:程式設計
▲top
  • 8月 02 週二 201109:53
  • shell的環境設定

tcsh 的環境設定
/etc/csh.cshrc
/etc/csh.login
(繼續閱讀...)
文章標籤

飛天!! 發表在 痞客邦 留言(0) 人氣(660)

  • 個人分類:程式設計
▲top
  • 8月 01 週一 201113:06
  • 關於 shell 方面如何設定環境的方法

關於 shell 方面如何設定環境的方法:
i. 系統執行的流程
user 的 login shell 大多設定為 tcsh ,這是一個類似於 csh 但是功能更強大的 shell ,
(繼續閱讀...)
文章標籤

飛天!! 發表在 痞客邦 留言(0) 人氣(2,109)

  • 個人分類:程式設計
▲top
  • 7月 27 週三 201110:14
  • Data structure的對齊(alignment)

Reference:  http://kezeodsnx.pixnet.net/blog/post/27585076
變數的宣告,會配置其所需的記憶體。每種變數所需的大小不一樣,比如說char是1 bytes,int 是4 bytes,double則是8 bytes。如果是這樣,那這些大小在記憶體中是如何擺放呢?是直覺的一個接一個放嗎?其實不然。這牽扯到performance / efficiency的問題! 在32 bits的架構上,一次的資料存取也就是32 bits (4 bytes)。而這4 bytes 不是隨便從哪個點抓都可以,而是以4 bytes為單位,不管需要的是其中那個byte,就抓那4個bytes。比如說,抓第0,4,8 ,12....等,而不會是從3,7,9開始抓4個bytes。
這代表什麼呢?這表示了對齊 (alignment)的重要,因為會影響到幾次才抓的完。如果要抓一個4 bytes 的int,而這個int是從6擺到10,那就表示要抓兩次,自然效能較差了。因此,在struct的宣告是存在對齊這件事的。見下例:
(繼續閱讀...)
文章標籤

飛天!! 發表在 痞客邦 留言(0) 人氣(83)

  • 個人分類:程式設計
▲top
1

個人資訊

飛天!!
暱稱:
飛天!!
分類:
好友:
累積中
地區:

文章搜尋

文章分類

toggle 隨記類別 (1)
  • 隨記 (1)
toggle 理財類別 (1)
  • 理財相關 (5)
toggle 資訊類別 (2)
  • 程式設計 (5)
  • 資訊科技 (1)
toggle 寵物類別 (2)
  • 水族世界 (3)
  • 兔兔世界 (1)
  • 未分類文章 (1)

誰來我家