2009年3月14日 星期六

Vim::Snippet::Converter

之前寫了一個用來產生 SnippetEmu Vim Plugin 樣板的模組 ( Vim::Snippet::Converter ) (其實有好一陣子了)。不過還是順便來 Blog 廣告一下。

Vim::Snippet::Converter 模組提供了 scc 的 perl script 能將你寫好的 Readable Template 轉成 SnippetEmu 可讀的 vim script,以便讓開發者能夠有效的建立各種語言的 Code Snippet,如 c , c++ , java , perl , ruby .. etc.

安裝 Vim::Snippet::Converter 模組:

sudo cpanp i Vim::Snippet::Converter

或者

sudo cpan Vim::Snippet::Converter

若是從 cpan 上下載:

tar xvf Vim-Snippet-Converter.tar.gz
cd Vim-Snippet-Converter
perl Makefile.PL
sudo make install

Template 的寫法如下:
   
;sub
sub <<function>> ( <<prototype>> ) {
my <<>> = <<>>;
return <<returnvalue>>;
}
;end
由角括號包起來的稱為 PlaceHolder ,也就是每一次按下 Tab 後游標駐足的地方。
;sub 為這個樣板 (Template) 的觸發字串 (Trigger),;end 則代表這個樣板的宣告結束。

寫好之後,使用 scc script 將之轉換並安裝到 vim filetype plugin 所在的目錄。

譬如說

scc -s perl_m.snt -i ~/.vim/after/ftplugin/perl/module.vim

放在 after 裡面主要是因為當 snippetEmu plugin 載入完成之後接著會去載入 after 裡面的 script.

-s 用來指定來源檔案的路徑。

-i 用來將轉換過的 Template 安裝至檔案,如果之前已經有安裝過 (透過樣板來源的檔名辨識),便會自動取代原本的部份。若檔案尚未建立,scc 會自動為你建立。如果不加上 -i 參數,則會將轉換的結果列印至一般輸出 (STDOUT)。 透過 -i 參數,你可以將來自各不同檔案的 Template 裝至同一檔案而不會複寫其他的 Template。