Perl planet

February 27, 2010

Cornelius

為何要使用 CPANMinus

因為原本的 CPAN Shell 啟動時間慢,累贅的資訊太多,太多 Prompt,且對新手來說,太多預設設定要做,但新手只是需要儘快準備一個完整的開發環境來寫 Perl 程式碼而已!然而 CPAN Shell 由於太古老,該程式碼已經相當難維護、整理,所以一直沒有良好的修正。更別說是 CPANPLUS ,CPANPLUS 本身又相依於一堆模組,簡直是疊床架屋,對新手來說,安裝好 CPANPLUS 甚至要花上 10 分鐘!&lt;br /&gt;&lt;br /&gt;所以 Miyagawa 寫了 cpanminus ,這個模組 CPAN Shell 啟動時間相當的快,而且不相依於其他累贅的模組如 Moose... :-P&lt;br /&gt;&lt;br /&gt;cpanminus 只需要你有一個 C Compiler, Module::Build , ExtUtils::MakeMaker (Perl 都內建了), 甚至直接內嵌了 HTTP::LIte 模組。&lt;br /&gt;&lt;br /&gt;所以安裝 cpanminus 根本不需要花上超過 3 秒的時間!想想看你在升級 CPAN 或是 CPANPLUS 的時候多麼痛苦!!&lt;br /&gt;&lt;br /&gt;再來,常有使用者提出若無 root 權限,該如何安裝 CPAN 模組,這個問題一直是長期以來困擾大家的!而且又無完善解法。&lt;br /&gt;&lt;br /&gt;只要以非 Root 使用者執行 cpanm 安裝模組,該模組自動會裝到 home 目錄底下 ~/perl5 ,也不需另外自行設定!&lt;br /&gt;&lt;br /&gt;安裝方式相當簡單:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cd ~/bin&lt;br /&gt;wget http://xrl.us/cpanm&lt;br /&gt;chmod +x cpanm&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;這樣就可以了,因為 cpanm 只是一個單一的執行檔!&lt;br /&gt;&lt;br /&gt;使用方式:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cpanm Module&lt;br /&gt;cpanm MIYAGAWA/Plack-1.0000.tar.gz&lt;br /&gt;cpanm ~/mydists/MyCompany-Framework-1.0.tar.gz&lt;br /&gt;cpanm http://example.com/MyModule-0.1.tar.gz&lt;br /&gt;cpanm http://github.com/miyagawa/Tatsumaki/tarball/master&lt;br /&gt;cpanm --interactive Task::Kensho&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;你也可以到 github 上取得最新的版本! @miyagawa ROCKS!!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/miyagawa/cpanminus"&gt;http://github.com/miyagawa/cpanminus&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-9135984168769970652?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at February 27, 2010 03:00 PM

January 31, 2010

Cornelius

hypergit.vim (A Git plugin for vim)

最近的作品 - &lt;a href="http://github.com/c9s/hypergit.vim"&gt;hypergit.vim&lt;/a&gt;。先前的 fastgit.vim 經過一些思考後,打掉重寫了,新增的 GitMenu 讓原本越來越的 Command 得以有組織性的以樹狀選單呈現,更 Powerful。&lt;div&gt;&lt;br /&gt;&lt;div&gt;正為了要有一個樹狀選單,所以晚上以 VimL 實做了 Helper Message Class 以及 TreeMenu Class ,以方便其他各種 Plugin 需要用時重用。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;該 Git Menu 可自動 Parse Remote 名稱 、Branch 名稱以產生 TreeMenu ,以及各 Menu Node 都可像 Nerd Tree Plugin 一般延展、收和,或執行。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以下是 Screenshot:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i3PNCkrh-3k/S2Xa-Od8j4I/AAAAAAAAJLE/EK7WbuvNgIQ/s1600-h/Screen+shot+2010-02-01+at+2.51.53+AM.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 199px;" src="http://4.bp.blogspot.com/_i3PNCkrh-3k/S2Xa-Od8j4I/AAAAAAAAJLE/EK7WbuvNgIQ/s320/Screen+shot+2010-02-01+at+2.51.53+AM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5432989288062816130" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, It's still under development.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-3714030554910667469?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at January 31, 2010 08:00 PM

January 24, 2010

Cornelius

Vim - Making your script auto-installable

