星期六, 8月 22, 2009

Mac OSX Terminal 256 color

這篇基本上是參考 yzlin 的 The Tips of Setting Workstation Environment如果是 linux or FreeBSD ,用這份簡報就很足夠哩!
不想這麼快進入正題,為什麼要用出一個 256 color terminal? 我想很大部分的原因是為了舒適度,原本的 8 色或 16 色的功能大部分像是拿來 mark 說,這個字和其他字不太一樣,至少就我看起來,原本的 8 色或 16 色看起來並不是這麼舒服,而用 256 色的時候(我在 Windows 95 就是用 256 色耶 XD),我們有比較多的選擇可以讓自己的眼睛舒服些,那怕給一個 keyword 標定為藍色,也是有差別的

在 Mac OSX 底下要用 256 color terminal 的話,請愛用 iTerm, iTerm 原生支援 256 color ,但是開下去你會感受不到任何差異 XD,不過在這邊我想說一下,iTerm 的半透明效果不要開,開了會非常的 lag,不知道是 bug 還是程式本身的問題,之後在 .bash_profile 加入

export TERM=xterm-256color
重新登入後,還是看不到任何差異,當你打 ls 的時候,ls color 已經寫死了,通常做到這邊,在 linux 底下已經看的到 ls 不太一樣了 XD,所以我們要測試的是 grep ,這個時候,我們對某個檔案做 grep --color include xxx.c就會看到

terminal 基本設定到這邊完成了
VIM
VIM 原生支援 256 color,所以只要環境支援 256 色,再找到一個 256 色的 color 的 scheme 就可以動工了(推薦 yzlin 寫的 yzlin256.vim) 把抓好的 color scheme 放入 ~/.vim/colors/ 底下,然後在 ~/.vimrc 中設定
set syntax=enable
set t_Co=256
color yzlin256
全數搞定,不過詳細的顏色設定可能還要研究一下,在 VIM 出來的成果大概如同下圖

GNU Screen
2011/09/20: 在這個時間點,已經不用自行編譯 screen,安裝 homebrew-alt 之後再行安裝 screen (輸入 brew install [homebre-alt_dic/duplicate]/screen.rb) 即可。
Mac OSX 有原生編譯好的 screen,不過很可惜的就是 256 color syntax 並沒有開啟,如果原生支援的話,在 ~/.screenrc 中寫入
#terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I"
attrcolor i "+b"
# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
termcapinfo xterm-color "Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm"
不過由於原生不支援,所以我們得去GNU Screen抓回來自己編譯,而編譯的選項為(參考這裡)
./configure --enable-locale --enable-telnet --enable-colors256 --enable-rxvt_osc
然後當編譯雖有一堆警告(因為 Mac OSX 用的是 utmpx.h 而非 utmp.h) 的時候很快就發現了錯誤 XD
pty.c:38:26: error: sys/stropts.h: No such file or directory
這時候開啟這個檔案一看,我們看到的是 ...
/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
#ifdef HAVE_SVR4_PTYS
# include <sys/stropts.h>
#endif
我們用的應該不是 solaris ,所以移掉這幾行,編譯就可以完成了,之後執行我們自行編譯的 screen,我們應該能看到 ..(下圖的測試檔在此可以下載)

到此,iterm, vim, gnu screen 都有 256 色啦 !
如果有常看 man page 的需求,可以將下列設定寫入 ~/.bash_profile 中

# colorful man page
export PAGER="`which less` -s"
export BROWSER="$PAGER"
export LESS_TERMCAP_mb=$'\E[38;5;167m'
export LESS_TERMCAP_md=$'\E[38;5;39m'
export LESS_TERMCAP_me=$'\E[38;5;231m'
export LESS_TERMCAP_se=$'\E[38;5;231m'
export LESS_TERMCAP_so=$'\E[38;5;167m'
export LESS_TERMCAP_ue=$'\E[38;5;231m'
export LESS_TERMCAP_us=$'\E[38;5;167m'
而 man page 就有類似這樣子的效果出現,當然顏色可以自己慢慢調 XD

---
enjoy the environment. XD

勿忘此時

我們不會忘記

星期三, 8月 19, 2009

學習 VIM

其實標題很難下,所以我就隨興下了一個標題 XD。

