mirror of
https://github.com/golang/go
synced 2024-11-06 00:36:14 -07:00
846f856e7d
Change-Id: Iecdc087da7e48a170616e0453c5c4fe1a45ef95e Reviewed-on: https://go-review.googlesource.com/c/tools/+/201419 Reviewed-by: Ian Cottrell <iancottrell@google.com>
113 lines
2.9 KiB
Markdown
113 lines
2.9 KiB
Markdown
# 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 <buffer> gd <plug>(lsp-definition)
|
|
"autocmd FileType go nmap <buffer> ,n <plug>(lsp-next-error)
|
|
"autocmd FileType go nmap <buffer> ,p <plug>(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
|