Monday, August 15, 2005

Some VIM stuff

All from http://www.study-area.org/tips/tipsfr1.htm

% 這是匹配 {},[],() 用的,例如您的游標現在在 { 上
只要按 %,就會跑到相匹配的 } 上。寫程式時滿好用的。

. 這是什麼?ㄚ,是英文句點啦!沒錯,就是英文句點。什麼意
思?重複前次的編輯動作。這個指令太高明了,只要是編輯動
作(移動游標不算,冒號命令也不算)都可以按英文句點來重
複,要重複幾次都可以。
例如:您按了 yy,然後按 p 就會複製、貼上一整行,如果要重複這個動作的話,就可以按 . ,也可以把游標移到其它地方後再按。其它 dd,dw,r,cw 等編輯指令都可以這樣來重複。如果您要重複做某些編輯動作時,千萬千萬一定要想到有這麼一個英文句點重複指令。ㄚ,拜託啦!您一定要常用這個指令。
"ayy  將本行文字複製到 a 緩衝區
  • a 可為 26 個英文字母中的一個,如果是小寫的話,原先的內容會被清掉,如果是大寫的話是 append 的作用,會把內容附加到原先內容之後。
  • " 是 Enter 鍵隔壁的那一個同上符號(ditto marks)。
"ap  將 a 緩衝區的內容貼上。
  • 緩衝區的術語在 vim 稱為 registers,vim 擴充了相當多的功能,有興趣深入的朋友請 :h registers。您用 d、c、s、x、y 等指令改變或刪除的內容都是放在 registers 中的。例如:您用 dd 刪除的一行,也是可以使用 p 來貼上的。只要是在緩衝區的內容都可以使用 p 來貼上,不是一定要 y 起來的內容才能用 p。因此您認為 p 是 paste 也可以,認為是 put 可能較正確。
5"ayy  複製五行內容至 a 緩衝區。
5"Ayy 再複製五行附在 a 內容之後,現在 a 中有十行內容了!
  • ㄟ!不要我一直用 a 您就認為只有 a 可以用喔。26 個英文字母都可以的,交叉運用下,您會發覺 vi(m) 肚量不小。
  • 問題來了!忘記誰是誰的時候怎麼辦? :reg(冒號命令)就會列出所有 registers 的代號及內容。您現在就試著按看看。咦!怎麼還有數目字、特殊符號的緩衝區,原來您剛剛刪除(複製)的內容就預設放在 " 這個緩衝區,然後依序是 0,1,2,...9。也就是說您按 p 不加什麼的話,是取出 " 緩衝區的內容的。% 指的是目前編輯的檔案,# 指的是前一次編輯的檔案。還有其它的呀!因為沒什麼重要,就請 :h registers 吧!registers 有個 "s" 結尾,不要搞錯了,而且 Tab 的補全鍵 vim 也支援的,也就是說您鍵入 :h regi 再按 Tab 鍵,vim 就會幫您補全,按了 Tab 後發現不是您要的,那就繼續按,總會出現您要的。:-)
  • Tab 補全的功能,elvis 也有,但叫出 registers 列表的命令則沒有,您得自行記憶在您的腦袋瓜子裡。而且 elvis 的補全能力並沒 vim 強。
/  在 c-mode 的情形下,按 / 就會在左下角出現一個 /,然後鍵
入您要尋找的字串,按個 Enter 就會開始找。
? 和 / 相同,只是 / 是向前(下)找,? 則是向後(上)找。
n 繼續尋找。
N 繼續尋找(反向)。
:[range]s/pattern/string/[c,e,g,i]
range 指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行
至最後一行,也就是整篇文章,也可以 % 代表。
  • 還記得嗎? % 是目前編輯的文章,# 是前一次編輯的文章。
pattern 就是要被替換掉的字串,可以用 regexp 來表示。 string 將 pattern 由 string 所取代。 c confirm,每次替換前會詢問。 e 不顯示 error。 g globe,不詢問,整行替換。 i ignore 不分大小寫。
  • g 大概都是要加的,否則只會替換每一行的第一個符合字串。可以合起來用,如 cgi,表示不分大小寫,整行替換,替換前要詢問是否替換。
[實例] :%s/Edwin/Edward/g
    這樣整篇文章的 Edwin 就會替換成 Edward。

mx  x 代表 26 個小寫英文字母,這樣游標所在處就會被 mark。
`x 回到書籤原設定位置。
  • ` 是 backward quote,就是 Tab 鍵上面那一個。
'x  回到書籤設定行行首。
  • ' 是 forward quote,是 Enter 鍵隔壁那一個。
:marks  得知目前所有書籤的列表。

Monday, August 01, 2005

More company stuff

RRDtools: tms1.above.net.tw/home/tms
pserver1.above.net.tw/home/tms