Once you write a plugin , you will need it to be auto-installable. &lt;a href="http://github.com/c9s/vimana"&gt;Vimana&lt;/a&gt; is a script manager , which parses script files, and looks for a "script type:" tag to install the script.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example , if you have script , which is a ftplugin , then you should write:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;script src="http://gist.github.com/291385.js?file=ann.vim"&gt;&lt;/script&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;in your script file. cases is ignored.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;then the plugin could be installed via Vimana script manager.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Or if you have multiple file to install , you can put your script files in this kind of directory structure:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;plugin/script.vim&lt;/div&gt;&lt;div&gt;ftplugin/script.vim&lt;/div&gt;&lt;div&gt;doc/script.txt&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;then tar it and upload to vim.org site , the plugin could be installed via Vimana too.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-1372556132410632844?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at January 24, 2010 03:00 PM

Vimana - new feature.

Vimana 的移除功能總算是找時間弄好了,兩個新的 Feature:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Customizable Runtime Path:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ vimana install [plugin] --runtime-path [path]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;可以指定要安裝的 Runtime Path , 可在 .vimrc 內加上 set runtimepath+=[your/path] 。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. To uninstall Plugin:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ vimana remove [plugin] &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;即可移除安裝&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;或者強迫移除安裝:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ vimana remove [plugin] --force&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;基本上 Installation 的 Record 都是以 JSON 格式置放在 ~/.vim/record 內,所以若有其他的 implementation 也可以很輕易的讀取,VimL 則可以直接 eval 該 record 來取得資料。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-2952210460665390079?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at January 24, 2010 02:00 PM

January 14, 2010

Cornelius

Vim - [[ and ]]

一般來說 [[ , ]] 預設可在 c , java 裡頭跳躍函式,不過沒有 support Perl code , 所以為了方便在 Perl 裡頭的函式跳躍,我寫了這樣的 search mapping:&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;script src="http://gist.github.com/276972.js?file=perlsub.vim"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;如此就可以在 sub 函式間跳躍,如果使用 Moose 的 method ,可自己將 'method' 加上。&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-9151588543776896975?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at January 14, 2010 08:00 AM

December 29, 2009

Cornelius

Pango Font Metrics (Text Extents)

Pango 裡頭的 text_extents 意義與 Cairo 的 text_extents 不太一樣。在 Pango 裡頭取得的 text extents 會有 ink 以及 logical 兩種, ink 是指包含文字的最小範圍,logical 則是整個文字 (由 baseline 往上到該 font 的 ascent 以及往下到該 font 的 descent 的範圍)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;因此可以先取得 baseline ,接著由 logical 或 ink 換算出不一樣的 ascent 與 descent 。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;範例如下:&lt;/div&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/265197.js?file=pango-extents.pl"&gt;&lt;/script&gt;&lt;br /&gt;&lt;div&gt;繪製成圖就很容易理解了:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i3PNCkrh-3k/SznkvUZ_KcI/AAAAAAAAJHM/vNHkiFscjWs/s1600-h/pango.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_i3PNCkrh-3k/SznkvUZ_KcI/AAAAAAAAJHM/vNHkiFscjWs/s400/pango.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5420615128099793346" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-8876290418687080864?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at December 29, 2009 12:00 PM

December 28, 2009

Cornelius

Vim - Pod Helper Mapping

I have some pod helper mappings:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;script src="http://gist.github.com/264660.js?file=pod-helper.vim"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-4785178481483755499?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at December 28, 2009 02:00 PM

December 14, 2009

Cornelius

Vimana (中文)

&lt;a href="http://github.com/c9s/Vimana"&gt;Vimana&lt;/a&gt; 現在支援了 Makefile 以及 Rakefile 的安裝,您只需要在 Makefile 或 Rakefile 內提供 install 的規則 (Rule) 即可。 大部分在 github 上的 vim script 專案都提供了 Rakefile 或是 Makefile 所以都可以輕易的安裝好。&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;如果未提供 Makefile 或是 Rakefile ,那麼也可以使用 Vim Meta file 來做安裝。再不然可幫你偵測目錄結構,若是符合 Vim Runtime Path 的結構,那麼安裝就可成功。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;另外花了一些時間將相依的模組減少,讓相依性模組的安裝不會如此痛苦。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;我也新增了針對 vim.org 提供的類型資訊的 leak 可以剖析 script 內容來了解 script 類型,目前支援 colorscheme , compiler, indent , syntax 等等的類型偵測。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;測試過的套件如下:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;$ vimana install the-nerd-tree&lt;br /&gt;$ vimana install autocomplpop&lt;br /&gt;$ vimaan install gsession.vim&lt;br /&gt;$ vimana install snipmate&lt;br /&gt;$ vimana i svg.vim&lt;br /&gt;$ vimana i railscasts-theme&lt;br /&gt;$ vimana i dark-ruby&lt;br /&gt;$ vimana i bufexplorer.zip&lt;br /&gt;$ vimana i xml.vim&lt;br /&gt;&lt;br /&gt;well, i still need more test cases. ;-)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-8120894983645125218?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at December 14, 2009 10:00 AM

