# Vim / Neovim ## vim-go Use [vim-go] ver 1.20+, with the following configuration: ``` let g:go_def_mode='gopls' let g:go_info_mode='gopls' ``` ## LanguageClient-neovim Use [LanguageClient-neovim], with the following configuration: ``` " Launch gopls when Go files are in use let g:LanguageClient_serverCommands = { \ 'go': ['gopls'] \ } " Run gofmt on save autocmd BufWritePre *.go :call LanguageClient#textDocument_formatting_sync() ``` ## Ale Use [ale]: ```vim let g:ale_linters = { \ 'go': ['gopls'], \} ``` see [this issue][ale-issue-2179] ## vim-lsp Use [prabirshrestha/vim-lsp], with the following configuration: ```vim augroup LspGo au! autocmd User lsp_setup call lsp#register_server({ \ 'name': 'go-lang', \ 'cmd': {server_info->['gopls']}, \ 'whitelist': ['go'], \ }) autocmd FileType go setlocal omnifunc=lsp#complete "autocmd FileType go nmap gd (lsp-definition) "autocmd FileType go nmap ,n (lsp-next-error) "autocmd FileType go nmap ,p (lsp-previous-error) augroup END ``` ## vim-lsc Use [natebosch/vim-lsc], with the following configuration: ```vim let g:lsc_server_commands = { \ "go": { \ "command": "gopls serve", \ "log_level": -1, \ "suppress_stderr": v:true, \ }, \} ``` The `log_level` and `suppress_stderr` parts are needed to prevent breakage from logging. See issues [#180](https://github.com/natebosch/vim-lsc/issues/180) and [#213](https://github.com/natebosch/vim-lsc/issues/213). ## coc.nvim Use [coc.nvim], with the following `coc-settings.json` configuration: ```json "languageserver": { "golang": { "command": "gopls", "rootPatterns": ["go.mod", ".vim/", ".git/", ".hg/"], "filetypes": ["go"], "initializationOptions": { "usePlaceholders": true } } } ``` Other [settings](settings.md) can be added in `initializationOptions` too. The `editor.action.organizeImport` code action will auto-format code and add missing imports. To run this automatically on save, add the following line to your `init.vim`: ```vim autocmd BufWritePre *.go :call CocAction('runCommand', 'editor.action.organizeImport') ``` ## govim In vim classic only, use the experimental [`govim`], simply follow the [install steps][govim-install]. [vim-go]: https://github.com/fatih/vim-go [LanguageClient-neovim]: https://github.com/autozimu/LanguageClient-neovim [ale]: https://github.com/w0rp/ale [ale-issue-2179]: https://github.com/w0rp/ale/issues/2179 [prabirshrestha/vim-lsp]: https://github.com/prabirshrestha/vim-lsp/ [natebosch/vim-lsc]: https://github.com/natebosch/vim-lsc/ [natebosch/vim-lsc#180]: https://github.com/natebosch/vim-lsc/issues/180 [coc.nvim]: https://github.com/neoclide/coc.nvim/ [`govim`]: https://github.com/myitcv/govim [govim-install]: https://github.com/myitcv/govim/blob/master/README.md#govim---go-development-plugin-for-vim8