素のVimでGoを書く時のテクニック
にて、
外部ネットワークに繋がらない環境で
vim
とgo
しか使えない
という縛りでライブコーディングをしてきました。
実際にそういう環境があるのか?という話はさておき、そのような状況でも以下を駆使してそこそこコードが書けます。
:%!gofmt
でコードを整形できる:r! go doc
の結果を適当なバッファに出力する- Vim内でドキュメントが読める
- ドキュメントの内容を
CTRL-N
やCTRL-P
で補完できる
:set path+=$GOROOT/src
で標準パッケージを検索できるようにする
作ったものはGET /fizzbuzz/:number
にアクセスするとFizzBuzzを返すというHTTPサーバです。
package main import ( "net/http" "strconv" "strings" ) func fizzbuzz(w http.ResponseWriter, r *http.Request) { p := strings.TrimPrefix(r.URL.Path, "/fizzbuzz/") if p == "" { http.NotFound(w, r) return } n, _ := strconv.Atoi(p) if n < 1 { http.NotFound(w, r) return } switch { case n%5 == 0 && n%3 == 0: w.Write([]byte("FizzBuzz")) case n%5 == 0: w.Write([]byte("Buzz")) case n%3 == 0: w.Write([]byte("Fizz")) default: w.Write([]byte(p)) } w.Write([]byte("\n")) } func main() { http.HandleFunc("/fizzbuzz/", fizzbuzz) http.ListenAndServe(":8080", nil) }
ただ当日は1.のgofmt
しか使いませんでした。
というのもスパルタンなVimmerに憧れており、元から自動補完は使っておらず、オムニ補完にもそこまで依存しないようにしていたので、このくらいのものであれば無くても特に困らなかったからです。
まあ常に役立つものではありませんが、覚えておくと何かの時に便利かもしれません。