とはいえ、実際に書くときにはあまり細かく気にする必要はなく、gofmtというGo言語をインストールするとついてくるフォーマッタを通してやれば、推奨スタイル通りに整形してくれます。
これを随時実行したいので、vimスクリプトを書いてみました。
都合上、フォーマットをかける前に、ファイルを保存します。
function! Gofmt()
:w
python << EOF
import vim
import subprocess
cb = vim.current.buffer
cursor = vim.current.window.cursor
p=subprocess.Popen(
        ['gofmt', cb.name],
 stdout=subprocess.PIPE,
 stderr=subprocess.PIPE,
 close_fds=True)
returncode=p.poll()
if not returncode:
    err = p.stderr.read()
    if err != None and err == '':
        del cb[:]
        cb.append(p.stdout.readlines(), 0)
    else:
        print(err)
vim.current.window.cursor = cursor
EOF
endfunction
 
4 件のコメント:
:%!gofmt
最初は「:%!gofmt」でやってたんですが、構文エラーがある時に、カレントバッファがエラーメッセージで置き換えられてしまうのが嫌になってしまったのです。
uすれば戻るんですが、それもめんどくさい。
フィルタしたときにシェルから返ってきた値で分岐させる方法があれば、こんなスクリプトを使うより、よっぽどスマートなんですが。
自動でundoするだけで良いのであれば…
:execute '%!gofmt' | if v:shell_error | undo | endif
ありがとうございます。これシンプルでいいですね。
後はechoにエラーメッセージを渡せれば、このスクリプトを完全に無用に出来そう。
もう少し研究してみます。
コメントを投稿