要學 VIM 其實不難,網路上四處找的到文章,不過我推薦下列簡報,我也不想在此重寫一篇,因為我不會寫的比 c9s 和 yzlin 來的好 :)

c9s 提的移動方法讓我受惠良多,yzlin 學長(他大概不記得我是誰了 XD) 所提及的不光只是 VIM,還有其他相當多實用的技巧與方法,相當值得讓我這種菜鳥學習。

其實說到使用軟體的觀點,最難的一點就是「認定」,我所謂的「認定」就是你覺得它很好用,可以用很久很久,而且有長久的更新支援,並且足以在你工作平台上有著良好運作。對我而言,要認定任何一個軟體或程式語言都是非常困難的,不過我想就我會使用 VIM 的原因來說明。

基本操作
就基本操作而言,VIM 分成三種模式,基本上在 normal mode,能輸入的字元都有功能,也有人因此做了一張對應表,其實從 c9s 的 slide 可以得知,基本上我們可以用方向鍵 + Page Up/Down or 滑鼠滾輪,來移動至相對位置,但是我們可以利用 vim key mapping 來進行更快速的移動。真的能省下多少時間嗎? 其實不知道,但是對於整體操作的順暢度會有很大的提升,簡單來說,就是操作的很爽,這方面,真的會讓人離開不了 VIM XD。

驚人的設定彈性
其實這個部分我還在摸索,如果真的要能夠完整掌握 vim 特性,唯一建議是,跟官方文件直球對絕吧 :) (pdf 版 有 237頁 XD),一般的 text editor 能夠設定的其實有限,但是 vim 的彈性之高,真是讓我嘆為觀止,我真的很佩服設計 VIM 架構的人,光以 syntax color 而論,或許 syntax file 是很多,但是整個 syntax file setting 和 color setting 的組合實在是非常有趣,而且 synatax file 有疊加的概念,C 的 syntax file 寫完了,C++ 可以接著繼續寫,這點就真的超有趣,更不論你可以針對特定檔案做出特別設定,如果願意,把 vim 最佳化成特定 programming language text editor 也不是一件困難的事 XD。

plugin
老實說我不知道 vim 的 plugin 個數多不多(約 2700 個),有好有壞,c9s 和 yzlin 都有推薦,可以試試看,端看自己是用什麼 programming language ,就看情況裝吧 XD。


學習曲線
c9s 在 slide 中坦言 VIM 的學習曲線很高,我同意,但是我想補充的是,使用者是可以訓練的,如果一開始就訓練到某種程度而可以讓他之後做的事更為順利,我認為這樣子的訓練是有必要的,舉個例子來說,用注音輸入法可以打出字來,但是新酷音輸入法就有詞庫可以預先訓練,讓你打字更方便(此舉是程式被訓練),但是也可以學習嘸蝦米輸入法,讓自己輸入中文更為便利,其實那一種方法好,端看自己。VIM 或許在一開始是較難以入手沒有錯,不過我相信過了陣痛期之後,我相信會帶給比大部分的 text editor 有著更美好的體驗。

Text Editor vs. IDE ?
到底要用 text editor 好還是 IDE 好? 其實兩個一起用也不錯,我因為平台跳來跳去的關係,我現在只有用 VIM + Eclipse ,兩者的共通點就是,跨平台,都有 plugin 網站 XD,沒有什麼一定好壞的選擇,可以兩者結合嗎? 當然可以啊,不過我目前還是可以在 command line 底下完成啊,我就懶了,VIM 在編輯方面有所長,但是整個專案在 Eclipse 底下,使用 基本的 Refactoring 真的蠻方便的,VIM 做的到,只是我懶的找方法了 XD,也沒有必要過度神化或操死一個軟體,不同的狀況下用不同的軟體也不錯 XD。

真的要用 VIM 嗎 XD? 其實你還有 emacs,找到認為最適合自己的 text editor 就是一件很開心的事!


---
似乎寫的有點亂...Orz

星期日, 8月 16, 2009

c_snippets.vim/ cpp_snippets.vim 釋出

起初我在 在 Vim 上使用 Slippery Snippet ( Textmate-Like )看到可以藉由輸入少數的字來完成功能,覺得非常的好用,但是抓下來之後,看了其中的 c_snippets.vim 功能還蠻少的 (latex_snippets.vim 更少,只有三行 ...Orz),然後決定自己用苦工來改,所以我在這個檔案做的事,都只是苦工而己... 於是初步完成品如下

