2009年10月26日 星期一

cpan.vim again

I just fixed the Autocomplop vim plugin conflicts of cpan.vim

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.

also, thanks dann for tracing the autocomplpop problem.

and I added some highlight stuff.

2009年10月24日 星期六

YAPC::Tiny 第二彈緊急開催

這次特別請到 Perl 社群中最愛橘色的 Leon Brocard 來分享,他目前也是 Perl 5.11.3 版(將於十二月釋出)的負責人。

於 10/29 星期四晚上七點,於台中中港路上的 match cafe (默契咖啡)

名額有限,報名從速喔!報名網頁: http://registrano.com/events/yapc-tiny-second

Ubuntu, UX30 and xmonad

目前 2.6.31 版本的 kernel 還不支援 UX30 的 wireless driver. RaLink RT3081
不過有看到 2.6.32 的 staging 裡頭有 driver.

整體使用上來,除了每次左手拇指都會壓到 trackpad 然後導致滑鼠亂飄害我一直罵髒話之外,其他都還不賴。

用久 Mac 真的沒辦法習慣 PC 的 Trackpad, 非常容易亂點。

因此,終於換上觀望已久的 xmonad window manager,可以幾乎完全不用到滑鼠來操作視窗介面,讓我非常的有生產力。再來,Firefox 終於也裝上了 Vimperator ,所以連瀏覽網頁都可以不用滑鼠了。

今天晚上所做的事情,大概就是把上頭這兩個很久以來一直想用的東西裝起來用了。

順便來一張 xmonad key mapping table:

2009年10月22日 星期四

2009年10月20日 星期二

懶得寫部落格

由於 Facebook , Twitter , Plurk 氾濫,養成我的壞習慣,都懶得寫 Blog 了。XD

BTW , 我現在才知道連中國都要擋掉 Blogger.com ,所以中國的朋友沒辦法讀 *.blogspot.com 的 Blog 了。 (當然也包括我的在內。orz)

晚餐後,用 Google 搜到這麼一篇關於上個月的 Beijing PerlChina Conference ,中國的朋友說

『 终于到了我最兴趣的一场了,来自台湾的c9s带来了Perl Hacks on VIM。 这个专题主要是介绍VIM,和高嘉良一样,说着软软的台湾普通话,不过听着倒也舒服 。』

http://www.disandu.com/?p=83


原來我們講的國語是軟軟的呀。那麼我們可是軟硬(台語)兼俱呢!

話說中國的朋友也挺熱情,當天簡報後跑來和我討論一些 Vim Stuff ,以及問我簡報是否會 Publish (PerlChina 版的簡報還沒 Publish) 我只說 『直接 Google 我的 ID 就好了,都在上面』, 不過回台灣才知道原來那邊沒辦法看台灣的部落格,Slideshare 好像也無法?得繞路才行。

關於 vim + gdb

有朋友問 vim 如何整合 gdb ,這是個好問題。 其實 vim 裡頭可以開啟 shell 來呼叫外部程式。但是這個作法實在不大好。 output 很容易亂掉編輯畫面,再者,也不方便 scroll 輸出的訊息。

其實是有簡單的解法的。基本上,我們可以利用 screen 的 share 功能來從外部送一些相關指令餵給 Terminal 的 gdb shell 或是利用簡單的 IPC 來操作外部程式,譬如說 設定 breakpoint , step , continue ... 等等功能。

再延伸一點,這麼多指令,肯定很容易衝突到其他的 key mapping ,要不,就是得延長 key mapping 的序列才行。所以可以透過 augroup 來在特定的情況下,將一整組 key mapping override 現有的 key mapping ,在不需要的時候再把這些 key mapping unmap 掉。

這邊先賣一下關子,有空再來寫。 XD 時候不早了,先去睡覺。 XDD

2009年10月18日 星期日

perl-completion plugin for vim



昨天在往台南的客運上 hack 了一個這樣的東西,可以針對 $self, $class, Class::Name 這幾種狀況做 completion,目前的 perl-completion 使用 PPI (pure perl parser) 來找出目前 package 繼承的 class 的函式以及能夠依據設定找出第 n 層的 class function (預設是兩層)。

輸入字串至 Class-> 按下 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。

有空在將這個 completion window generalize ,那麼便可以很容易的支援其他 Language。

下一步想做的是 function preview ,由於在 Perl 的 Subroutine 內,我們可以用各種方式取用 Arguments ,所以若要自動 parse function argument 作為 completion 的提示,並不容易。初步的想法是,可以將一個 function 的最初幾行做預覽。那麼哪怕忘記 function 該怎麼 call ,只需要叫出預覽視窗即可。

目前 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 等。

試想在這樣的 plugin 開發,未來可以在 Vimana 實做 : 自動建立 vim plugin 框架,自動產生 makefile,dependency check, plugin version check 之類的功能。

目前的 perl-completion.vim 放在 http://github.com/c9s/cpan.vim/ 內。


安裝方式如下:

使用 git 將 repository checkout 出來

$ git clone git://github.com/c9s/cpan.vim.git
$ cd cpan.vim
$ make install

安裝 cpan.vim 同時有下列幾種功能: perl function search , ctags search , cpan module search , perl-completion

相關文章:
http://c9s.blogspot.com/2009/10/cpanvim-now-supports-ctags-search.html
http://c9s.blogspot.com/2009/09/cpanvim.html

2009年10月9日 星期五

macports: unable to compile vim-app on snowleopard

升級到 SnowLeopard 會導致 Macports 出現一些問題。可參考 SnowLeopardProblems