Vimana

&lt;a href="http://github.com/c9s/Vimana"&gt;Vimana&lt;/a&gt; supports for Makefile and Rakefile now. most vim script projects on github have its own rakefile or makefile, so that if a archive file (tar, tar.gz, zip) contains a makefile, rakefile or vim meta file. Vimana would use makefile/rakefile or meta file as its installer strategy.&lt;br /&gt;&lt;br /&gt;and I tried to reduce some dependencies, so that installation won't be such pain.&lt;br /&gt;&lt;br /&gt;I also added script inspecting feature, which inspects the script code to decide where to installer. colorscheme, compiler ,indent types are supported.&lt;br /&gt;&lt;br /&gt;current tested cases:&lt;br /&gt;&lt;br /&gt;$ vimana install the-nerd-tree&lt;br /&gt;$ vimana install autocomplpop&lt;br /&gt;$ vimaan install gsession.vim&lt;br /&gt;$ vimana install snipmate&lt;br /&gt;$ vimana i svg.vim&lt;br /&gt;$ vimana i railscasts-theme&lt;br /&gt;$ vimana i dark-ruby&lt;br /&gt;$ vimana i bufexplorer.zip&lt;br /&gt;$ vimana i xml.vim&lt;br /&gt;&lt;br /&gt;well, i still need more test cases. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-7616249022412005172?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at December 14, 2009 10:00 AM

November 28, 2009

Cornelius

Twitter Stream

最近幾個月 Perl 社群最流行的就是 AnyEvent 的相關應用,Twitter 也不例外,利用這個 &lt;a href="http://search.cpan.org/~reds/Net-Twitter-Stream-0.21/"&gt;Net::Twitter::Stream&lt;/a&gt; 模組,可以即時取得最新的 Tweets,你可以設定你想要過濾的關鍵字,以下是範例:&lt;br /&gt;&lt;script src="http://gist.github.com/244574.js?file=net-twitter-stream.pl"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;想玩的人可以直接 copy 下來把 $user 以及 $pass 改掉就可以用了。 :P Perl 真的相當適合懶人呀,由此可知我就是個懶人。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-5134821395936527023?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at November 28, 2009 06:00 PM

November 26, 2009

Cornelius

perl-completion.vim now supports simple context completion.

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i3PNCkrh-3k/Sw5RmXb9VbI/AAAAAAAAJFs/BDWfBac1u_E/s1600/Screen+shot+2009-11-26+at+4.00.13+PM.png"&gt;&lt;img style="cursor:pointer; cursor:hand; float:left; width: 378px; height: 244px;" src="http://3.bp.blogspot.com/_i3PNCkrh-3k/Sw5RmXb9VbI/AAAAAAAAJFs/BDWfBac1u_E/s400/Screen+shot+2009-11-26+at+4.00.13+PM.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5408349922086704562" /&gt;&lt;/a&gt; Perl completion vim plugin now supports simple context completion. you can now declare a object variable that simply returned from a 'new' constructor of class.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It can't work out for variables that have the same name. it's not very smart but enough for scripting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think "Padre" has some good stuff i could borrow from.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.vim.org/scripts/script.php?script_id=2852"&gt;perl-completion.vim on vim.org&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://github.com/c9s/perl-completion.vim"&gt;perl-completion.vim on github.com&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-1776260622836999169?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at November 26, 2009 11:00 AM

November 24, 2009

Cornelius

Using Shipwright to build VIM::Packager bundle package