c_snippets.vim
cpp_snippets.vim

我會持續維護這個檔案,雖然是很想開一個 git 來做管理比較好,不過我目前還蠻懶的,還有就是,我想把 C++ 特有的語法移到類似 cpp_snippets.vim 這樣子的檔案去,這大概都是我下一步要做的吧,然後可能還要學一下 vim scripts,希望可以幫助到有在使用的人啦 XD

snippetsemu 在 Google Code 上有專案,所以我上傳了,不知道會得到怎麼樣的回應喔 XD


---
大概只有自己在用吧 XD。

出發

今天要出發前往 COSCUP 2009,不過我的 MacBook 沒有電池(送修中),ipod touch 放在學校,管他的,開心就好,打算去買件「你好,世界」(就是 "Hello World") 來穿啦,這句話不僅對 programmer,對 C/C++ 寫程式的人更是特別有感覺,衝啦衝啦 XD


---
昨天明明一點半睡 ...Orz

星期三, 8月 12, 2009

編輯環境

最近我在調 VIM 調的很開心,網路上文件眾多,官方文件也是相當的齊全。若要說 VIM 為什麼這麼吸引人,或許他的外掛精彩,或許可以完全客製化是重點,不過對我而言,那些很難上手的操作按鍵,但是上手後又相當直覺的操作法,才是吸引我的地方。

對於一般人而言,什麼是合手的文字編輯器? Microsoft Word 是一個很不錯的選擇(雖然它有著不錯的排版功能,但一般人還是把它當成 word processor 居多),LaTeX 是一個很好的編寫論文利器,雖然它的 Beamer 可以撰寫出相當良好的簡報,但是一般狀況下,我想大家還是寧願用 Apple Keynote, Microsoft PowerPoint 來製作簡報。每個軟體都有它的極限,都有好與不好之處,那麼我們又要怎麼尋找 XD?

來說說我所看見的 programmer 在編輯環境的狀況,在 Mac OSX 上利用 TextMate 來撰寫 Ruby (我在 Google Developer Day 看到有人用來寫 Python,也是快到爆炸XD),在 Mac OSX 上可以利用 TeXShop 來撰寫 LaTeX (在 Linux 上有 TeXMaker ,不過我沒用過 XD),我認識的一位朋友愛用 PSPad 寫程式,為了這隻程式,在 linux 上還利用了 wine 灌起來編輯。Eclipse 除了它本身很肥以外,其實是對很多程式語言都是一良好的解決方案,Java, C/C++, Python, balala,Google 發展的 API 也幾乎都是以 Eclipse 為平台做為發展。每個人都有自己的邏輯,我的老師 ycma 就是用 KWrite + 檔案瀏灠器在寫程式的,KDE 裡面有很多方便程式撰寫工具,我覺得這也很棒啊。在 wiki 上,甚至有 text editor 的比較,可見,大家都在努力尋找適合自己的環境,而且這件事顯的相當重要!

一般的狀況我們不提,我好久沒有用 Word 和 PowerPoint 了 XD,我想講的是,身為一個寫程式的人,我們要怎麼找到適合自己的環境 XD? 這是我目前使用的編輯器列表

  • VIM - C, C++, LaTeX, Python, PHP ... etc
  • Eclipse - Java, C++
  • TeXShop - LaTeX
  • Visual Studio - C# (這行很明顯是來亂的,大學專題過後,我幾乎不用 .net 開發程式 XD)

基本上只要是未知的環境,我都習慣用 VIM,而 Java 堅持用 Eclipse,其他倒也還好,我沒有固定用一個文字編輯器的偏好,不然我應該會想辦法把 Eclipse 接到 VIM 上(我知道網路上找到的這種軟體,但是我不打算這樣子做,太瘋狂了 XD),我沒有用過 emacs ,但是這套軟體也是有很多死忠粉絲的 XD。

離題了,那麼什麼是對自己而言最適合的程式撰寫環境? 我不知道,每個人都有自己的需求,而你找到你認為理想的編輯環境了嗎 ?

---
寫完完全不知道自己在寫什麼 XD

星期二, 8月 11, 2009

vim on Mac OSX

