// the find
fatih/vim-go
Go development plugin for Vim
vim-go is the canonical Go development plugin for Vim, wrapping gopls and a suite of Go tooling (gofmt, delve, golangci-lint, gotags) behind Vim commands. It's for Go developers who live in Vim and want IDE-level features without switching editors. Fatih Arslan built it over a decade ago and it remains actively maintained.
gopls integration is first-class — completion, go-to-definition, references, and rename all go through the language server, so you get the same analysis that VS Code users get. The delve debugger integration (:GoDebugStart, breakpoints, variable inspection) is genuinely useful and not something most Vim plugins bother with. Formatting on save preserves cursor position and undo history, which sounds minor but is the kind of thing that makes or breaks daily use. The test suite is substantial — Docker-based CI, fixtures for each feature, tested against multiple Vim versions — which is rare for a VimL project of this size.
Neovim users are better served by nvim-lspconfig + a Go-specific plugin like ray-x/go.nvim at this point; vim-go's Neovim support is functional but the plugin was designed for Vim first and it shows. The VimL codebase is large and non-trivial to contribute to — there's a lot of state management spread across async job callbacks that's hard to follow. GoMetaLinter is effectively deprecated upstream in favor of golangci-lint, but the docs still reference both, which causes confusion about what to actually configure. Some commands (:GoFillStruct, :GoImpl) depend on external binaries that aren't installed by :GoInstallBinaries by default, so new users hit cryptic 'command not found' errors before they find the right setup path.