&lt;a href="http://search.cpan.org/dist/Shipwright/"&gt;Shipwright&lt;/a&gt; is a good utility for solving CPAN dependency problem (not hell anymore) . all dependencies could be bundled together.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;this is how i build &lt;a href="http://search.cpan.org/dist/VIM-Packager/"&gt;VIM::Packager&lt;/a&gt; bundle package with shipwright:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;script src="http://gist.github.com/242054.js?file=build_shipwright.sh"&gt;&lt;/script&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;so the installation of VIM::Packager bundle binary could be:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ perl vim-packager-bundle.bin &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Basically , Shipwright module creates a repository to import other cpan modules into the same space. the repository could be SVN , GIT ... etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At the end, we checkout the repository , and execute shipwright utility to build module installer. (vim-pacakger-bundle.bin)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style=" white-space: pre; font-family:helvetica, arial, freesans, sans-serif;font-size:14px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-2790246398606745451?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at November 24, 2009 06:00 PM

November 19, 2009

Cornelius

VIM::Packager 使用

Vim script 有時候是非常煩人的東西,因為你每次都需要把他們一一複製到你的 VIM Runtime Path 裡頭 (通常為 `~/.vim`):&lt;br /&gt;&lt;br /&gt;所以假設現在要安裝 cpan.vim 這個套件,那麼就得這樣做:&lt;br /&gt;&lt;br /&gt;# go to libperl.vim page , download the libperl.vim file&lt;br /&gt;# copy libperl.vim to ~/.vim/autoload/&lt;br /&gt;&lt;br /&gt;# go to search-window.vim page , download the search-window.vim file&lt;br /&gt;# copy search-window.vim to ~/.vim/autoload/&lt;br /&gt;&lt;br /&gt;# download cpan.vim&lt;br /&gt;# copy cpan.vim to ~/.vim/plugin/&lt;br /&gt;&lt;br /&gt;# config .vimrc to usage cpan.vim&lt;br /&gt;&lt;br /&gt;以上這些都還不是小問題,問題是 vim script 裡頭並不是每個檔案都標記了版本資訊,所以有時候換上了新版的 plugin ,可能導致其他東西爛掉。&lt;br /&gt;&lt;br /&gt;另外一種方式是 Vimball , Vimball 的方式相當好,但是並不是每個寫 plugin 的人都懂得如何使用 vimball , 再者 vim.org 並不規定你一定要用 vimball 才可以上傳,而且 Vimball 還是有他侷限的地方。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/c9s/vim-packager"&gt;VIM::Packager&lt;/a&gt; 就是幫你做這樣的事情,安裝 cpan.vim 可以相當容易:&lt;br /&gt;&lt;br /&gt;$ cd cpan.vim&lt;br /&gt;$ vim-packager build # 讀取 META 檔案 (包含 相依性資訊、套件名稱、版本、Vim 相容版本 ... etc ) 接著產生 Makefile&lt;br /&gt;$ make install # 為你安裝所需要的相依套件,並建立紀錄&lt;br /&gt;&lt;br /&gt;若要移除:&lt;br /&gt;&lt;br /&gt;$ make uninstall&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;使用 VIM::Packager 建立 Plugin&lt;/h3&gt;&lt;br /&gt;步驟相當簡單,先建立作者資訊&lt;br /&gt;&lt;br /&gt;$ cat &amp;gt; ~/.vim-author&lt;br /&gt;author: Cornelius&lt;br /&gt;email: cornelius.howl@DELETE.ME.gmail.com&lt;br /&gt;^D&lt;br /&gt;&lt;br /&gt;$ mkdir your-plugin.vim&lt;br /&gt;$ cd your-plugin.vim&lt;br /&gt;$ vim-packager init # 這樣會為你產生 META 檔案、以及建立所需要的資料夾,並且利用範本為你建立文件&lt;br /&gt;&lt;br /&gt;$ vim META # 編輯套件資訊 (你還可以在 META 裡面加上 =script_id ,script id 對應此套件在 vim.org 的 id ,每當要釋出新版,便可以直接上傳 )&lt;br /&gt;&lt;br /&gt;META file 的格式相當簡單,請看:&lt;br /&gt;&lt;script src="http://gist.github.com/238829.js?file=gistfile1.txt"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;接著只需要再加上 plugin 的版本資訊即可:&lt;br /&gt;&lt;br /&gt;$ vim vimlib/plugin/your-plugin.vim # 加上 『 " Version: 0.1 』 版本資訊&lt;br /&gt;$ vim-packager build # 便會產生 Makefile&lt;br /&gt;&lt;br /&gt;$ make dist # 幫你用 tar 打包起來&lt;br /&gt;&lt;br /&gt;$ make bump # 提昇版本&lt;br /&gt;&lt;br /&gt;$ make upload # 自動上傳到 vim.org&lt;br /&gt;&lt;br /&gt;以上三個動作現在可以直接用 $ make release 串起來,也就是:&lt;br /&gt;&lt;br /&gt;$ make release # tar 打包、提昇版本、自動上傳一次做到好。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;當你在開發的時候,你也可以不需要安裝,可以利用 ln 來幫你直接連結到正在開發的檔案:&lt;br /&gt;&lt;br /&gt;$ make link&lt;br /&gt;&lt;br /&gt;或是&lt;br /&gt;&lt;br /&gt;$ make link-force # 強制連結&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-8163960979835457306?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at November 19, 2009 04:00 PM

