2011年10月31日 星期一

用 vim 把一堆程式碼轉成 html 檔案

前陣子剛好跟學弟聊天聊到一些事情,他提到他想把他之前寫的 code 轉成 html.....呃...雖然我不太清楚為什麼要這樣做啦...可能是為了列印之類的....不過這個我不太 care...身為一個資工人,這種事當然要自動化!我只是想知道該怎麼做到而已XD

這位學弟也玩 Linux,但他說他試過寫 script 卻沒辦法成功,說是檔名有空白就會被分成兩個檔名,會找不到。這怎麼可能呢!所以當下就試試看....
$ mkdir test
$ cd test
$ touch a\ 1 a\ 2 a\ 3
$ find . -exec echo {} \;
這當然是沒問題的啊!每個檔名都自成一行 :D

好了....問題解決一半。不過如果這樣的話就不會想寫文章了...主要是因為當天腦袋卡住,竟然沒辦法用 vim 轉換出他要的 html 檔案....|||

先提一下 vim 的 :TOhtml 好了,這東西可以把現在的 syntax highlight 轉換成 html,很酷的小功能說~但當天不曉得為什麼,明明知道應該用 find -exec 配合 vim -c 去做,但檔名就一直不知道該怎麼下.......orz 學弟的需求是這樣:code 放在 a 目錄,輸出的 html 要放在 b 目錄,然後 script 跟 a, b 放在同一層目錄....大概是這樣子:p

後來回家後,還查了我根本不懂的 vim register 跟 variable 的用法,搞老半天,最後發現答案很簡單= =a,只要 truncate 檔名就好了啊......如下所示:
$ find a -exec vim {} -c "TOhtml" -c "w b/%:t" -c "wqa\!" \;
重點就在那個「%:t」啊....花了我好多時間。那個 :t 在 vim 裡面稱為 file name modifier,可以取出一個檔案的「檔名部分」(也就是不包含他所在位置的路徑),其他還有相當多種的 modifier,像是 :r, :h, :p 等等,可在 vim 中 :help filename-modifiers 查詢說明。