Monday, December 26, 2011

Vim

http://blog.eddie.com.tw/2011/12/26/vim/

前言

在十年前開始接觸FreeBSD的時候,就聽聞過Vi/Vim這東西,那時候第一眼的感覺是:「這東西看起來好陽春,功能一定也很陽春」。當時在終 端機上也還有別的編輯器可以選擇,例如Joe、Nano等,而且在本機的作業系統(Windows)也有其它的選擇,例如UltraEdit。

以前會覺得寫程式、開發軟體,沒有IDE一定沒辦法。有些程式、軟體的確是需要IDE的幫忙,不然不知道怎麼寫。直到近幾年的工作幾乎用的都是文字 編輯器,才發現其實文字編輯器可以做的事情相當多。二年多前開始把作業系統換成Mac OS之後,除了要寫Flash需要開Flash IDE + Flash Builder之外,其它幾乎就是只用TextMate了。雖然說它的中文顯示問題一直被大家嫌到不行,而且傳說中的2.0版也一直沒消息,但它依舊是我開發上的首選工具。

TextMate 2實在是讓人等太久了,所以大家開始找它的替代品。不久前發現Sublime Text 2這 個編輯器,它的中文字是正常的,外掛看起來也滿夠用的,而且還可以吃TextMate的bundle跟theme,本來打算換過去的時候突然出現 TextMate 2的消息了,聽說中文顯示是正常的。但這時候我卻想,我還要過著這種逐水草而居的生活到什麼時候? 難道沒有一款編輯器是可以學了之後就一直用的嗎?

這時候我想到不久前才剛過20歲生日的Vi/Vim。雖然不久前陣子有練了一下手感,但沒認真下定決心要把它當成是自己吃飯的工具。於是,就找了個 週末來認真的練了一下手感,發現出乎我意料的好用,之前在TextMate/Sublime Text 2上可以做的功能,在Vim幾乎都有替代品,我以前真的是錯怪它了!

以下大概是我目前有用到的外掛跟設定,不是很多,但就我自己工作上用得到的。這是我目前的樣子(其實NERDTree比我想像中的漂亮) image

外掛與設定

我的.vimrc設定

我用到的外掛:

Pathogen

用來管理外掛的外掛。以前安裝外掛,常常得把一包程式裡的各個資料夾到處撒在~/.vim資料夾裡,現在透過pathogen的話只要放在~/.vim/bundle裡就差不多行了,相當方便。

NerdTree && NerdTreeTab

Vim的檔案總管啦,當資料夾一多,沒有它不知道該怎麼工作了。
我在.vimrc裡有把NERDTreeToggle設定到F2鍵上,這樣就可以快速的打開、關閉了。

NerdCommenter

用這個可以方便的幫程式碼來做註解

SnipMate

看名字就知道它是從TextMate借過來的,如果覺得有不足的也可以自己建。

Command-T

TextMate跟Sublime Text 2都有可以快速搜尋檔案的功能,這個則是補足了Vim這方面的功能,也是我決定把Vim當做主要工具的原因之一。

Surround

可以很快的處理單引號、雙引號以及一些html常用的tag的問題,熟練的話會很方便。

Repeat

Vim內建的repeat功能在遇到某些事件的時候似乎會失效,加上這個外掛就沒問題了。

EasyMotion

可以在不需要滑鼠的幫助下,快速的切換游標的位置。

幾個自己有在用的syntax highlight以及配色

發現我幾乎整篇都是偷懶的直接貼別人的影片啊 Orz 另外如果你本來在TextMate下有喜歡的配色,也可以透過這個工具來轉成給Vim的格式。

有些外掛的更新後續都是在github上,要用的時候請注意最後更新日期。

其它工具

Alfred

付費軟體。有這個工具的幫忙,原本螢幕下方放滿的工具就可以少放很多了,要開軟體也不需要用滑鼠去點,只要輸入幾個關鍵字就可以跳出來:
image

Vimium

讓瀏覽器也用Vim的操作方式來瀏覽(Chrome限定)

結論

自己順手的兵器,其實應該只要一把就夠了。雖然我用的是MacVim,但會儘量避免用太多Mac專屬的設定,這樣一來我在本機的作業環境(Mac OS、Windows、Ubuntu)在切換的時候都可以有差不多的編輯習慣,甚至連遠端終端機作業的時候也不會差很多。

Vim很強大,但它不是一個可以一、兩天就能上手的工具。我相信只要學得好,它絕對是可以到哪裡都走透透的兵器。現在還不夠熟,不過我相信一直強迫 自己用下去,遲早可以跟它變好朋友。(像這篇文章就是在Vim底下打的,打得很不順,但就強迫自己練習)。接下來應該就是繼續把它再磨利一點,再練得順手 一些,讓自己可以更快的完成工作,有更多時間可以做自己想做的事,以及陪家人(講是這樣講.. 但大概會花更多時間再寫更多的程式碼吧)

各位如果有不錯的外掛也歡迎留言一起討論囉 :)

No comments:

Post a Comment