November 18, 2009

Cornelius

VIM::Packager

&lt;a href="http://github.com/c9s/vim-packager"&gt;VIM::Packager&lt;/a&gt; , 最近在寫的東西。 主要是為了彌補 Vim 本身對 script 安裝以及相依性問題的不足,另外再加上一些輔助開發的 makefile script.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;可利用 $ vim-packager init 來產生 vim plugin 所需要的 skeleton ,以及 $ vim-packager build 來產生 Makefile 等等。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://github.com/c9s/vim-packager"&gt;http://github.com/c9s/vim-packager&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-8826888602326263770?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at November 18, 2009 11:00 PM

November 14, 2009

Cornelius

perl-completion

&lt;img src="http://cloud.github.com/downloads/c9s/perl-completion.vim/Screen_shot_2009-11-14_at_2.22.56_PM-small.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://github.com/c9s/perl-completion.vim"&gt;&lt;/a&gt;&lt;/div&gt;&lt;span&gt;&lt;span&gt;&lt;a href="http://github.com/c9s/perl-completion.vim"&gt;http://github.com/c9s/perl-completion.vim&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;which is defined with omni-completion. when filetype is perl , the completion function will be binded. this plugin completes function names for you and also base class function names. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;you need to install VIM::Packager first, it solve dependencies for you. the depended scripts will be retrived from an url , which is on github.com.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;remember to add path ~/.vim/bin to your $PATH env variable to make sure vimscript can find the scripts. the parsing utils will be installed in ~/.vim/bin/.&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;$ sudo cpan VIM::Packager&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;# run vim-packager to convert VIM meta file (VIMMETA)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;$ vim-packager build&lt;br /&gt;$ make install&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;just press C-x C-o after a $self-&amp;gt; or Package::Something-&amp;gt; to pop the completion menu up when you are in perl files.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;and you can also integrate this to your autocomplpop plugin.&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;will support Moose TypeConstrant , Accessor completetion in future.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-9163156404283177943?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at November 14, 2009 09:00 AM

October 31, 2009

Cornelius

YAPC::Tiny 第二彈簡報

於此網址:&lt;a href="http://oulixe.us/talks/yapc-tiny-2.xul"&gt;&lt;br /&gt;http://oulixe.us/talks/yapc-tiny-2.xul&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;請用 Firefox 開啟。謝謝。:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-7206994254296896046?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at October 31, 2009 10:00 PM

October 26, 2009

Cornelius

cpan.vim again

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i3PNCkrh-3k/SuWaSyn848I/AAAAAAAAJDg/_6tDhf1j7ww/s1600-h/Screen+shot+2009-10-26+at+8.46.18+PM.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 163px;" src="http://3.bp.blogspot.com/_i3PNCkrh-3k/SuWaSyn848I/AAAAAAAAJDg/_6tDhf1j7ww/s320/Screen+shot+2009-10-26+at+8.46.18+PM.png" alt="" id="BLOGGER_PHOTO_ID_5396889376091071426" border="0" /&gt;&lt;/a&gt;I just fixed the Autocomplop vim plugin conflicts of &lt;a href="http://github.com/c9s/cpan.vim"&gt;cpan.vim&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;so if you open the cpan search window , it will detect the autocomplpop plugin , if you are using autocomplpop , then cpan.vim will disable it for temporary. after window closed, it will be enabled again.&lt;br /&gt;&lt;br /&gt;also, thanks dann for tracing the autocomplpop problem.&lt;br /&gt;&lt;br /&gt;and I added some highlight stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-7947820039755911137?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at October 26, 2009 01:00 PM