在我寫 vim 的 blog 時,我覺得我在 VIM 上裝了太多東西(其實也沒多少啦),但是同樣的設定在 Cent OS 5.3 上卻跑的很順,觀察了一下 Cent OS 5.3 compile vim 的 option 是 -O2,而在 Apple gcc 上是 -O ,我就自己抓了 source code 自行重新編譯然後安裝,果然在 Mac OSX 上也可以跑的很順了 XD。

command 如下:

./configure --enable-gui=no --with-x=no --enable-multibyte
make CC=gcc-4.2 CFLAGS=-O2

其實這只是一個範例,我不想裝 gvim (其實也裝不起來),也不想開一個 vim 就要開一個 x11,我試過 O3 ,不過反而比較慢,所以就可以試試這樣子的編譯選項

若在使用 vim 時,backspace 失效,在 ~/.vimrc 加上

set backspace=indent,eol,start

即可解決。


---
別人在編 Firefox,我在編 vim XD


如果有用 MacPorts 安裝 gcc4.4(要裝很久),也可以試試這樣子的指令
make CC=/opt/local/bin/gcc-mp-4.4 CFLAGS=-O2

Firefox 3.5

我在 Mac OSX 上一直都是用 Firefox ,從買 MacBook 以來就沒有變過。我試用過 Safari,真的順又快很多,但是使用習慣不同,所以也不是很經常使用。

但是從 Firefox 升級到 3.1 之後,我的Firefox 就無法關掉,按 cmd + Q 之後,最常出現的是 "應用程式沒有回應" ... 什麼鬼(翻桌),經過多次測試之後,第一次是發現我用的 Theme 相衝 (iFox),移掉用別的 theme 就沒事了。第二次是 plugin 相衝 (Tab Mix Plus, ... etc) ,移掉就沒事了,這一次,不管怎麼移都不管用,我把歷史記錄全部清掉就沒事了 ... (然後發現,Tab Mix Plus 裝回去也不會當掉了 Orz)

其實我還蠻好奇,這只是個案,還是其他人也是這樣?


---
每天都要測試不同的當掉原因 ...Orz

星期一, 8月 03, 2009

記錄





今天看到 yzlin 學長的 vim slides,照著裡面稍微修改了一下,有空會繼續改,不過我對目前的成果非常的滿意 XD

Mac OSX 10.5 Terminal.app 不支援 256 color,所以我稍微再對 vim 修改一下,然後使用 iTerm 取代 Terminal.app


---
等全部完成後,來做個筆記 XD。

記錄


難得會有這麼忙碌的暑假,紀念一下


---
誰叫我沒事突然跑去修三學分的生物資訊課程 XD

星期六, 8月 01, 2009

感觸

看到 Josh Ko 寫的標籤,感觸很多...

我是長庚大學的學生,很多人聽到我說這個校名,大家就會問我說,你是醫學院的嗎? 我說我是資工系的 XDXD 這其實是一個小事 XD 也有人聽到我是資工系的就會問我說,你會不會修電腦,我是會修電腦,不過似乎跟我進來這個系沒有太大的關係 XDXD

好啦,搞笑結束。其實沒有 Josh Ko 之後,自己一個人在學校學習與研究,是頗寂寞的,雖然我一直沒有聽他的話把 Haskell 學好,我也沒有走 programming language 這條路,但是我一直覺得和 Josh Ko 相處很開心,我常常嫌他給我一些很白爛的建議,我們兩個常常聊的很開心,縱使對於事情的認知相差很多。他提及說,沒有誘因留在台北了,那麼我也會思考,現在的我,還有什麼誘因讓我留下來 XD? 留在這個地方,想法真的很簡單,讓自己能夠符合某個強度之上的訓練,朝下一個目標前進,其他的事對我而言,已經不是這麼重要了。

我不是什麼一般人認為的名校畢業的,所以我沒什麼負擔,大家看到我認為我是一個混吃等死的大學生(我想我也蠻符合這個描述),也因為如此,我可以更集中精神的朝一個目標完成。不可否認的是,這個暑假一個月過了下來,讓我有越來越像一個人的感覺了。

也好,是時候不要成為別人的負擔了,也不要成為這個社會的負擔了。


---
有感

星期三, 7月 29, 2009

最近

Blog title 想改成 A woman in wind gray 不知道大家覺得怎麼樣 XD?

