Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


Go development plugin for Vim

Subscribe to updates I use vim-go

Statistics on vim-go

Number of watchers on Github 8080
Number of open issues 50
Average time to close an issue 7 days
Main language VimL
Average time to merge a PR 3 days
Open pull requests 92+
Closed pull requests 62+
Last commit almost 2 years ago
Repo Created over 5 years ago
Repo Last Updated over 1 year ago
Size 3.32 MB
Homepage https://patreon.c...
Organization / Authorfatih
Latest Releasev1.16
Page Updated
Do you use vim-go? Leave a review!
View open issues (50)
View vim-go activity
View on github
Fresh, new opensource launches πŸš€πŸš€πŸš€
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating vim-go for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

vim-go Build Status

Vim-go logo


This plugin adds Go language support for Vim, with the following main features:

  • Compile your package with :GoBuild, install it with :GoInstall or test it with :GoTest. Run a single tests with :GoTestFunc).
  • Quickly execute your current file(s) with :GoRun.
  • Improved syntax highlighting and folding.
  • Debug programs with integrated delve support with :GoDebugStart.
  • Completion support via gocode.
  • gofmt or goimports on save keeps the cursor position and undo history.
  • Go to symbol/declaration with :GoDef.
  • Look up documentation with :GoDoc or :GoDocBrowser.
  • Easily import packages via :GoImport, remove them via :GoDrop.
  • Precise type-safe renaming of identifiers with :GoRename.
  • See which code is covered by tests with :GoCoverage.
  • Add or remove tags on struct fields with :GoAddTags and :GoRemoveTags.
  • Call gometalinter with :GoMetaLinter to invoke all possible linters (golint, vet, errcheck, deadcode, etc.) and put the result in the quickfix or location list.
  • Lint your code with :GoLint, run your code through :GoVet to catch static errors, or make sure errors are checked with :GoErrCheck.
  • Advanced source analysis tools utilizing guru, such as :GoImplements, :GoCallees, and :GoReferrers.
  • ... and many more! Please see doc/vim-go.txt for more information.


The latest stable release is the recommended version to use. If you choose to use the master branch instead, please do so with caution; it is a development branch.

vim-go follows the standard runtime path structure. Below are some helper lines for popular package managers:

  • Vim 8 packages
    • git clone ~/.vim/pack/plugins/start/vim-go
  • Pathogen
    • git clone ~/.vim/bundle/vim-go
  • vim-plug
    • Plug 'fatih/vim-go'

You will also need to install all the necessary binaries. vim-go makes it easy to install all of them by providing a command, :GoInstallBinaries, which will go get all the required binaries.

Check out the Install section in the documentation for more detailed instructions (:help go-install).


The full documentation can be found at doc/vim-go.txt. You can display it from within Vim with :help vim-go.

Depending on your installation method, you may have to generate the plugin's help tags manually (e.g. :helptags ALL).

We also have an official vim-go tutorial.


The BSD 3-Clause License - see LICENSE for more details

vim-go open issues Ask a question     (View All Issues)
  • about 3 years :GoBuild leaves error window open
  • about 3 years cannot jump to symbol in vendored package
  • about 3 years Neovim v0.1.6 stable + vim-go + delimitMate = freeze
  • about 3 years :GoImports (and :GoFmt) do not work when buffer is not written to disk
  • about 3 years GoAddTags bug when using *interface{} fields
  • about 3 years GoAddFields
  • about 3 years Preview buffer does not show Comments
  • about 3 years Using snippets with neosnippet
  • about 3 years Path issues on :GoDef in Windows
  • about 3 years Hint on save "Press ENTER or type command to continue"
  • about 3 years GoImpl creates method stubs inside struct definiton
  • about 3 years GoImpl should not create method stubs if they are already implemented
  • about 3 years [vim-8.0] quickfix or locationlist steal focus after save
  • about 3 years Saving a file with goimports does not preserve correct cursor position
  • about 3 years golint and gometalinter appear to be missing
  • about 3 years GoAddTags should not add twice
  • about 3 years Option for autocreate to treat empty directories as a package named after that directory
  • about 3 years Invite user to issue the command :GoInstallBinaries
  • over 3 years :GoCallers is broken
  • over 3 years buffer moves to top of the file then back to cursor with each save
  • over 3 years GoCoverageClear removes custom highlights
  • over 3 years vim-8.0: show_errors can fail with a list index out of range on Windows
  • over 3 years :GoTest errors appear in location list
  • over 3 years GoCoverage not hightlighting
  • over 3 years g:go_highlight_types breaks folding
  • over 3 years :GoAddTags with nested structs
  • over 3 years GoAddTags: tag options
  • over 3 years GoAddTags: allow modifying existing comments
  • over 3 years Improvement suggestion: Syntax based folding for imports
  • over 3 years Replicate Syntastic behavior, or, easier go build
