# Code Swift with Vim

> 除了介紹必備的 vim-swift 語法高亮外掛，更詳細說明如何配置 Swift REPL 環境與編譯流程。針對提升開發效率，我們分享了使用 Guard 套件實現自動化執行的技巧，讓開發者在擺脫 Xcode 負擔的同時，仍能保有專業且高效的工作流程，是 Swift 開發者的進階技術指南。

Published: 2014-08-05
URL: https://kaochenlong.com/code-swift-with-vim

---

Swift 是今年 Apple 發表的程式語言，在發表的隔月就衝上了 [TIOBE 排行榜](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)的前 20 名。不過因為目前還在 Beta 中，所以除了改規格之外，開發工具的穩定性也還有待加強。

因為我已習慣用終端機 + Vim 工作，所以用 Vim 來練習寫 Swift 也是很正常的(誤)。不過其實真正的原因是之前 beta 版的 Xcode 太容易因為語法錯誤而當掉了。

## Vim plugin

Vim 什麼沒有，plugin 最多了。不過因為 Swift 剛出來沒多久，外掛還不太多。我目前只有使用 [vim-swift](https://github.com/toyamarinyon/vim-swift) 這個 plugin，有支援語法 highlight。

## Swift REPL

寫 Ruby/Rails 時已很習慣有 `irb` 之類的 REPL(Read–Eval–Print Loop) 可以用，Swift 這回也有提供 REPL。

因為在我電腦裡同時有安裝 Xcode 5 以及 Xcode 6 beta 5，所以在使用前得需先修改一下設定，開啟終端機後輸入：

```
$ sudo xcode-select -switch /Applications/Xcode6-Beta5.app
```

上面這個指令路徑設定可能會隨著 Xcode 6 的版本不同而需要做些調整。設定完之後，輸入：

```
$ xcrun swift
```

或

```
$ lldb --repl
```

即可進入 Swift 的 REPL 環境。

![REPL](/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBZEU9IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--44dec99f2a2fa54005e82df5f422d368ae077173/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFJQUJXa0NBQVE9IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0=--578d6799c87a604ca574298502ba874c9075e929/swift_repl.png)## 編譯

如果只是要寫個沒有畫面的小工具的程式，其實是不需要開 Xcode 的，只要一個簡單的 .swift 檔就可以了。

```swift
// 檔案 hello.swift
println(&quot;Hello, Swift!&quot;)
```

然後執行：

```
$ xcrun swift hello.swift
```

應該會在畫面上印出 `Hello, Swift!` 字樣。如果想要進行編譯，可執行：

```
$ xcrun swiftc hello.swift
```

這會在該目錄產生一個同名的 `hello` 執行檔（注意，是 `swiftc` 而不是 `swift`）。

&lt;figure class=&quot;youtube-video&quot; data-id=&quot;h6n4RlHk12I&quot; data-size=&quot;75&quot;&gt;
&lt;/figure&gt;

連結：&lt;https://www.youtube.com/watch?v=h6n4RlHk12I&gt;

註：以上是以 Xcode 6 Beta 5 為示範，在之前的版本的指令稍有不同。

## 自動執行

如果每次寫完存檔就要再執行一次 `xcrun swift` 也太辛苦了，工程師都是很懶的。有個不錯用的 gem 叫做 [Guard](https://github.com/guard/guard)可以幫你監視檔案的狀態，一但檔案有異動就跟著執行某些指令。

安裝 gem 是件輕鬆愉快的事，只要一行：

```
$ gem install guard-shell
```

如果安裝順利，下一步是請 guard 幫我們產生一個 Guardfile：

```
$ guard init shell
```

你應該可以在該目錄看到 Guardfile 檔案。我稍微做了些小修改如下：

```ruby
guard :shell do
  watch(/(.*).swift/) do |m|
    puts &quot;-&quot; * 20
    puts `xcrun swift #{m[0]}`
  end
end
```

這個設定檔沒有很特別的東西，大概就是每次執行前先印出個分隔線，然後再印出 `xcrun swift` 的執行結果。接著只要在該目錄執行 `guard` 即可進入監看模式。

&lt;figure class=&quot;youtube-video&quot; data-id=&quot;yhPu86RvilI&quot; data-size=&quot;75&quot;&gt;
&lt;/figure&gt;

連結：&lt;https://www.youtube.com/watch?v=yhPu86RvilI&gt;

## 小結

因為 Vim 指法已習慣成肌肉記憶（muscle memory），所以我的 Xcode 也通常會安裝 [XVim](https://github.com/JugglerShu/XVim) 讓 Xcode 可支援部份的 Vim 指令，不然完全沒辦法工作了。

是說像這樣用 Vim 寫 Swift，練練語法還 ok，但要靠 Vim 純手工刻出 iOS app 真的不是一般人能做到的事，所以其實我真正開發的時候，還是需要依賴 IDE 幫忙的，不然 method name 那麼長、參數那麼多，不靠 IDE 的自動完成，怎麼可能記得住。

即使如此，我個人還是覺得，可以用 Vim 寫程式，就是莫名的有種阿宅的浪漫啊 :)