稍微解釋一下,為什麼我明明是男的,卻選擇用一個女性做為 symbol ? 因為我還蠻喜歡柔性的事物,雖然這跟我本人極不相稱 XD,那麼這圖女性的身材相當的好,呃,這不是我可以控制的,可能要問畫這張圖的本人比較好 XD 原本的圖比較好? 這也是有可能的,原本的圖是專家級畫的,不過我覺得這張圖會不錯,應該看久會習慣吧 XD

沒事就在看 Modern C++ Design,雖然就目標上我應該要好好的看 Computer Architecture 的 parallel 部分(這可能分成 mutli-cores, pipeline and superscalar),不過暫時不管他 XD 不過看到現在,我更想學會 Haskell 和 JavaScript 了 XD。

但是不得不說,Modern C++ Design 看到現在覺得相當的精采,可以在 compile time 做到這一堆事,我想等看到告一段落再來說好了。

ycma 都鼓勵我們直接跟上千頁的手冊對幹,就跟 wyshieh 說的投球就要用直球對決一樣,我只能說我現在能力不是很足,看著手冊總是要靠著 Google 到另外的一些教學文件輔助才能看懂一些我想要的東西,看來自己閱讀文件的能力不足,得要繼續努力。

看著 fire7617 有一點感觸,因為他每天都用 Fedora ,結果他用 linux 人真的比很多號稱會的人來的好,之前曾經聽到過,有人在 ubuntu x86-64 上嘗試灌 LAMP,但是 LAMP 好像沒有 x86-64 版本,所以硬是開了相容模式灌了 x86 的 LAMP,我還蠻訝異的,有這麼困難嗎 XD? 我在 Cent OS x86-64 裝 wiki 一堆錯誤還是撐過來了啊 XD 不過我不會 NFS 之類的,我覺得我現在還是不太會灌伺服器就是了。


---
一堆雜感。

星期五, 7月 24, 2009

A woman in wind gray


不是說原本的圖不好,而是沒有版權也不知道是誰,snake 就畫了一張新圖送我,非常感謝她,以後有顯示圖片的地方大概都會用這張圖了。


---
A woman in wind gray.

LaTeX Insert Code - lslisting package

最近剛好有在文件中插入程式碼的需要,使用 lslisting package 讓自己比較好工作,但是原本的 sylte 不甚喜歡,所以稍做調整,範例如下


\begin{lstlisting}[title={hello.cpp},
frameround=tfff,
columns=fullflexible,
numberstyle=\tiny,
stepnumber=5,
frame=single,
basicstyle={\ttfamily \small},
numbers=left,
commentstyle={\sffamily},
language=c++]
#include <iostream>
int main(int argc, char** argv){
std::cout << "Hello World" << std::endl; // print ``Hello World''
}
\end{lstlisting}

出來的結果為 ...

其實我只是想做個筆記,如果有其他的設定也跟我說,總覺得我設定的不是很好。


---
做個筆記 XD。

星期二, 7月 21, 2009

或許

或許,我一直都在摸索怎麼當情人的方式,對於她而言,我不是一個足夠好的男友吧。


---
想一想,真的沒有什麼是好的了

星期一, 7月 20, 2009

beamer template 釋出



原始碼在這裡 (beamer_template.tex)

這是參考 Josh Ko 的 Oxford Color Theme 改的,我原本也想釋出 Oxford Color Theme,不過他人當替代役去了,我想還是等他本人同意再說比較好。

預設的 outer theme 是我相當喜歡的 minipages ,效果如上圖。就原始的 theme 來說,都是做細微的調整,例如說加深顏色對比之類的,比較大的修改都是沿用 Josh Ko 而來,所以還是相當感謝他。

在最後加了一個獻醜的指令,\bigtitles ,能夠更快速的插入大標題與小標題,會做這個功能的原因是我還蠻常用到的。

排版部分,簡報字體使用的是華康黑體W5,而文件使用的是華康明體 W5,預設是使用 \chf{} 才能使用中文,對我影響不大,因為我用中文的機會比較少,也不是不能說把中文字體設為主要的字體,但是,這樣子 Computer Modern Fonts 就會消失了(取而代之的是中文字體裡面的英文字體 ... Orz),所以才會採取這樣子的折衷方法。

雖不能做到盡善盡美,不過我想我會用這樣子的設定用很久很久 XD。