vim-go open pull requests (View All Pulls)
  • Allow GoRun to accept file arguments in neovim
  • the cursor offset for goinfo has to be 1 greater than it currently is
  • Neovim integration for GoCoverage
  • goinfo improvements
  • alternate.vim: handle empty buffer names and general improvements
  • syntax highlighting for //go:generate
  • :GoDef custom Tag Stack support (#667)
  • Improve highlighting for numbers
  • Use mapping independent `normal!`
  • fmt: use shellescape instead of fnameescape
  • GoTestFunc: support testable examples
  • fmt: follow symlinks if we edit a symbolic link
  • guru support
  • Add Blocks support in vim-go
  • add nnoremap <buffer> <silent> <C-w><C-]> :<C-u>call go#def#Jump(spli…
  • Fix bad syntax of `redraw` in go/rename.vim
  • add goField
  • Increase compatibility with tcsh
  • Properly use exepath for CheckBinPath
  • Restore original files permissions
  • guru: fix slash direction for windows users
  • util: add go#util#env function
  • add commands to toggle settings that control auto behavior
  • use guru's -modified flag
  • Add ToggleSameIds
  • Cleanup documentation formatting
  • Changed/Fixed go-to-def using tabs
  • Fix :GoSameIds for light background, GUI, and after changing colour schemes
  • Fix GoCoverage highlighting, GoInstall deps, add support for FZF for GoDecls
  • Add :GoAvailImports to search importable packages with CtrlP
  • Rename GoMetalinterAutoSaveToggle to GoMetaLinterAutoSaveToggle
  • SameIds: Fix Sentence, add hint to 'updatetime'
  • allow :GoDoc on modified buffers
  • Fix syntax goFormatSpecifier: check '%%'
  • Add compatibility for GoAddTags and google/jsonapi
  • Fix appropriate bin_path may not work
  • Highlight nested fields or chained fields
  • Provide a descriptive quickfix/location list title.
  • coverage: allow to run coverage on _test.go files in subdirs
  • Add formatted error snippets
  • Highlight nested structs
  • Add table-driven tests and subtests snippets
  • Make sure builtins are always hightlighted correctly
  • Clear most recent goSameId highlights groups
  • Add `g:go_updatetime` to configure a custom `updatetime`
  • lint: add (go-lint) plug mapping
  • Add path convertion for native-win-vim with Cygwin support
  • allow popping from jump list when buffer is modified
  • handle :GoDef from modified buffer
  • Add path conversion for MSYS2 environments
  • Add option to use cwd as package name instead of template
  • go.vim func n method call style
  • Correctly report the value of the 'g:go_guru_tags' variable
  • fix :GoBuild issues in neovim
  • Fold function
  • Fixed issue Vim-Go broken on freebsd #1224
  • Add :GoAddTags
  • support <C-LeftMouse> as well
  • Include keyify support
  • goimports fails when proj symlinked in GOPATH
  • Add go_imports_options resolve #1212
  • Fix Issue #1283 Resolve highlighting error by surrounding expression in \(\)
  • Specifies the type of list to use in GoMetaLinter, by go_list_type
  • term: fix cwd after running command
  • Fix GoDef for paths with spaces
  • Load buffers with :GoDef relative to cwd
  • Fix async race
  • handle autowriteall the same as autowrite
  • separate gometalinter error list use cases
  • FIX #1642: use Execute for Gorename
  • Use :sbuffer in :GoAlternate
  • do not re-install vim on every vim-go change
  • Use new 'goimport' tool instead of VimScript for :GoImport and :GoDrop
  • Remove :GoDefStack
  • Basic version of GoNextId and GoPrevId commands #1518
  • Add :GoExpandErr
  • add GoDebug
  • [WIP] enable vim8 terminal
  • Fix for locationlist or quickfix list stealing focus on save.
  • neovim: invoke guru functions via async api
  • add fmt.Errorf() snippet in UltiSnips
  • Keep current alternate-file name while reading templates
  • Fix go build error parse
  • Improve Go identifier syntax highlighting
  • cache import path lookups results
  • Consolidate configs
  • Adds vim-plug post-update hook to documentation
  • Use signs to keep track of breakpoints
  • Add build tags to many commands
  • Some improvements for :GoRun
  • cmd: go 1.10 maintains a build cache now
  • fix missing <buffer> for debug mappings
vim-go questions on Stackoverflow (View All Questions)
  • Can vim-go completion third party framework
  • Vim - Go to previous location
  • Golang: ":GoRun" in vim-go and "go install" have conflicting GOPATH requirements on Windows
  • Vim go to std library method/function definition
  • Using vim-go, gocode and godep doesn't work together
  • Install vim-go in linux?
  • How to forbidden vim-go auto build when saving a *.go file
  • Changing Vim go-to behaviour
  • vim-go autocompletion not working
  • vim-go: Can't get autocompletion
  • Vim go to next search result across multiple files?
  • Vim-go: goimports not working
  • Vim-go - Indent with tabs not whitespaces
  • Prevent vim-go plugin from calling 'less' on save
  • vim-go deleting unused code when write to disk
  • vim go to tag: filter results by kind (say, go to function definition, ignoring prototypes)
  • vim-go: How to open files returned by GoFiles
  • vim -- 'go to previous buffer' broken
  • Vim go to line/column with --remote-silent
  • VIM Go Syntastic: main redeclared
  • Vim: Go to Beginning/End of Next Method
  • Vim go to ruby class declaration
  • ctags vim - go to method definition in same python class
  • Vim go to last edited line
  • How to make vim go to last line last character and then in insert mode?
  • how to make vim go to next line when at last character and press right arrow key
  • How do I make Vim go inside paired characters automatically during Insert Mode?
  • Vim 'go to file' functionality
  • vim: go to the last character of line plus one
vim-go list of languages used
vim-go latest release notes
v1.16 v1.16

Please checkout the changelog for this release:

Do you want to support vim-go? Checkout the fully optional donation option, a way to support vim-go's ongoing development directly:

v1.15 v1.15

Happy to welcome our newest collaborators @Carpetsmoker and @bhcleek

Please checkout the changelog for this release:

Do you want to support vim-go? Checkout the fully optional donation option, a way to support vim-go's ongoing development directly:

v1.14 v1.14

Please checkout the changelog for this release:

Do you want to support vim-go? Checkout the fully optional donation option, a way to support vim-go's ongoing development directly:

Other projects in VimL