This is a creation in Article, where the information may have evolved or changed.
Go (Golang) support for Vim, which comes with pre-defined sensible settings (like Auto gofmt on Save), with AutoComplete, Snippet support, improved syntax highlighting, go toolchain commands, and more. If needed vim-go installs all necessary binaries for providing seamless vim integration with current commands. It ' s highly customizable and each individual feature can disabled/enabled easily.
Features
- Improved Syntax highlighting with items such as Functions, Operators, Methods.
- Auto Completion Support via
gocode
- Better on
gofmt save, which keeps cursor position and doesn ' t break your undo history
- Go to Symbol/declaration with
:GoDef
- Look up documentation with
:GoDoc inside Vim or open it in browser
- Automatically import packages via
:GoImport or plug it into AutoSave
- Compile your package
:GoBuild with, install it with :GoInstall or test them with :GoTest (also supports running single tests via )
- Quickly execute your current file/files with
:GoRun
- Automatic
GOPATH detection based on the directory structure (i.e. projects gb , godep vendored projects)
- Change or display with
GOPATH:GoPath
- Create a coverage profile and display annotated source code to see which functions is covered with
:GoCoverage
- Call
gometalinter :GoMetaLinter with, which invokes all possible linters (Golint, vet, Errcheck, Deadcode, etc ...) and shows the warnings/ Errors
- Lint Your code with
:GoLint
- Run your code through to
:GoVet catch static errors
- Advanced Source analysis tools utilizing guru, such as
:GoImplements , :GoCallees , and:GoReferrers
- Precise Type-safe renaming of identifiers with
:GoRename
- List all source files and dependencies
- Unchecked Error checking with
:GoErrCheck
- Integrated and improved snippets, supporting
ultisnips orneosnippet
- Share your current code to play.golang.org with
:GoPlay
- On-the-fly type information about the word under the cursor. Plug it into your custom vim function.
- Go asm Formatting on save
- Tagbar support to show tags of the source code in a sidebar with
gotags
- Custom Vim text objects such as
a function or inner function list.
- Jump to function or type declarations with
:GoDecls or:GoDeclsDir
- A Async launcher for the GO command was implemented for Neovim, fully async building and testing (Beta).
- Integrated with the Neovim terminal, launch and other
:GoRun go commands in their own new terminal. (Beta)
- Alternate between implementation and test code with
:GoAlternate
Checkout The official tutorial that goes literally over all features and shows many tips and tricks. It shows how to install Vim-go and explains many unknown use cases. Recommended for beginners as well as advanced users:https://github.com/fatih/vim-go-tutorial
Install
Master branch is supposed to be a development branch. So stuff here can break and change. Please try the latest release
Vim-go follows the standard runtime path structure, so I highly recommend to use a common and well known plugin manager to Install Vim-go. Vim-go with other go oriented vim plugins. For pathogen just clone the repo. For other plugin managers add the appropriate lines and execute the plugin ' s install command.
- pathogen
-
git clone https://github.com/fatih/vim-go.git ~/.vim/bundle/vim-go
- vim-plug
- neobundle
-
neobundle ' fatih/vim-go '
- vundle
- vim packages (since V Im 7.4.1528)
-
git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go li>
Sure all necessary binaries is installed (such as,, gocode godef goimports etc.). You can easily install them with the included :GoInstallBinaries command. If invoked, all necessary binaries would be is automatically downloaded and installed to your $GOBIN environment (if not set it would use $GOPATH/bin ). Note that this command requires for git fetching the individual Go packages. Additionally, use to :GoUpdateBinaries update the installed binaries.
Optional
- Autocompletion is enabled by default via
<C-x><C-o> . To get real-time completion (completion by type) Install:neocomplete-Vim or Deoplete and deoplete-go for Neovim or Sim Pleautocmplpop
- To display source code tag information on a sidebar install Tagbar.
- For snippet features Install:neosnippet or ultisnips.
- Screenshot color scheme is a slightly modified Molokai:fatih/molokai.
- For a better documentation viewer Checkout:go-explorer.
Usage
Many of the plugin ' s features is enabled by default. There is no additional settings needed. All usages and commands is listed in doc/vim-go.txt . Note that help tags needs to be populated. Check your plugin manager settings to generate the documentation (some do it automatically). After a just open the help page to see all commands:
:help vim-go
Example Mappings
Vim-go has several <Plug> mappings which can is used to create custom mappings. Unless otherwise specified, none of these mappings is enabled by default. Here some examples you might find useful:
Run commands such as for the current go run file <leader>r go build go test <leader>b <leader>t with and respectively. Display beautifully annotated source code to see which functions is covered with <leader>c .
Au FileType go nmap <leader>r <Plug> (go-run) au FileType go nmap <leader>b <Plug> (go-build) au File Type go nmap <leader>t <Plug> (go-test) au FileType go nmap <leader>c <Plug> (go-coverage)
By default the mapping gd are enabled, which opens the target identifier in current buffer. You can also open the definition/declaration, in a new vertical, horizontal, or tab, for the word under your cursor:
Au FileType go nmap <leader>ds <Plug> (go-def-split) au FileType go nmap <leader>dv <Plug> ( go-def-vertical) au FileType go nmap <leader>dt <Plug> (go-def-tab)
Open the relevant godoc for the word under the cursor with an <leader>gd or open it vertically with<leader>gv
Au FileType go nmap <leader>gd <Plug> (go-doc) au FileType go nmap <leader>gv <Plug> ( go-doc-vertical)
Or Open the Godoc in browser
Au FileType go nmap <leader>gb <Plug> (go-doc-browser)
Show a list of interfaces which is implemented by the type under your cursor with<leader>s
Au FileType go nmap <leader>s <Plug> (go-implements)
Show type info for the word under your cursor with <leader>i (useful if you have disabled auto showing type info via g:go_auto_type_info )
Au FileType go nmap <leader>i <Plug> (go-info)
Rename The identifier under the cursor to a new name
Au FileType go nmap <leader>e <Plug> (go-rename)
More <Plug> mappings can is seen with :he go-mappings . Also These is just recommendations, you is free to create more advanced mappings or functions based on :he go-commands .
Settings
Below is some settings you might find useful. For the full list see :he go-settings .
By default syntax-highlighting for Functions, Methods and Structs are disabled. To change it:
Let g:go_highlight_functions = 1let G:go_highlight_methods = 1let G:go_highlight_fields = 1let G:go_highlight_types = 1let G:go_highlight_operators = 1let g:go_highlight_build_constraints = 1
Enable Goimports to automatically insert import paths instead of GOFMT:
Let G:go_fmt_command = "Goimports"
By default vim-go shows errors for the FMT command, to disable it:
Let g:go_fmt_fail_silently = 1
Disable Auto FMT on Save:
Let G:go_fmt_autosave = 0
Disable opening browser after posting your snippet to play.golang.org :
Let G:go_play_open_browser = 0
By default if :GoInstallBinaries is called, the binaries was installed to $GOBIN or $GOPATH/bin . To change it:
Let G:go_bin_path = expand ("~/.gotools") Let G:go_bin_path = "/home/fatih/.mypath" "or give absolute path
Disable updating dependencies when installing/updating binaries:
Let G:go_get_update = 0