.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools / gopls@v0.6.9 / doc / vim.md
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools/gopls@v0.6.9/doc/vim.md b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools/gopls@v0.6.9/doc/vim.md
new file mode 100644 (file)
index 0000000..8a49a4d
--- /dev/null
@@ -0,0 +1,229 @@
+# Vim / Neovim
+
+* [vim-go](#vimgo)
+* [LanguageClient-neovim](#lcneovim)
+* [Ale](#ale)
+* [vim-lsp](#vimlsp)
+* [vim-lsc](#vimlsc)
+* [coc.nvim](#cocnvim)
+* [govim](#govim)
+* [Neovim v0.5.0+](#neovim)
+  * [Installation](#neovim-install)
+  * [Custom Configuration](#neovim-config)
+  * [Imports](#neovim-imports)
+  * [Omnifunc](#neovim-omnifunc)
+  * [Additional Links](#neovim-links)
+
+## <a href="#vimgo" id="vimgo">vim-go</a>
+
+Use [vim-go] ver 1.20+, with the following configuration:
+
+```vim
+let g:go_def_mode='gopls'
+let g:go_info_mode='gopls'
+```
+
+## <a href="#lcneovim" id="lcneovim">LanguageClient-neovim</a>
+
+Use [LanguageClient-neovim], with the following configuration:
+
+```vim
+" 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()
+```
+
+## <a href="#ale" id="ale">Ale</a>
+
+Use [ale]:
+
+```vim
+let g:ale_linters = {
+  \ 'go': ['gopls'],
+  \}
+```
+
+see [this issue][ale-issue-2179]
+
+## <a href="#vimlsp" id="vimlsp">vim-lsp</a>
+
+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
+```
+
+## <a href="#vimlsc" id="vimlsc">vim-lsc</a>
+
+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).
+
+## <a href="#cocnvim" id="cocnvim">coc.nvim</a>
+
+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')
+```
+
+## <a href="#govim" id="govim">govim</a>
+
+In vim classic only, use the experimental [`govim`], simply follow the [install steps][govim-install].
+
+## <a href="#neovim" id="neovim">Neovim v0.5.0+</a>
+
+To use the new (still experimental) native LSP client in Neovim, make sure you
+[install][nvim-install] the prerelease v0.5.0 version of Neovim (aka “nightly”),
+the `nvim-lspconfig` configuration helper plugin, and check the
+[`gopls` configuration section][nvim-lspconfig] there.
+
+### <a href="#neovim-install" id="neovim-install">Installation</a>
+
+You can use Neovim's native plugin system.  On a Unix system, you can do that by
+cloning the `nvim-lspconfig` repository into the correct directory:
+
+```sh
+dir="${HOME}/.local/share/nvim/site/pack/nvim-lspconfig/opt/nvim-lspconfig/"
+mkdir -p "$dir"
+cd "$dir"
+git clone 'https://github.com/neovim/nvim-lspconfig.git' .
+```
+
+### <a href="#neovim-config" id="neovim-config">Custom Configuration</a>
+
+You can add custom configuration using Lua.  Here is an example of enabling the
+`unusedparams` check as well as `staticcheck`:
+
+```vim
+lua <<EOF
+  lspconfig = require "lspconfig"
+  lspconfig.gopls.setup {
+    cmd = {"gopls", "serve"},
+    settings = {
+      gopls = {
+        analyses = {
+          unusedparams = true,
+        },
+        staticcheck = true,
+      },
+    },
+  }
+EOF
+```
+
+### <a href="#neovim-imports" id="neovim-imports">Imports</a>
+
+To get your imports ordered on save, like `goimports` does, you can define
+a helper function in Lua:
+
+```vim
+lua <<EOF
+  -- …
+
+  function goimports(timeoutms)
+    local context = { source = { organizeImports = true } }
+    vim.validate { context = { context, "t", true } }
+
+    local params = vim.lsp.util.make_range_params()
+    params.context = context
+
+    -- See the implementation of the textDocument/codeAction callback
+    -- (lua/vim/lsp/handler.lua) for how to do this properly.
+    local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, timeout_ms)
+    if not result or next(result) == nil then return end
+    local actions = result[1].result
+    if not actions then return end
+    local action = actions[1]
+
+    -- textDocument/codeAction can return either Command[] or CodeAction[]. If it
+    -- is a CodeAction, it can have either an edit, a command or both. Edits
+    -- should be executed first.
+    if action.edit or type(action.command) == "table" then
+      if action.edit then
+        vim.lsp.util.apply_workspace_edit(action.edit)
+      end
+      if type(action.command) == "table" then
+        vim.lsp.buf.execute_command(action.command)
+      end
+    else
+      vim.lsp.buf.execute_command(action)
+    end
+  end
+EOF
+
+autocmd BufWritePre *.go lua goimports(1000)
+```
+
+(Taken from the [discussion][nvim-lspconfig-imports] on Neovim issue tracker.)
+
+### <a href="#neovim-omnifunc" id="neovim-omnifunc">Omnifunc</a>
+
+To make your <kbd>Ctrl</kbd>+<kbd>x</kbd>,<kbd>Ctrl</kbd>+<kbd>o</kbd> work, add
+this to your `init.vim`:
+
+```vim
+autocmd FileType go setlocal omnifunc=v:lua.vim.lsp.omnifunc
+```
+
+### <a href="#neovim-links" id="neovim-links">Additional Links</a>
+
+* [Neovim's official LSP documentation][nvim-docs].
+
+[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
+[nvim-docs]: https://neovim.io/doc/user/lsp.html
+[nvim-install]: https://github.com/neovim/neovim/wiki/Installing-Neovim
+[nvim-lspconfig]: https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md#gopls
+[nvim-lspconfig-imports]: https://github.com/neovim/nvim-lspconfig/issues/115