Code Swift with Vim

Swift 是今年 Apple 發表的程式語言,在發表的隔月就衝上了 TIOBE 排行榜的前 20 名。不過因為目前還在 Beta 中,所以除了改規格之外,開發工具的穩定性也還有待加強。

因為我已習慣用終端機 + Vim 工作,所以用 Vim 來練習寫 Swift 也是很正常的(誤)。不過其實真正的原因是之前 beta 版的 Xcode 太容易因為語法錯誤而當掉了。

Vim plugin

Vim 什麼沒有,plugin 最多了。不過因為 Swift 剛出來沒多久,外掛還不太多。我目前只有使用 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

編譯

如果只是要寫個沒有畫面的小工具的程式,其實是不需要開 Xcode 的,只要一個簡單的 .swift 檔就可以了。

// 檔案 hello.swift
println("Hello, Swift!")

然後執行:

$ xcrun swift hello.swift

應該會在畫面上印出 Hello, Swift! 字樣。如果想要進行編譯,可執行:

$ xcrun swiftc hello.swift

這會在該目錄產生一個同名的 hello 執行檔(注意,是 swiftc 而不是 swift)。

註:以上是以 Xcode 6 Beta 5 為示範,在之前的版本的指令稍有不同。

自動執行

如果每次寫完存檔就要再執行一次 xcrun swift 也太辛苦了,工程師都是很懶的。有個不錯用的 gem 叫做 Guard可以幫你監視檔案的狀態,一但檔案有異動就跟著執行某些指令。

安裝 gem 是件輕鬆愉快的事,只要一行:

$ gem install guard-shell

如果安裝順利,下一步是請 guard 幫我們產生一個 Guardfile:

$ guard init shell

你應該可以在該目錄看到 Guardfile 檔案。我稍微做了些小修改如下:

guard :shell do
  watch(/(.*).swift/) do |m|
    puts "-" * 20
    puts `xcrun swift #{m[0]}`
  end
end

這個設定檔沒有很特別的東西,大概就是每次執行前先印出個分隔線,然後再印出 xcrun swift 的執行結果。接著只要在該目錄執行 guard 即可進入監看模式。

小結

因為 Vim 指法已習慣成肌肉記憶(muscle memory),所以我的 Xcode 也通常會安裝 XVim 讓 Xcode 可支援部份的 Vim 指令,不然完全沒辦法工作了。

是說像這樣用 Vim 寫 Swift,練練語法還 ok,但要靠 Vim 純手工刻出 iOS app 真的不是一般人能做到的事,所以其實我真正開發的時候,還是需要依賴 IDE 幫忙的,不然 method name 那麼長、參數那麼多,不靠 IDE 的自動完成,怎麼可能記得住。

即使如此,我個人還是覺得,可以用 Vim 寫程式,就是莫名的有種阿宅的浪漫啊 :)