github.com/spotify/syslog-redirector-golang@v0.0.0-20140320174030-4859f03d829a/misc/vim/ftplugin/go/fmt.vim (about) 1 " Copyright 2011 The Go Authors. All rights reserved. 2 " Use of this source code is governed by a BSD-style 3 " license that can be found in the LICENSE file. 4 " 5 " fmt.vim: Vim command to format Go files with gofmt. 6 " 7 " This filetype plugin add a new commands for go buffers: 8 " 9 " :Fmt 10 " 11 " Filter the current Go buffer through gofmt. 12 " It tries to preserve cursor position and avoids 13 " replacing the buffer with stderr output. 14 " 15 " Options: 16 " 17 " g:go_fmt_commands [default=1] 18 " 19 " Flag to indicate whether to enable the commands listed above. 20 " 21 " g:gofmt_command [default="gofmt"] 22 " 23 " Flag naming the gofmt executable to use. 24 " 25 if exists("b:did_ftplugin_go_fmt") 26 finish 27 endif 28 29 if !exists("g:go_fmt_commands") 30 let g:go_fmt_commands = 1 31 endif 32 33 if !exists("g:gofmt_command") 34 let g:gofmt_command = "gofmt" 35 endif 36 37 if g:go_fmt_commands 38 command! -buffer Fmt call s:GoFormat() 39 endif 40 41 function! s:GoFormat() 42 let view = winsaveview() 43 silent execute "%!" . g:gofmt_command 44 if v:shell_error 45 let errors = [] 46 for line in getline(1, line('$')) 47 let tokens = matchlist(line, '^\(.\{-}\):\(\d\+\):\(\d\+\)\s*\(.*\)') 48 if !empty(tokens) 49 call add(errors, {"filename": @%, 50 \"lnum": tokens[2], 51 \"col": tokens[3], 52 \"text": tokens[4]}) 53 endif 54 endfor 55 if empty(errors) 56 % | " Couldn't detect gofmt error format, output errors 57 endif 58 undo 59 if !empty(errors) 60 call setloclist(0, errors, 'r') 61 endif 62 echohl Error | echomsg "Gofmt returned error" | echohl None 63 endif 64 call winrestview(view) 65 endfunction 66 67 let b:did_ftplugin_go_fmt = 1 68 69 " vim:ts=4:sw=4:et