---
不知道會不會有人用 XD。

星期三, 7月 15, 2009

最近

其實沒什麼可以寫的,但是又很想寫些什麼。

很想寫些長文章,但是沒有心思也沒有時間,所以大概只能這樣子渡渡混日子,然後希望自己不要變成廢物,希望明天該死的考試結束之後,我能夠寫一連串有關硬體的相關文字,當作是自己的一個學習筆記,常常覺得自己在越級打怪就是了,希望這一切可以趕快過去也趕快平靜。


---
雜記

星期三, 7月 08, 2009

名詞潮流

昨天有人跟我提 "執行力" 這個名詞,我覺得蠻感興趣的,因為我最近這一陣子還蠻常聽到這個名詞的,於是我無聊就 Google 了一下,沒有猜錯,是天下/ 商週的產物。老實說,我很久沒有看這種雜誌了,我也不是很喜歡看商週,但是對於這本雜誌所帶動的名詞潮流我倒是有點興趣。從 人脈、AQ、紫牛、藍海(還是紅海 XD?)、M型社會、執行力,這些名詞的流行,大概都跟這兩本雜誌脫離不了關係,而這些名詞的後面通常是一本書。其實我比較喜歡看的的是 "第三種猩猩", "槍炮、細菌與鋼鐵" 說 XD。

這些名詞的好與不好我不太會去評論,不過我知道的是,不管這些名詞有沒有被提出來,這些名詞所帶來的背後事實是早就存在了(說事實的原因是,有些是為了創造名詞而扭曲事實,這邊有個例子。),那麼為什麼這些名詞仍會流行 XD?

後來我在 Evil Capitalism Heroes中的 龐克扮高深(revised) 看到了如下文字:

市場經濟最迷人的地方就是
你要什麼
市場就會賣你什麼?
你要扮高深
市場就會賣你扮高深
你要義和團
市場就會賣你義和團

我不知道拿這一段話來解釋名詞潮流合不合適,但是這就是我所認為的答案。其實我說這種事並不是這麼好,因為我還在努力的尋找我的中心思維,一個沒有中心思維以及足夠強的訓練,是很容易在辯證式思考中造成自我混亂,不過仍然得依靠自我訓練以及辯證來達成目的,方法是不是對的,至今仍在摸索中。

那麼我現在到底要怎麼閱讀,我會選擇閱讀經典(但這些經典是怎麼判定的,仍有待商確),不斷的論證吧,至少就我的觀點而言,我只是一個會看著螢幕科科笑的阿宅,我不太需要趕市場的流行 XD 安靜的研究與思考就可以了。


---
繼續努力。

漫談 String Processing

String Processing 方法其實不少,剛好最近有學到,寫出來筆記一下。

C 的 string 其實是 char* 這點是非常顯而易見,若要說為什麼,不在這裡的討論範圍內,不過 C 的 string processing 幾乎是我所認為的基礎,就我所遇到的 programming language ,至少都有 C String library 所提供的功能(當然,大部分來的更多),所以要認識 function 背後所帶來的成本,學 C Standard Library 是一個不錯的選擇。

一般常見的處理方法如下:

  • naive method:
    我想這沒有什麼好解釋的 ... XD
  • Use library provided by programming language:
    其實以 Java, Python 而言,sting's function 可以解決大部分的常見問題,C++ 也可以,只是在操作上沒有這麼直覺(C++ Boost string algo 提供了不少好東西,也可以參考。)。
  • Consider a string as input/ output:
    • C: sscanf/ sprintf
    • C++: istringstream/ ostringstream
    • Java: StringReader/ StringWriter
    • 簡單的來說,就跟操作 scanf 一樣,所以 scanf 有的優點這個方法都有,缺點亦然,但是對於單一格式的字串處理,如果要轉換成 int, double 之類的,算是比較快速的一個選擇。
  • Regular Expression:
    C, C++, Java, Python 皆有相對應的 library 可供使用,這一招的用途非常的廣,通常也接近最後一招了,不過還是有死角,不建議使用 Regular Expression 在 XML 類的文件上。
  • Parser:
    通常就會針對特定文件了,例如說就有 XML parser, HTML paerser,使用這類的 parser 來處理相關格式會有事半功倍的效果。
目前想到的方法大概為這些,做個筆記,歡迎指正或補完哩。