October 24, 2009

Cornelius

YAPC::Tiny 第二彈緊急開催

這次特別請到 Perl 社群中最愛橘色的 Leon Brocard 來分享,他目前也是 Perl 5.11.3 版(將於十二月釋出)的負責人。&lt;br /&gt;&lt;br /&gt;於 10/29 星期四晚上七點,於台中中港路上的 match cafe (默契咖啡)&lt;br /&gt;&lt;br /&gt;名額有限,報名從速喔!報名網頁: &lt;a href="http://registrano.com/events/yapc-tiny-second%20"&gt;http://registrano.com/events/yapc-tiny-second &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-7909790231659686420?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at October 24, 2009 10:00 AM

October 18, 2009

Cornelius

perl-completion plugin for vim

&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Y4yz0H8W-Ts&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Y4yz0H8W-Ts&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="340" width="560"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;昨天在往台南的客運上 hack 了一個這樣的東西,可以針對 $self, $class, Class::Name 這幾種狀況做 completion,目前的 perl-completion 使用 PPI (pure perl parser) 來找出目前 package 繼承的 class 的函式以及能夠依據設定找出第 n 層的 class function (預設是兩層)。&lt;br /&gt;&lt;br /&gt;輸入字串至 Class-&amp;gt; 按下 Ctrl-x Ctrl-x 便能開啟 perl-completion window ,在 insert mode 輸入 pattern 時,直接按下 Enter 能夠自動 complete 第一個 item. Ctrl-n , Ctrl-p 可以上下選擇 completion item, Ctrl-j , Ctrl-k 能夠跳至上一個/下一個 package,ESC 可直接關閉 completion window。&lt;br /&gt;&lt;br /&gt;有空在將這個 completion window generalize ,那麼便可以很容易的支援其他 Language。&lt;br /&gt;&lt;br /&gt;下一步想做的是 function preview ,由於在 Perl 的 Subroutine 內,我們可以用各種方式取用 Arguments ,所以若要自動 parse function argument 作為 completion 的提示,並不容易。初步的想法是,可以將一個 function 的最初幾行做預覽。那麼哪怕忘記 function 該怎麼 call ,只需要叫出預覽視窗即可。&lt;br /&gt;&lt;br /&gt;目前 perl-completion.vim 還在 github.com/c9s/cpan.vim 內。昨天晚上把所有 perl 相關函式整理至 autoload/libperl.vim ,以及將各 plugin 切割出來,如 ctags-search.vim , cpan.vim , perl-completion.vim , perl-function-search.vim 等。&lt;br /&gt;&lt;br /&gt;試想在這樣的 plugin 開發,未來可以在 Vimana 實做 : 自動建立 vim plugin 框架,自動產生 makefile,dependency check, plugin version check 之類的功能。&lt;br /&gt;&lt;br /&gt;目前的 perl-completion.vim 放在 &lt;a href="http://github.com/c9s/cpan.vim/"&gt;http://github.com/c9s/cpan.vim/&lt;/a&gt; 內。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;安裝方式如下:&lt;br /&gt;&lt;br /&gt;使用 git 將 repository checkout 出來&lt;br /&gt;&lt;br /&gt;$ git clone git://github.com/c9s/cpan.vim.git&lt;br /&gt;$ cd cpan.vim&lt;br /&gt;$ make install&lt;br /&gt;&lt;br /&gt;安裝 cpan.vim 同時有下列幾種功能: perl function search , ctags search , cpan module search , perl-completion&lt;br /&gt;&lt;br /&gt;相關文章:&lt;br /&gt;&lt;a href="http://c9s.blogspot.com/2009/10/cpanvim-now-supports-ctags-search.html"&gt;http://c9s.blogspot.com/2009/10/cpanvim-now-supports-ctags-search.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://c9s.blogspot.com/2009/09/cpanvim.html"&gt;http://c9s.blogspot.com/2009/09/cpanvim.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-1761721664042473332?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at October 18, 2009 07:00 AM

October 04, 2009

Cornelius

cpan.vim now supports ctags search

