# Vim

> 

Published: 2011-12-25
URL: http://cdn.kaochenlong.com/vim

---

## 前言

在十年前開始接觸 FreeBSD 的時候，就聽聞過 Vi/Vim 這東西，那時候第一眼的感覺是：「這東西看起來好陽春，功能一定也很陽春」。當時在終端機上也還有別的編輯器可以選擇，例如 Joe、Nano 等，而且在本機的作業系統（Windows）也有其它的選擇，例如 UltraEdit。

以前會覺得寫程式、開發軟體，沒有 IDE 一定沒辦法。有些程式、軟體的確是需要 IDE 的幫忙，不然不知道怎麼寫。直到近幾年的工作幾乎用的都是文字編輯器，才發現其實文字編輯器可以做的事情相當多。二年多前開始把作業系統換成 Mac OS 之後，除了要寫 Flash 需要開 Flash IDE + Flash Builder 之外，其它幾乎就是只用[TextMate](http://macromates.com/)了。雖然說它的中文顯示問題一直被大家嫌到不行，而且傳說中的 2.0 版也一直沒消息，但它依舊是我開發上的首選工具。

TextMate 2 實在是讓人等太久了，所以大家開始找它的替代品。不久前發現[Sublime Text 2](http://www.sublimetext.com/2)這個編輯器，它的中文字是正常的，外掛看起來也滿夠用的，而且還可以吃 TextMate 的 bundle 跟 theme，本來打算換過去的時候突然出現 TextMate 2 的消息了，聽說中文顯示是正常的。但這時候我卻想，我還要過著這種逐水草而居的生活到什麼時候? 難道沒有一款編輯器是可以學了之後就一直用的嗎？

&lt;!-- more --&gt;

這時候我想到不久前才剛過 20 歲生日的 Vi/Vim。雖然不久前陣子有練了一下手感，但沒認真下定決心要把它當成是自己吃飯的工具。於是，就找了個週末來認真的練了一下手感，發現出乎我意料的好用，之前在 TextMate/Sublime Text 2 上可以做的功能，在 Vim 幾乎都有替代品，我以前真的是錯怪它了!

以下大概是我目前有用到的外掛跟設定，不是很多，但就我自己工作上用得到的。這是我目前的樣子(其實 NERDTree 比我想像中的漂亮)

![Vim](/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbFFCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--5935adbc8bc6e2677c912dc60d92bc69f6821d17/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFJQUJXa0NBQVE9IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0=--578d6799c87a604ca574298502ba874c9075e929/vim-screen.png)

## 外掛與設定

[我的.vimrc 設定](https://github.com/kaochenlong/eddie-vim/blob/master/plugin/settings/Settings.vim)

&gt; 我把自己的設定檔跟用到的plugin放了一份在[這裡](https://github.com/kaochenlong/eddie-vim)，有興趣的朋友可以參考看看 :)

### 我用到的外掛：

#### [Pathogen](https://github.com/tpope/vim-pathogen)

用來管理外掛的外掛。以前安裝外掛，常常得把一包程式裡的各個資料夾到處撒在 `~/.vim` 資料夾裡，現在透過 pathogen 的話只要放在 `~/.vim/bundle` 裡就差不多行了，相當方便。

#### [NerdTree](https://github.com/scrooloose/nerdtree) &amp;&amp; [NerdTreeTab](https://github.com/jistr/vim-nerdtree-tabs)

Vim 的檔案總管啦，當資料夾一多，沒有它不知道該怎麼工作了。

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/CPu9mDpSYj0?si=YhgH2TyPs_ytyyyB&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;

我在 .vimrc 裡有把 NERDTreeToggle 設定到 F2 鍵上，這樣就可以快速的打開、關閉了。

#### [NerdCommenter](https://github.com/scrooloose/nerdcommenter)

用這個可以方便的幫程式碼來做註解

#### [SnipMate](https://github.com/msanders/snipmate.vim)

看名字就知道它是從 TextMate 借過來的，如果覺得有不足的也可以自己建。

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/xV2IsE5OHd4?si=tLz7q7CssUBvXwEd&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;

#### [Command-T](https://github.com/wincent/Command-T)

TextMate 跟 Sublime Text 2 都有可以快速搜尋檔案的功能，這個則是補足了 Vim 這方面的功能，也是我決定把 Vim 當做主要工具的原因之一。

- update: 後來發現[ctrlp](https://github.com/kien/ctrlp.vim)用起來更方便，而且不需要另外 compile ruby 就可以使用。

#### [Surround](https://github.com/tpope/vim-surround)

可以很快的處理單引號、雙引號以及一些 html 常用的 tag 的問題，熟練的話會很方便。

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/5HF4jSyPpvs?si=nSsnCQYw0cLkgFaA&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;

#### [Repeat](https://github.com/tpope/vim-repeat)

Vim 內建的 repeat 功能在遇到某些事件的時候似乎會失效，加上這個外掛就沒問題了。

#### [EasyMotion](https://github.com/Lokaltog/vim-easymotion)

可以在不需要滑鼠的幫助下，快速的切換游標的位置。

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/Dmv6-dguS3g?si=iBRxTgRMxzYND0m3&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;

#### 幾個自己有在用的 syntax highlight 以及配色

- [actionscript](http://www.vim.org/scripts/script.php?script_id=1061)
- [coffeescript](https://github.com/kchmck/vim-coffee-script)
- [markdown](https://github.com/plasticboy/vim-markdown/)
- [ruby](https://github.com/vim-ruby/vim-ruby)
- [rails](https://github.com/tpope/vim-rails)

發現我幾乎整篇都是偷懶的直接貼別人的影片啊 Orz

另外如果你本來在 TextMate 下有喜歡的配色，也可以透過[這個工具](http://coloration.sickill.net/)來轉成給 Vim 的格式。

&gt; 有些外掛的更新後續都是在 GitHub 上，要用的時候請注意最後更新日期。

## 其它工具

### [Alfred](http://www.alfredapp.com/)

付費軟體。有這個工具的幫忙，原本螢幕下方放滿的工具就可以少放很多了，要開軟體也不需要用滑鼠去點，只要輸入幾個關鍵字就可以跳出來：

![](/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbFVCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--1c8710b4227fb6076d29868ac904f5733171e95a/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFJQUJXa0NBQVE9IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0=--578d6799c87a604ca574298502ba874c9075e929/tool-alfred.png)

### [Vimium](https://chrome.google.com/webstore/detail/dbepggeogbaibhgnhhndojpepiihcmeb)

讓瀏覽器也用 Vim 的操作方式來瀏覽(Chrome 限定)

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/OUl2mJnjwbY?si=w4DY_1iPVdTbMKwW&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;

### [Vimperator](http://vimperator.org/vimperator)

Firefox 也有類似功能的外掛可以用，感謝[老杨](http://laoyang945.github.com/)提供。

## 結論

自己順手的兵器，其實應該只要一把就夠了。雖然我用的是 MacVim，但會儘量避免用太多 Mac 專屬的設定，這樣一來我在本機的作業環境（Mac OS、Windows、Ubuntu）在切換的時候都可以有差不多的編輯習慣，甚至連遠端終端機作業的時候也不會差很多。

Vim 很強大，但它不是一個可以一、兩天就能上手的工具。我相信只要學得好，它絕對是可以到哪裡都走透透的兵器。現在還不夠熟，不過我相信一直強迫自己用下去，遲早可以跟它變好朋友。（像這篇文章就是在 Vim 底下打的，打得很不順，但就強迫自己練習）。接下來應該就是繼續把它再磨利一點，再練得順手一些，讓自己可以更快的完成工作，有更多時間可以做自己想做的事，以及陪家人（講是這樣講.. 但大概會花更多時間再寫更多的程式碼吧）

各位如果有不錯的外掛也歡迎留言一起討論囉 :)