---
想起來很多,寫起來很少 XD

星期二, 7月 07, 2009

vimrc

突然想到自己的 .vimrc 雖然不怎麼值錢,但是不見了也很麻煩,所以備份一下好了。


syntax enable 
set number

""" set encoding to UTF-8
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,big5,euc-jp,gbk,euc-kr,utf-bom,iso8859-1
set termencoding=utf-8
set ambiwidth=double

""" set color scheme
set background=dark
set t_Co=256
color yen3

set title
set showmode            " Show current input mode in status line
set cursorline         " Show Cursor Line in Underline
"set showtabline=2
set wildmenu " Show autocomplete menus.
set visualbell

""" enable mouse
set mouse=a
set ttymouse=xterm
set mousemodel=extend

""" Search Setting
set showcmd
set incsearch
set showmatch

set hls

""" Backup Setting
set backup
set backupdir=$HOME/.vim/backup

""" set status bar
set laststatus=2
set statusline=%4*%<\ %1*[%F]
set statusline+=%4*\ %5*[%{&encoding}, " encoding
set statusline+=%{&fileformat}]%m " file format
set statusline+=%4*%=\ %6*%y%4*\ %3*%l%4*,\ %3*%c%4*\ \<\ %2*%P%4*\ \>
highlight User1 ctermfg=red
highlight User2 term=underline cterm=underline ctermfg=green
highlight User3 term=underline cterm=underline ctermfg=yellow
highlight User4 term=underline cterm=underline ctermfg=white
highlight User5 ctermfg=cyan
highlight User6 ctermfg=white

""" set folding
set foldnestmax=3
"set foldmethod=syntax
"set foldcolumn=4

""" Set editing Tab
set autoindent
set expandtab
set shiftwidth=4
set softtabstop=8
set tabstop=4
set smarttab
set backspace=indent,eol,start 

""" set help doc
helptags $HOME/.vim/doc 

filetype on
filetype plugin on

""" Key Mapping
nnoremap <silent> <f2> :NERDTree<cr>
nnoremap <silent> <f3> :TlistToggle<cr>
nnoremap <silent> <f6> :set foldmethod=syntax<cr>
nnoremap <silent> <f7> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<cr>

nmap cr=    $F=lcf;
nmap cl=    $F=hc^

nmap <LEADER>tc :tabnew<CR>
nmap <LEADER>te :tabedit<SPACE>
nmap <LEADER>tm :tabmove<SPACE>
nmap <LEADER>tk :tabclose<CR>
nmap <C-H> :tabprev<CR>
nmap <C-L> :tabnext<CR>

""" 讓我們可以使用 tab 來縮排
nmap <tab> v>
nmap <s-tab> v<
vmap <tab> >gv
vmap <s-tab> <gv

""" let command mode has bash key binding
cmap <c-a> <home>
cmap <c-e> <end>
cnoremap <c-b> <left>
cnoremap <c-d> <del>
cnoremap <c-f> <right>
cnoremap <c-n> <down>
cnoremap <c-p> <up>
cnoremap <esc><c-b> <s-left>
cnoremap <esc><c-f> <s-right>

""" Source Code Formating
let OmniCpp_MayCompleteScope = 1
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" automatically open and close the popup menu / preview window
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest,preview


""" Tab setting
autocmd TabLeave * let g:LastUsedTabPage = tabpagenr()
function! SwitchLastUsedTab()
    if exists("g:LastUsedTabPage")
        execute "tabnext " g:LastUsedTabPage
    endif
endfunction
nmap tt :call SwitchLastUsedTab()<CR>

""" Auto remove each line-end space 
autocmd FileType c,cpp,java,php,perl,python,ruby,sh,v autocmd BufWritePre  :call setline(1,map(getline(1,"$"),'substitute(v:val,"\\s\\+$","","")'))


com! -bang -nargs=? QFix cal QFixToggle(<bang>0)
fu! QFixToggle(forced)
    if exists("g:qfix_win") && a:forced == 0
        cclose
        unlet g:qfix_win
    else
        copen 10
        let g:qfix_win = bufnr("$")
        en
    endf
nn <leader>m :make<cr>
nn <leader>q :QFix<cr>

nmap <C-c><C-c> :!g++ -g -Wall % -o %:r.out<CR>

---
也可以當成參考 XD