前陣子參加 YAPC::Asia,看了 &lt;a href="http://github.com/imakado"&gt;imakado&lt;/a&gt; demo 的 emacs plugin - &lt;a href="http://github.com/imakado/cpan.el"&gt;cpan.el&lt;/a&gt; 以及 &lt;a href="http://github.com/imakado/perl-completion"&gt;perl-completion.el&lt;/a&gt; ,所以我於會後也寫了一個類似的 vim plugin。screencast 可參考此處 (&lt;a href="http://c9s.blogspot.com/2009/09/cpanvim.html"&gt;http://c9s.blogspot.com/2009/09/cpanvim.html&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;寫著寫著覺得可以開發的功能實在很多,於是除了讓 cpan.vim 可以迅速的搜尋 CPAN 模組之外,也支援其他種搜尋模式,如只搜尋 ./lib/ 或是 @INC 或是從 cpan source list 上搜尋。&lt;br /&gt;&lt;br /&gt;除此之外另外對其他非 Perl 使用者會比較實用的是 ctags search 的功能,要使用此功能必須先安裝 &lt;a href="http://ctags.sourceforge.net/"&gt;Exuberant ctags&lt;/a&gt; ,來利用 Exuberant Ctags 對各種語言的程式碼來產生 ctags file,目前 &lt;a href="http://ctags.sourceforge.net/languages.html"&gt;Exuberant Ctags 支援 41 多種語言&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;手動產生的方法如下:&lt;br /&gt;&lt;br /&gt;$ ctags -R foo.c bar.c /path/to/source/&lt;br /&gt;&lt;br /&gt;這樣便會產生檔案名稱為 tags 的 taglist 檔案於目前目錄下。&lt;br /&gt;&lt;br /&gt;這是原始的作法。&lt;br /&gt;&lt;br /&gt;利用 cpan.vim 則只需要使用快捷鍵 Ctrl-C,Ctrl-T 即可開啟 Ctags Search Window,如果找不到 tags 檔案,便會詢問你要產生 ctags 的來源路徑 (支援自動補完路徑 path completion ),然後自動為你產生。&lt;br /&gt;&lt;br /&gt;鍵入 Pattern 後會自動替你搜尋相關對應的標籤 (tag) ,可用 Ctrl-N , Ctrl-P 來選擇結果,Ctrl-A, Ctrl-E 來跳至行頭、行尾。&lt;br /&gt;&lt;br /&gt;Enter 則會直接進入該標籤 (tag) , 按下 t 則會將標籤開於新分頁。若該標籤 (tag) 對應到多個檔案,則會跳出選擇清單,只需鍵入編號進入即可。&lt;br /&gt;&lt;br /&gt;目前唯一的缺點就是當 ctags 檔案非常非常大的時候會有點慢。&lt;br /&gt;&lt;br /&gt;詳細的使用說明於 README 檔案內。不過我目前還沒有上傳新的版本至 vim.org,我太懶了。(其實是 vim.org 做的實在很簡陋 , sucks)&lt;br /&gt;&lt;br /&gt;各位使用從 github checkout 最新版本出來即可。&lt;br /&gt;&lt;br /&gt;Github: &lt;a href="http://github.com/c9s/cpan.vim"&gt;http://github.com/c9s/cpan.vim&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;或是直接下 git 命令:&lt;br /&gt;&lt;br /&gt;$ git clone git://github.com/c9s/cpan.vim.git&lt;br /&gt;&lt;br /&gt;安裝則相當簡易,在 Plugin 目錄下輸入一行命令即可:&lt;br /&gt;&lt;br /&gt;$ make install&lt;br /&gt;&lt;br /&gt;其他相關問題歡迎在此篇 Blog 下發問。謝謝。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-1317896321878513051?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at October 04, 2009 09:00 AM

September 21, 2009

Cornelius

cpan.vim

my recent vim hack. inspired from imakado's perl-completion.el and cpan.el&lt;br /&gt;&lt;br /&gt;&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/erF0NWUIbr4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/erF0NWUIbr4&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="340" width="560"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;it's on &lt;a href="http://github.com/c9s/cpan.vim"&gt;http://github.com/c9s/cpan.vim&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;installation and feature intro are in README.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-3342473288378046720?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at September 21, 2009 08:00 PM

July 29, 2009

Cornelius

SA-Tainan: Jifty Now! 8/1

本人於八月一號會在台南 SA 有個 Jifty Web Framework 的主題分享。 :-)&lt;br /&gt;&lt;br /&gt;詳細資料於此:&lt;br /&gt;&lt;a href="http://phorum.study-area.org/index.php/topic,57468.0.html"&gt;http://phorum.study-area.org/index.php/topic,57468.0.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;歡迎參加。對 Perl 程式語言有興趣的朋友們更不能錯過喔!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-8301057353885269282?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at July 29, 2009 01:00 PM