另外 vim-app 也無法 compile 。( https://trac.macports.org/ticket/20947 )

出現的 compile error 如下:
--->  Building vim-app
Starting make in the src directory.
If there are problems, cd to the src directory and run make there
cd src && /usr/bin/make all
mkdir objects
CC="/usr/bin/gcc-4.2 -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MAC -fno-common -fpascal-strings -Wall -Wno-unknown-pragmas -mdynamic-no-pic -pipe -I. -Iproto -I/opt/local/include -DMACOS_X_UNIX -no-cpp-precomp -I/Developer/Headers/FlatCarbon " srcdir=. sh ./osdef.sh
creating auto/pathdef.c
/usr/bin/gcc-4.2 -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MAC -fno-common -fpascal-strings -Wall -Wno-unknown-pragmas -mdynamic-no-pic -pipe -I. -Iproto -I/opt/local/include -DMACOS_X_UNIX -no-cpp-precomp -I/Developer/Headers/FlatCarbon -O2 -arch x86_64 -D_FORTIFY_SOURCE=1 -o objects/gui_mac.o gui_mac.c
/usr/bin/gcc-4.2 -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MAC -fno-common -fpascal-strings -Wall -Wno-unknown-pragmas -mdynamic-no-pic -pipe -I. -Iproto -I/opt/local/include -DMACOS_X_UNIX -no-cpp-precomp -I/Developer/Headers/FlatCarbon -O2 -arch x86_64 -D_FORTIFY_SOURCE=1 -o objects/os_macosx.o os_macosx.c
/usr/bin/gcc-4.2 -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MAC -fno-common -fpascal-strings -Wall -Wno-unknown-pragmas -mdynamic-no-pic -pipe -I. -Iproto -I/opt/local/include -DMACOS_X_UNIX -no-cpp-precomp -I/Developer/Headers/FlatCarbon -O2 -arch x86_64 -D_FORTIFY_SOURCE=1 -o objects/os_mac_conv.o os_mac_conv.c
gui_mac.c: In function 'new_fnames_from_AEDesc':
gui_mac.c:559: error: 'typeFSS' undeclared (first use in this function)
gui_mac.c:559: error: (Each undeclared identifier is reported only once
gui_mac.c:559: error: for each function it appears in.)
gui_mac.c: In function 'Handle_KAHL_SRCH_AE':
gui_mac.c:637: error: 'FSSpec' has no member named 'parID'
gui_mac.c:637: error: 'FSSpec' has no member named 'parID'
gui_mac.c:638: error: 'FSSpec' has no member named 'name'
gui_mac.c:638: error: 'FSSpec' has no member named 'name'
gui_mac.c:639: error: 'FSSpec' has no member named 'name'
gui_mac.c:639: error: 'FSSpec' has no member named 'name'
gui_mac.c:639: error: 'FSSpec' has no member named 'name'
gui_mac.c: In function 'Handle_KAHL_GTTX_AE':
gui_mac.c:811: error: 'FSSpec' has no member named 'parID'
gui_mac.c:811: error: 'FSSpec' has no member named 'parID'


解法:

$ sudo port deps vim-app # 看 vim-app 相依哪些函式庫 , 使用 +universal variant 來 compile 這些相依的函式庫。如:

$ sudo port -d install libiconv +universal

最後 compile vim-app:

$ sudo port -d install vim-app +cscope+perl+ruby configure.compiler=gcc-4.0 configure.build_arch=i386

2009年10月4日 星期日

cpan.vim now supports ctags search

前陣子參加 YAPC::Asia,看了 imakado demo 的 emacs plugin - cpan.el 以及 perl-completion.el ,所以我於會後也寫了一個類似的 vim plugin。screencast 可參考此處 (http://c9s.blogspot.com/2009/09/cpanvim.html)

寫著寫著覺得可以開發的功能實在很多,於是除了讓 cpan.vim 可以迅速的搜尋 CPAN 模組之外,也支援其他種搜尋模式,如只搜尋 ./lib/ 或是 @INC 或是從 cpan source list 上搜尋。

除此之外另外對其他非 Perl 使用者會比較實用的是 ctags search 的功能,要使用此功能必須先安裝 Exuberant ctags ,來利用 Exuberant Ctags 對各種語言的程式碼來產生 ctags file,目前 Exuberant Ctags 支援 41 多種語言

手動產生的方法如下:

$ ctags -R foo.c bar.c /path/to/source/

這樣便會產生檔案名稱為 tags 的 taglist 檔案於目前目錄下。

這是原始的作法。

利用 cpan.vim 則只需要使用快捷鍵 Ctrl-C,Ctrl-T 即可開啟 Ctags Search Window,如果找不到 tags 檔案,便會詢問你要產生 ctags 的來源路徑 (支援自動補完路徑 path completion ),然後自動為你產生。

鍵入 Pattern 後會自動替你搜尋相關對應的標籤 (tag) ,可用 Ctrl-N , Ctrl-P 來選擇結果,Ctrl-A, Ctrl-E 來跳至行頭、行尾。

Enter 則會直接進入該標籤 (tag) , 按下 t 則會將標籤開於新分頁。若該標籤 (tag) 對應到多個檔案,則會跳出選擇清單,只需鍵入編號進入即可。

目前唯一的缺點就是當 ctags 檔案非常非常大的時候會有點慢。

詳細的使用說明於 README 檔案內。不過我目前還沒有上傳新的版本至 vim.org,我太懶了。(其實是 vim.org 做的實在很簡陋 , sucks)

各位使用從 github checkout 最新版本出來即可。

Github: http://github.com/c9s/cpan.vim

或是直接下 git 命令:

$ git clone git://github.com/c9s/cpan.vim.git

安裝則相當簡易,在 Plugin 目錄下輸入一行命令即可:

$ make install

其他相關問題歡迎在此篇 Blog 下發問。謝謝。