• Go contributor, author of many popular Go packages (i.e: color, structs, etc..) • Tool maker (i.e: gomodifytags, motion, etc...) • Coffee and bag geek
own commands, etc.. • No docs/ folder • No code/build/test commands (only :make). • Binary paths are hard coded • No coherent UI across all plugin commands, some look under the cursor some do not • No autocompletion • etc...
:GoInstallBinaries • Coherent command interface (i.e: :GoFoo without argument and with argument) • Improved commands by using <bang> (for example :GoBuild! to avoid jumping to first error) • Added :Go prefix to all commands, i.e. :Import > :GoImport • Added go_ prefix to all global variables, i.e. g:bin_path > g:go_bin_path
• Fixed not losing history on format (gofmt) • Still problematic • Added <Plug> mappings for provide custom mappings • Open cwindow after error or warning
test your file • :GoLint, :GoVet, :GoErrcheck - linters and checkers • :GoCoverage - show code coverage (initial plugin by Yukinari Toyota) • :GoPlay - share your buffer to play.golang.org
• :GoInfo - show identifier information under the cursor • :GoDef - jump to a symbol/declaration (inital plugin by Damian Gryski) • :GoRename - refactor identifiers • ...
patch levels: • v1.0.1, v1.0.2, v1.0.2 • This was wrong, switched to minor levels: • v1.1, v1.2, v1.3, etc.. • Allowed us to release patch releases if needed (i.e v1.3.1)
meant no clear guidance • Added BSD 3-Clause license • Same as Go's own license • It's a very permissive license, but the name "vim-go" can't be used for advertisement or promotions.
Show function callees, callers • Show all references of an identifier • etc... • Improved syntax highlighting even more (build constraints, all operators) • Automatic GOPATH detection • gb, Godeps support
etc.. • Better Statusline integration • A lot of Vim bugs in the beginning, wasn't quite ready • JSON encode/decode was useful for Go tooling integration
a binary, written in Go • More and more features are reimplemented again • Vim calls it via system() or job_start() • Tools return JSON or Vim script output (but not all of them)
& scanner packages • Allows us to modify Go source code • Parser is very fast. It's not noticeable at all. • Direct access to AST (Abstract Syntax Tree)
supported • One liner functions can be selected easier • Cursor position can be anywhere as long as it makes sense • Comments are treated as a part of the function declaration
edge cases • Tools output might be different • System specific commands are not the same (i.e opening a URL in Browser) • Paths, Path list separators, Line endings, etc.. are different based on the OS
a list of current GOPATH's let go_paths = split($GOPATH, ":") ['/Users/fatih/go', '/Users/fatih/Code/do'] On Linux or macOS ['C', '\go;C', '\Code\do\go'] On Windows
Get a list of current GOPATH's let go_paths = split($GOPATH, ":") let go_paths = split($GOPATH, go#util#PathListSep()) ['/Users/fatih/go', '/Users/fatih/Code/do'] On Linux or macOS ['C:\go', 'C:\Code\do\go'] On Windows
changes (i.e: default GOPATH, vendor/ folder) • Editors: vscode-go (Microsoft), gogland (JetBrains) • User base increases, it's getting harder and harder to maintain and improve it
:GoFillStruct, :GoKeyify, etc... • Folding support (syntax based) • Travis CI test integration • Removed Wiki and Readme.md examples. Moved all to docs/vim-go.txt • Over 800 Issues were closed!
integration (reading from stdin) • Showing stdout/stderr in :GoTest • More vim specific features • Additional text objects, we have currently function • AST based syntax highlighting • Autocomplete still sucks, not sure how to fix it
Changelog was in Github Releases, moved to Changelog.md • Vim 7.4, Vim 8.0 and NeoVim 0.2 compatibility is hard • For advanced features, better UI is needed for better UX