June 16, 2009

Cornelius

Jifty OpenID Plugin 中文教學

日前寫了一篇 Jifty OpenID Plugin 的教學。已經於 CPAN 更新。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://search.cpan.org/%7Eyvesago/Jifty-Plugin-OpenID-1.00/doc/OpenID_zhtw.pod"&gt;http://search.cpan.org/~yvesago/Jifty-Plugin-OpenID-1.00/doc/OpenID_zhtw.pod&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-8268225961021247591?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at June 16, 2009 04:00 AM

May 29, 2009

Cornelius

Devel::Cover

當你撰寫任何 Perl 應用程式或是模組,你可能會使用單元測試 (unit test) 來測試你的應用程式是否正確運作。但是測試總是會有遺漏的地方。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://search.cpan.org/dist/Devel-Cover/"&gt;Devel::Cover&lt;/a&gt; 模組就是可以幫助你分析測試到的程式碼涵蓋哪些部份,哪些部份總共被執行了幾次,哪些地方沒有被測試到。&lt;br /&gt;&lt;br /&gt;安裝 Devel::Cover 模組:&lt;br /&gt;&lt;code&gt;sudo cpanp i Devel::Cover&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;當你 test 都寫好於 t/ 目錄底下,Makefile.PL 也設定好哪些測試目錄底下的測試要被執行。便可先將 Makefile.PL 執行,產生 Makefile.&lt;br /&gt;&lt;code&gt;perl Makefile.PL &amp;amp;&amp;amp; make&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;接著直接執行 Devel::Cover 所提供的 "cover" script.&lt;br /&gt;&lt;code&gt;cover -test&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;如此一來就會開始執行測試 (make test) 並且產生報表:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_i3PNCkrh-3k/Sh9WwVYGTgI/AAAAAAAAG4E/NYdNtxX-j8c/s1600-h/Picture+5.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 184px;" src="http://1.bp.blogspot.com/_i3PNCkrh-3k/Sh9WwVYGTgI/AAAAAAAAG4E/NYdNtxX-j8c/s320/Picture+5.png" alt="" id="BLOGGER_PHOTO_ID_5341083071456628226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;另外也會產生 HTML 報表:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i3PNCkrh-3k/Sh9Wwi0wgoI/AAAAAAAAG4U/gJ0V6XJonCE/s1600-h/Picture+7.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 270px;" src="http://4.bp.blogspot.com/_i3PNCkrh-3k/Sh9Wwi0wgoI/AAAAAAAAG4U/gJ0V6XJonCE/s320/Picture+7.png" alt="" id="BLOGGER_PHOTO_ID_5341083075066495618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;更詳盡的測試分析:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_i3PNCkrh-3k/Sh9Ww86zmiI/AAAAAAAAG4c/9PgRR2HOrbw/s1600-h/Picture+8.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 135px;" src="http://4.bp.blogspot.com/_i3PNCkrh-3k/Sh9Ww86zmiI/AAAAAAAAG4c/9PgRR2HOrbw/s320/Picture+8.png" alt="" id="BLOGGER_PHOTO_ID_5341083082071185954" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-3229134075518075658?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at May 29, 2009 04:00 AM

May 28, 2009

Cornelius

Vim - Install CPAN Module via cWORD

I just wrote a script to install cpan modules inside vim. so that we can move cursor to the module name , and press C-x C-i to install module. :p&lt;br /&gt;&lt;br /&gt;是一小段可以方便安裝 CPAN 模組的 vim script. 只要把 cursor 移動到 use YAML::Syck; 之類的 YAML 字樣上方,然後按下 C-x C-i 就會安裝 YAML::Syck 模組。&lt;br /&gt;&lt;br /&gt;對於 python 或是 ruby 的朋友可以把對 CWORD 的 regular expression 和 command 換一下,應該就可以用了。&lt;br /&gt;&lt;script src="http://gist.github.com/119172.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3147036244016021082-2149779716247023722?l=c9s.blogspot.com' alt='' /&gt;&lt;/div&gt;</content>

by c9s at May 28, 2009 08:00 AM