summaryrefslogtreecommitdiffstats
path: root/doc/vim-go.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/vim-go.txt')
-rw-r--r--doc/vim-go.txt2855
1 files changed, 0 insertions, 2855 deletions
diff --git a/doc/vim-go.txt b/doc/vim-go.txt
deleted file mode 100644
index dbb6af1f..00000000
--- a/doc/vim-go.txt
+++ /dev/null
@@ -1,2855 +0,0 @@
-if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'go') == -1
-
-*vim-go.txt* Go development plugin
-*vim-go*
-
-==============================================================================
-# #
-# ## ## #### ## ## ###### ####### #
-# ## ## ## ### ### ## ## ## ## #
-# ## ## ## #### #### ## ## ## #
-# ## ## ## ## ### ## ####### ## #### ## ## #
-# ## ## ## ## ## ## ## ## ## #
-# ## ## ## ## ## ## ## ## ## #
-# ### #### ## ## ###### ####### #
-# #
-==============================================================================
-CONTENTS *go-contents*
-
- 1. Intro........................................|go-intro|
- 2. Install......................................|go-install|
- 3. Commands.....................................|go-commands|
- 4. Mappings.....................................|go-mappings|
- 5. Text Objects.................................|go-text-objects|
- 6. Functions....................................|go-functions|
- 7. Settings.....................................|go-settings|
- 8. Syntax highlighting..........................|go-syntax|
- 9. Debugger.....................................|go-debug|
- 10. FAQ/Troubleshooting..........................|go-troubleshooting|
- 11. Development..................................|go-development|
- 12. Donation.....................................|go-donation|
- 13. Credits......................................|go-credits|
-
-==============================================================================
-INTRO *go-intro*
-
-Go (golang) support for Vim. vim-go comes with sensible predefined settings
-(e.g. automatic `gofmt` on save), has code completion, snippet support,
-improved syntax highlighting, go toolchain commands, etc. It is highly
-customizable, and individual features can be toggled easily. vim-go leverages
-a number of tools developed by the Go community to provide a seamless Vim
-experience.
-
- * Compile your package with |:GoBuild|, install it with |:GoInstall| or
- test it with |:GoTest|. Run a single test with |:GoTestFunc|).
- * Quickly execute your current file(s) with |:GoRun|.
- * Improved syntax highlighting and folding.
- * Debug programs with integrated `delve` support with |:GoDebugStart|.
- * Code completion support via `gocode` and `gopls`.
- * `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 `golangci-lint` 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|.
- * Automatic `GOPATH` detection which works with `gb` and `godep`. Change or
- display `GOPATH` with |:GoPath|.
- * Integrated and improved snippets, supporting `ultisnips`, `neosnippet`,
- and `vim-minisnip`.
- * Share your current code to play.golang.org with |:GoPlay|.
- * On-the-fly information about the word under the cursor. Plug it into your
- custom Vim function.
- * Text objects such as "a function" (|go-af|) or "inner function" (|go-if|).
- * Most commands are run asynchronous in Neovim and Vim 8. Fully async
- building and testing.
- * Integrated with the Neovim terminal, launch |:GoRun| and other Go commands
- in a terminal buffer.
- * Switch between `file.go` and `file_test.go` code with |:GoAlternate|.
- * Supports integration with the Tagbar and ctrlp.vim plugins.
- * ...and more...
-
-==============================================================================
-INSTALL *go-install*
-
-vim-go requires at least Vim 8.0.1453 or Neovim 0.4.0. On macOS, if you are
-still using your system version of vim, you can use homebrew to keep your
-version of Vim up-to-date with the following terminal command:
->
- brew install vim
-
-The latest stable release, https://github.com/fatih/vim-go/releases/latest, 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 and should work with any of
-the major plugin managers.
-
-For Pathogen or Vim |packages|, just clone the repo. For other plugin managers
-you may also need to add the lines to your vimrc to execute the plugin
-manager's install command.
-
-* Vim 8 |packages| >
-
- git clone https://github.com/fatih/vim-go.git \
- ~/.vim/pack/plugins/start/vim-go
-<
-* https://github.com/tpope/vim-pathogen >
-
- git clone https://github.com/fatih/vim-go.git ~/.vim/bundle/vim-go
-<
-* https://github.com/junegunn/vim-plug >
-
- Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
-<
-* https://github.com/Shougo/neobundle.vim >
-
- NeoBundle 'fatih/vim-go'
-<
-* https://github.com/gmarik/vundle >
-
- Plugin 'fatih/vim-go'
-<
-* Manual (not recommended) >
-
- Copy all of the files into your `~/.vim` directory
-<
-
-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|, to
-`go get` all the required binaries. The binaries will be installed to $GOBIN
-or $GOPATH/bin (default: $HOME/go/bin). It requires `git`.
-
-Depending on your installation method, you may have to generate the plugin's
-|:helptags| manually (e.g. `:helptags ALL`).
-
-Code completion is enabled by default via 'omnifunc', which you can trigger
-with |i_CTRL-X_CTRL-O| (`<C-x><C-o>`).
-
-Supported Go plugins~ *vim-go-plugins*
-
-The following plugins are supported for use with vim-go:
-
-* Real-time completion (Vim):
- https://github.com/Shougo/neocomplete.vim
-
-* Real-time completion (Neovim and Vim 8):
- https://github.com/Shougo/deoplete.nvim
-
- Add the following line to your vimrc. This instructs deoplete to use omni
- completion for Go files.
-
- call deoplete#custom#option('omni_patterns', { 'go': '[^. *\t]\.\w*' })
-
-* Display source code navigation in a sidebar:
- https://github.com/majutsushi/tagbar
-
-* Snippets:
- https://github.com/Shougo/neosnippet.vim or
- https://github.com/SirVer/ultisnips or
- https://github.com/joereynolds/vim-minisnip
-
-* Interactive |:GoDecls| and |:GoDeclsDir|:
- https://github.com/ctrlpvim/ctrlp.vim or
- https://github.com/junegunn/fzf.vim or
- https://github.com/Shougo/unite.vim or
- https://github.com/Shougo/denite.nvim
-
-==============================================================================
-COMMANDS *go-commands*
-
- *:GoReportGitHubIssue*
-:GoReportGitHubIssue
- GoReportGitHubIssue opens the default browser and starts a new bug report
- with useful system information.
-
- *:GoPath*
-:GoPath [path]
-
- GoPath sets and overrides GOPATH with the given {path}. If no {path} is
- given it shows the current GOPATH. If `""` is given as path, it clears
- current `GOPATH` which was set with |:GoPath| and restores `GOPATH` back
- to the initial value which was sourced when Vim was started.
-
- *:GoImport*
-:GoImport[!] [path]
-
- Import ensures that the provided package {path} is imported in the current
- Go buffer, using proper style and ordering. If {path} is already being
- imported, an error will be displayed and the buffer will be untouched.
-
- If [!] is given it will download the package with `go get`
-
- *:GoImportAs*
-:GoImportAs [localname] [path]
-
- Same as Import, but uses a custom local name for the package.
-
- *:GoDrop*
-:GoDrop [path]
-
- Remove the import line for the provided package {path}, if present in the
- current Go buffer. If {path} is not being imported, an error will be
- displayed and the buffer will be untouched.
-
- *:GoLint*
-:GoLint! [packages]
-
- Run golint for the directory under your current file, or for the given
- packages.
-
- If [!] is not given the first error is jumped to.
-
- *:GoDoc*
-:GoDoc [word]
-
- Open the relevant GoDoc in split window for either the word[s] passed to
- the command or by default, the word under the cursor.
-
- *:GoDocBrowser*
-:GoDocBrowser [word]
-
- Open the relevant GoDoc in browser for either the word[s] passed to the
- command or by default, the word under the cursor. By default it opens the
- documentation in 'https://pkg.go.dev'. To change it see |'g:go_doc_url'|.
-
- *:GoFmt*
-:GoFmt
-
- Filter the current Go buffer through gofmt. It tries to preserve cursor
- position and avoids replacing the buffer with stderr output.
-
- *:GoImports*
-:GoImports
-
- Filter the current Go buffer through goimports (needs to be installed).
- `goimports` automatically discards/add import path based on the code. Like
- |:GoFmt|, It tries to preserve cursor position and avoids replacing the
- buffer with stderr output.
-
- *:GoPlay*
-:[range]GoPlay
-
- Share snippet to play.golang.org. If no [range] is given it shares
- the whole file, otherwise the selected lines are shared. Snippet URL
- is copied to system clipboard if Vim is compiled with 'clipboard' or
- 'xterm-clipboard' otherwise it's get yanked into the `""` register.
-
- *:GoVet*
-:GoVet[!] [options]
-
- Run `go vet` for the directory under your current file. Vet examines Go
- source code and reports suspicious constructs, such as Printf calls whose
- arguments do not align with the format string. Vet uses heuristics that do
- not guarantee all reports are genuine problems, but it can find errors not
- caught by the compilers.
-
- You may optionally pass any valid go vet flags/options.
-
- If [!] is not given the first error is jumped to.
-
- *:GoDef*
-:GoDef
-gd
-CTRL-]
-g<C-LeftMouse>
-<C-LeftMouse>
-
- Go to declaration/definition for the identifier under the cursor. By
- default the CTRL-] shortcut, the mapping `gd` and <C-LeftMouse>,
- g<LeftMouse> are enabled to invoke :GoDef for the identifier under the
- cursor. See |'g:go_def_mapping_enabled'| to disable them. No explicit
- arguments are supported.
-
- vim-go also keeps a per-window location stack, roughly analogous to how
- Vim's internal |tags| functionality works. This is pushed to every time a
- jump is made using the GoDef functionality. In essence, this is a LIFO
- list of file locations you have visited with :GoDef that is retained to
- help you navigate software.
-
- The per-window location stack is shared with |:GoDefType|.
-
- *:GoDefType*
-:GoDefType
-
- Go to type definition for the identifier under the cursor.
-
- The per-window location stack is shared with |:GoDef|.
- *:GoDefStack*
-:GoDefStack [number]
-
- This command Jumps to a given location in the jumpstack, retaining all
- other entries. Jumps to non-existent entries will print an informative
- message, but are otherwise a noop.
-
- If no argument is given, it will print out an interactive list of all
- items in the stack. Its output looks like this:
-
- 1 /path/first/file.go|1187 col 16|AddThing func(t *Thing)
- > 2 /path/thing/thing.go|624 col 19|String() string
- 3 /path/thing/thing.go|744 col 6|func Sprintln(a ...interface{}) string
-
- This list shows the identifiers that you jumped to and the file and cursor
- position before that jump. The older jumps are at the top, the newer at
- the bottom.
-
- The '>' points to the active entry. This entry and any newer entries
- below it will be replaced if |:GoDef| is done from this location. The
- CTRL-t and |:GoDefPop| command will jump to the position above the active
- entry.
-
- Jumps to non-existent entries will print an informative message, but are
- otherwise a noop.
-
- *:GoDefStackClear*
-:GoDefStackClear
-
- Clears the current stack list and resets it.
-
- *:GoDefPop*
-:GoDefPop [count]
-CTRL-t
-
- Navigate to the [count] earlier entry in the jump stack, retaining the
- newer entries. If no argument is given, it will jump to the next most
- recent entry (`:GoDefPop 1`). If [count] is greater than the number of
- prior entries, an error will be printed and no jump will be performed.
-
- If you have used :GoDefPop to jump to an earlier location, and you issue
- another :GoDef command, the current entry will be replaced, and all newer
- entries will be removed, effectively resuming the stack at that location.
-
- By default [count]CTRL-t is enabled to invoke :GoDefPop. Similarly,
- hitting CTRL-t without a prior count is equivalent to `:GoDefPop 1`. See
- |'g:go_def_mapping_enabled'| to disable this.
-
- *:GoRun*
-:GoRun[!] [expand]
-
- Build and run your current main package. By default all main files for the
- current file is used. If an argument is passed, [expand] is used as file
- selector. For example use `:GoRun %` to select the current file only.
-
- You may optionally pass any valid go run flags/options. For a full list
- please see `go help run`.
-
- If [!] is not given the first error is jumped to.
-
- If using neovim then `:GoRun` will run in a new terminal according to
- |'g:go_term_mode'|.
-
- The working directory will be the directory containing the current buffer.
-
-
- *:GoBuild*
-:GoBuild[!] [expand]
-
- Build your package with `go build`. Errors are populated in the quickfix
- window. It automatically builds only the files that depends on the current
- file. `:GoBuild` doesn't produce a result file.
- Use |:make| to create a result file.
-
- You may optionally pass any valid go build flags/options. For a full list
- please see `go help build`. Options are expanded with [expand].
-
- If [!] is not given the first error is jumped to.
-
- If using neovim then this command is fully async, it does not block the
- UI.
-
- *:GoGenerate*
-:GoGenerate[!] [expand]
-
- Creates or updates your auto-generated source files by running `go
- generate`.
-
- You may optionally pass any valid go generate flags/options. For a full
- list please see `go help generate`. Options are expanded with [expand].
-
- If [!] is not given the first error is jumped to.
-
- *:GoInfo*
-:GoInfo
- Show type information about the identifier under the cursor. For example
- putting it above a function call is going to show the full function
- signature. By default it uses `gopls` to get the type informations. To
- change the underlying tool from `gopls` to another tool, see
- |'g:go_info_mode'|.
-
-
- *:GoInstall*
-:GoInstall[!] [options]
-
- Install your package with `go install`.
-
- You may optionally pass any valid go install flags/options. For a full
- list please see `go help install`.
-
- If [!] is not given the first error is jumped to.
-
- *:GoTest*
-:GoTest[!] [expand]
-
- Run the tests on your _test.go files via in your current directory. Errors
- are populated in the quickfix window. If an argument is passed, [expand]
- is used as file selector (useful for cases like `:GoTest ./...`).
-
- You may optionally pass any valid go test flags/options. For a full list
- please see `go help test`.
-
- GoTest times out automatically after 10 seconds. To customize the timeout
- use |'g:go_test_timeout'|. This feature is disabled if any arguments are
- passed to the `:GoTest` command.
-
- If [!] is not given the first error is jumped to.
-
- If using neovim `:GoTest` will run in a new terminal or run asynchronously
- in the background according to |'g:go_term_enabled'|. You can set the mode
- of the new terminal with |'g:go_term_mode'|.
-
- *:GoTestFunc*
-:GoTestFunc[!] [expand]
-
- Runs :GoTest, but only on the single test function immediate to your
- cursor using 'go test's '-run' flag.
-
- Lookup is done starting at the cursor (including that line) moving up till
- a matching `func Test` pattern is found or top of file is reached. Search
- will not wrap around when at the top of the file.
-
- If [!] is not given the first error is jumped to.
-
- *:GoTestCompile*
-:GoTestCompile[!] [expand]
-
- Compile your _test.go files via in your current directory. Errors are
- populated in the quickfix window. If an argument is passed, [expand] is
- used as file selector (useful for cases like `:GoTest ./...`). Useful to
- not run the tests and capture/fix errors before running the tests or to
- create test binary.
-
- If [!] is not given the first error is jumped to.
-
- *:GoCoverage*
-:GoCoverage[!] [options]
-
- Create a coverage profile and annotates the current file's source code. If
- called again it rerurns the tests.
-
- If [!] is not given the first error is jumped to.
-
- *:GoCoverageToggle*
-:GoCoverageToggle[!] [options]
-
- Create a coverage profile and annotates the current file's source code. If
- called again clears the annotation (works as a toggle).
-
- If [!] is not given the first error is jumped to.
-
- *:GoCoverageClear*
-:GoCoverageClear [options]
-
- Clears the coverage annotation.
-
-
- *:GoCoverageBrowser*
-:GoCoverageBrowser[!] [options]
-
- Create a coverage profile and open a browser to display the annotated
- source code of the current package.
-
- You may optionally pass any valid go test flags/options, such as
- `-covermode set,count,atomic`. For a full list please see `go help test`.
-
- If [!] is not given the first error is jumped to.
-
- *:GoErrCheck*
-:GoErrCheck! [options]
-
- Check for unchecked errors in you current package. Errors are populated in
- the quickfix window.
-
- You may optionally pass any valid errcheck flags/options. See
- `errcheck -h` for a full list.
-
- If [!] is not given the first error is jumped to.
-
- *:GoFiles*
-:GoFiles [source_files]
-
- Show source files for the current package. The [source_files] specifies
- which file types to list. See the "// Source files" section of
- `go list -h` for possible values; multiple values are accepted.
- Command-line completion also works for this command.
- The default is to use `GoFiles` if no arguments are given.
-
- *:GoDeps*
-:GoDeps
-
- Show dependencies for the current package.
-
- *:GoInstallBinaries*
-:GoInstallBinaries [binaries]
-
- Download and install all necessary Go tool binaries such as `godef`,
- `goimports`, `gopls`, etc. under |'g:go_bin_path'|. If [binaries] is
- supplied, then only the specified binaries will be installed. The default
- is to install everything.
-
- Set |'g:go_get_update'| to disable updating dependencies.
-
- *:GoUpdateBinaries*
-:GoUpdateBinaries [binaries]
-
- Download and update previously installed Go tool binaries such as `godef`,
- `goimports`, `gopls`, etc. under |'g:go_bin_path'|. If [binaries] is
- supplied, then only the specified binaries will be updated. The default is
- to update everything.
-
- Set |'g:go_get_update'| to disable updating dependencies.
-
- *:GoImplements*
-:GoImplements
-
- Show "implements" relation for a selected package. A list of interfaces
- for the type that implements an interface under the cursor (or selected
- package) is shown in a location list.
- *:GoRename*
-:GoRename[!] [to]
-
- Rename the identifier under the cursor to the desired new name. If no
- argument is given a prompt will ask for the desired identifier.
-
- If [!] is not given the first error is jumped to.
-
-
- *:GoGuruScope*
-:GoGuruScope [pattern] ...
-
- Changes the custom |'g:go_guru_scope'| setting and overrides it with the
- given package patterns. The custom scope is cleared (unset) if `""` is
- given as the only path. If no arguments is given it prints the current
- custom scope. Example patterns are:
->
- golang.org/x/tools/cmd/guru # a single package
- golang.org/x/tools/... # all packages beneath dir
- ... # the entire workspace.
-<
- Example usage, the following sets the scope to a `github.com/fatih/color`
- and to all packages under `golang.org/x/tools/`:
->
- :GoGuruScope github.com/fatih/color golang.org/x/tools/...
-<
- The following sets it to the entire workspace:
->
- :GoGuruScope ...
-<
- Under the hood, the patterns are all joined to a comma-separated list and
- passed to `guru`'s `-scope` flag.
-
- Also see |go-guru-scope|.
-
- *:GoCallees*
-:GoCallees
-
- Show "callees" relation for a selected package. A list of possible call
- targets for the type under the cursor (or selected package) is shown in a
- location list.
-
- *:GoCallers*
-:GoCallers
-
- Show "callers" relation for a selected function. A list of possible
- callers for the selected function under the cursor is shown in a location
- list.
-
- *:GoDescribe*
-:GoDescribe
-
- Shows various properties of the selected syntax: its syntactic kind, its
- type (for an expression), its value (for a constant expression), its size,
- alignment, method set and interfaces (for a type), its declaration (for an
- identifier), etc. Almost any piece of syntax may be described, and the
- guru will try to print all the useful information it can.
-
- *:GoCallstack*
-:GoCallstack
-
- Shows "callstack" relation for the selected function. An arbitrary path
- from the root of the callgraph to the selected function is shown in a
- location list. This may be useful to understand how the function is
- reached in a given program.
-
- *:GoFreevars*
-:GoFreevars
-
- Enumerates the free variables of the selection. "Free variables" is a
- technical term meaning the set of variables that are referenced but not
- defined within the selection, or loosely speaking, its inputs.
-
- This information is useful when considering whether to refactor the
- selection into a function of its own, as the free variables would be the
- necessary parameters of that function. It's also useful when you want to
- understand what the inputs are to a complex block of code even if you
- don’t plan to change it.
-
- *:GoChannelPeers*
-:GoChannelPeers
-
- Shows the set of possible sends/receives on the channel operand of the
- selected send or receive operation; the selection must be a `<-` token.
-
- For example, visually select a channel operand in the form of:
->
- done <- true
-<
- And call |:GoChannelPeers| on it. It will show where it was allocated, and
- the sending and receiving endings.
-
- *:GoReferrers*
-:GoReferrers
-
- The referrers query shows the set of identifiers that refer to the same
- object as does the selected identifier.
-
- *:GoSameIds*
-:GoSameIds
-
- Highlights all identifiers that are equivalent to the identifier under the
- cursor.
-
- *:GoSameIdsClear*
-:GoSameIdsClear
-
- Clears all SameIds highlights from a |:GoSameIds| call.
-
- *:GoSameIdsToggle*
-:GoSameIdsToggle
-
- Toggle between |:GoSameIds| and |:GoSameIdsClear|.
-
- *:GoSameIdsAutoToggle*
-:GoSameIdsAutoToggle
-
- Enables or disables automatic highlighting of |:GoSameIds| while moving
- the cursor. This basically toggles the option |'g:go_auto_sameids'|
- on/off.
- If enabled it starts highlighting whenever your cursor is staying at the
- same position for a configurable period of time (see |'g:go_updatetime'|).
- If disabled it clears and stops automatic highlighting.
-
- *:GoMetaLinter*
-:GoMetaLinter! [path]
-
- Calls the underlying `golangci-lint` tool and displays all warnings and
- errors in the |quickfix| window. By default the following linters are
- enabled: `vet`, `golint`, and `errcheck`. This can be changed with the
- |'g:go_metalinter_enabled'| variable. To override the command completely
- use the variable |'g:go_metalinter_command'|. To override the maximum
- linters execution time use |'g:go_metalinter_deadline'| variable.
-
- If [!] is not given the first error is jumped to.
-
- *:GoDiagnostics*
-:GoDiagnostics! [packages]
-
- Displays the diagnostics from `gopls` for the given packages in a
- |quickfix| window. The diagnostics for the current package are displayed
- when no package is given. The diagnostics for all packages will be
- displayed when `all` is as an argument.
-
- Disabled when |'g:go_diagnostics_enabled'| is not set.
-
- If [!] is not given the first error is jumped to.
-
- *:GoBuildTags*
-:GoBuildTags [tags]
-
- Changes the build tags for various commands. If you have any file that
- uses a custom build tag, such as `// +build integration` , this command
- can be used to pass it to all tools that accepts tags, such as gopls,
- guru, gorename, etc.
-
- The build tags is cleared (unset) if `""` is given. If no arguments are
- given it prints the current build tags.
-
- *:AsmFmt*
-:AsmFmt
-
- Filter the current Go asm buffer through asmfmt. It tries to preserve
- cursor position and avoids replacing the buffer with stderr output.
-
- *:GoAlternate*
-:GoAlternate[!]
-
- Alternates between the implementation and test code. For example if in
- main.go, switch to main_test.go. Uses the |'g:go_alternate_mode'| setting
- as the command to open the file.
-
- If [!] is given then it switches to the new file even if it does not
- exist.
-
- If you would like to override the traditional commands for alternating,
- add the following to your .vimrc:
->
- augroup go
- autocmd!
- autocmd Filetype go
- \ command! -bang A call go#alternate#Switch(<bang>0, 'edit')
- \| command! -bang AV call go#alternate#Switch(<bang>0, 'vsplit')
- \| command! -bang AS call go#alternate#Switch(<bang>0, 'split')
- augroup END
-<
-
- *:GoPointsTo*
-:GoPointsTo
-
- Show all variables to which the pointer under the cursor may point to.
-
- *:GoWhicherrs*
-:GoWhicherrs
-
- Show the list of possible constants, global variables, and concrete types
- for the error type under the cursor in a location list.
-
- *:GoDecls*
-:GoDecls [file]
-
- Show all function and type declarations for the current file. If
- [file] is non empty it parses the given file.
- Requires `ctrlp.vim` or `fzf`; it will autodetect the plugin if installed,
- but you can use |'g:go_decls_mode'| to force using one or the other.
- By default `type` and `func` declarations are shown. This can be changed
- via |'g:go_decls_includes'|. Also see |unite-decls|, |denite-decls|.
-
- *:GoDeclsDir*
-:GoDeclsDir [dir]
-
- Show all function and type declarations for the current directory. If
- [dir] is given it parses the given directory.
-
- *unite-decls*
- *denite-decls*
-:Unite decls[:path]
-:Denite decls[:path]
-
- Only enabled if `unite.vim` or `denite.nvim` is installed. Show
- declarations for all functions and types on the current file or directory
- or for [path] if given.
-
- Note: `denite.nvim` requires NeoVim or Vim 8 with |:python3| enabled.
->
- " show declarations on the parent directory of the current file
- :Unite decls
- :Denite decls
-
- " show declarations in the file.
- :Unite decls:foo/bar.go
- :Denite decls:foo/bar.go
-
- " show declarations in the directory "foo".
- :Unite decls:foo
- :Denite decls:foo
-<
- *:GoImpl*
-:GoImpl [receiver] [interface]
-
- Generates method stubs for implementing an interface. If no arguments is
- passed it takes the identifier under the cursor to be the receiver and
- asks for the interface type to be generated. If used with arguments, the
- receiver and the interface needs to be specified. Example usages:
->
- :GoImpl f *Foo io.Writer
- :GoImpl t Type io.ReadWriteCloser
-<
- *:GoAddTags*
-:[range]GoAddTags [key],[option] [key1],[option] ...
-
- Adds field tags for the fields of a struct. If called inside a struct it
- automatically add field tags with the `json` key and the value
- automatically generated based on the field name. An error message is given
- if it's called outside a struct definition or if the file is not correctly
- formatted.
-
- If [range] is given, only the selected fields will be changed.
-
- The default `json` can be changed by providing one or more [key]
- arguments. An example of adding `xml` and `db` would be:
->
- :GoAddTags xml db
-<
- If [option] is passed it'll either add a new tag with an option or will
- modify existing tags. An example of adding `omitempty` to all `json`
- fields would be:
->
- :GoAddTags json,omitempty
-<
- You can define a constant value instead of the default field based value.
- For example the following command will add ``valid:"1"`` to all fields.
->
- :GoAddTags valid:1
-<
- *:GoRemoveTags*
-:[range]GoRemoveTags [key],[option] [key1],[option1] ...
-
- Remove field tags for the fields of a struct. If called inside a struct it
- automatically remove all field tags. An error message is given if it's
- called outside a struct definition or if the file is not correctly
- formatted
-
- If [range] is given, only the selected fields will be changed.
-
- If [key] is given, it will only remove those keys. Example:
->
- :GoRemoveTags json
-<
- If [option] is passed with a [key], it will only remove the options.
- Example, this will only remove `omitempty` options from fields containing
- `json`:
->
- :GoRemoveTags json,omitempty
-<
- *:GoAutoTypeInfoToggle*
-:GoAutoTypeInfoToggle
-
- Toggles |'g:go_auto_type_info'|.
-
- *:GoFmtAutoSaveToggle*
-:GoFmtAutoSaveToggle
-
- Toggles |'g:go_fmt_autosave'|.
-
- *:GoModFmtAutoSaveToggle*
-:GoModFmtAutoSaveToggle
-
- Toggles |'g:go_mod_fmt_autosave'|.
-
- *:GoAsmFmtAutoSaveToggle*
-:GoAsmFmtAutoSaveToggle
-
- Toggles |'g:go_asmfmt_autosave'|.
-
- *:GoMetaLinterAutoSaveToggle*
-:GoMetaLinterAutoSaveToggle
-
- Toggles |'g:go_metalinter_autosave'|.
-
- By default, `golangci-lint` messages will be shown in the |location-list|
- window. The list to use can be set using |'g:go_list_type_commands'|.
-
- *:GoTemplateAutoCreateToggle*
-:GoTemplateAutoCreateToggle
-
- Toggles |'g:go_template_autocreate'|.
-
- *:GoKeyify*
-:GoKeyify
-
- Uses `keyify` to turn unkeyed struct literals into keyed ones.
-
- For example:
->
- Person{"John", "Smith"}
-<
- Becomes:
->
- Person{
- Name: "John",
- Surname: "Smith",
- }
-<
- *:GoFillStruct*
-:GoFillStruct
-
- Use `fillstruct` to fill a struct literal with default values. Existing
- values (if any) are preserved. The cursor must be on the struct you wish
- to fill.
-
- For example:
->
- addr := net.Address{Name: "Ford Prefect"}
-<
- Becomes:
->
- addr := net.Address{
- Name: "Ford Prefect",
- Email: "",
- }
-<
-
- *:GoIfErr*
-:GoIfErr
-
- Generate if err != nil { return ... } automatically which infer the type
- of return values and the numbers.
-
- For example:
->
- func doSomething() (string, error) {
- f, err := os.Open("file")
- }
-<
- Becomes:
->
- func doSomething() (string, error) {
- f, err := os.Open("file")
- if err != nil {
- return "", err
- }
- }
-<
- *:GoModFmt*
-:GoModFmt
-
- Filter the current go.mod buffer through "go mod edit -fmt" command. It
- tries to preserve cursor position and avoids replacing the buffer with
- stderr output.
-
- *:GoAddWorkspace*
-:GoAddWorkspace [dir] ...
-
- Add directories to the `gopls` workspace.
-
- *:GoLSPDebugBrowser*
-:GoLSPDebugBrowser
-
- Open a browser to see gopls debugging information.
-
-==============================================================================
-MAPPINGS *go-mappings*
-
-vim-go has several <Plug> keys which can be used to create custom mappings
-For example, to create a mapping that calls `go run` for the current package,
-create a mapping for the `(go-run)`: >
-
- au FileType go nmap <leader>r <Plug>(go-run)
-
-As always one is free to create more advanced mappings or functions based with
-|go-commands|. For more information please check out the mappings command
-documentation in the |go-commands| section. Available <Plug> keys are:
-
- *(go-run)*
-
-Calls `go run` for the current main package
-
- *(go-run-tab)*
-
-Calls `go run` for the current file in a new terminal tab
-This option is neovim only.
-
- *(go-run-split)*
-
-Calls `go run` for the current file in a new terminal horizontal split
-This option is neovim only.
-
- *(go-run-vertical)*
-
-Calls `go run` for the current file in a new terminal vertical split
-This option is neovim only.
-
- *(go-build)*
-
-Calls `go build` for the current package
-
- *(go-generate)*
-
-Calls `go generate` for the current package
-
- *(go-info)*
-
-Shows type information for the word under the cursor
-
- *(go-install)*
-
-Calls `go install` for the current package
-
- *(go-test)*
-
-Calls `go test` for the current package
-
- *(go-test-func)*
-
-Calls `go test -run '...'` for the test function immediate to cursor
-
- *(go-test-compile)*
-
-Calls `go test -c` for the current package
-
- *(go-coverage)*
-
-Calls `go test -coverprofile-temp.out` for the current package and shows the
-coverage annotation.
-
- *(go-coverage-clear)*
-
-Clears the coverage annotation
-
- *(go-coverage-toggle)*
-
-Calls `go test -coverprofile-temp.out` for the current package and shows the
-coverage annotation. If run again it acts as a toggle and clears the
-annotation.
-
- *(go-imports)*
-
-Calls `goimports` for the current package
-
- *(go-lint)*
-
-Calls `golint` for the current package
-
- *(go-vet)*
-
-Calls `go vet` for the current package
-
-
- *(go-files)*
-
-Show source files that depends for the current package
-
-
- *(go-deps)*
-
-Show dependencies for the current package
-
- *(go-doc)*
-
-Show the relevant GoDoc for the word under the cursor in a split window
-leftabove (default mode).
-
- *(go-doc-split)*
-
-Show the relevant GoDoc for the word under the cursor in a split window.
-
-
- *(go-doc-vertical)*
-
-Show the relevant GoDoc for the word under the cursor in a vertical split
-window.
-
- *(go-doc-tab)*
-
-Show the relevant GoDoc for the word under the cursor in a tab window.
-
-
- *(go-doc-browser)*
-
-Show the relevant GoDoc for the word under in browser
-
- *(go-def)*
-
-Goto declaration/definition. Results are shown in the current window.
-
- *(go-def-split)*
-
-Goto declaration/definition. Results are shown in a split window.
-Jumps to an existing buffer if |'g:go_def_reuse_buffer'| is enabled.
-
- *(go-def-vertical)*
-
-Goto declaration/definition. Results are shown in a vertical split window.
-Jumps to an existing buffer if |'g:go_def_reuse_buffer'| is enabled.
-
- *(go-def-tab)*
-
-Goto declaration/definition. Results are shown in a tab window.
-Jumps to an existing buffer if |'g:go_def_reuse_buffer'| is enabled.
-
- *(go-def-type)*
-
-Goto type declaration/definition. Results are shown in the current window.
-Jumps to an existing buffer if |'g:go_def_reuse_buffer'| is enabled.
-
- *(go-def-type-vertical)*
-Goto type declaration/definition. Results are shown in a vertical split
-window.
-Jumps to an existing buffer if |'g:go_def_reuse_buffer'| is enabled.
-
- *(go-def-type-split)*
-Goto type declaration/definition. Results are shown in a split window.
-Jumps to an existing buffer if |'g:go_def_reuse_buffer'| is enabled.
-
- *(go-def-type-tab)*
-Goto type declaration/definition. Results are shown in a tab window.
-Jumps to an existing buffer if |'g:go_def_reuse_buffer'| is enabled.
-
- *(go-def-stack)*
-
-Shows the godef tag stack
-
- *(go-def-stack-clear)*
-
-Resets and clears the tag stack
-
- *(go-def-pop)*
-
-Jump to previous entry in the tag stack
-
- *(go-implements)*
-
-Show the interfaces that the type under the cursor implements.
-
- *(go-rename)*
-
-Rename the identifier under the cursor to the desired new name
-
- *(go-callees)*
-
-Show the call targets for the type under the cursor
-
- *(go-callers)*
-
-Show possible callers of selected function
-
- *(go-describe)*
-
-Describe selected syntax: definition, methods, etc
-
- *(go-callstack)*
-
-Show path from callgraph root to selected function
-
- *(go-freevars)*
-
-Show free variables of selection
-
- *(go-channelpeers)*
-
-Show send/receive corresponding to selected channel op
-
- *(go-referrers)*
-
-Show all refs to entity denoted by selected identifier
-
- *(go-pointsto)*
-
-Show all variables to which the pointer under the cursor may point to.
-
- *(go-metalinter)*
-
-Calls `go-metalinter` for the current directory
-
- *(go-alternate-edit)*
-
-Alternates between the implementation and test code in the current window
-
- *(go-alternate-split)*
-
-Alternates between the implementation and test code in a new horizontal split
-
- *(go-alternate-vertical)*
-
-Alternates between the implementation and test code in a new vertical split
-
- *(go-import)*
-
-Calls `:GoImport` for the current package
-
- *(go-iferr)*
-
-Generate if err != nil { return ... } automatically which infer the type of
-return values and the numbers.
-
- *(go-mod-fmt)*
-
-Calls |:GoModFmt| for the current buffer
-
- *(go-diagnostics)*
-Calls `:GoDiagnostics`
-
-==============================================================================
-TEXT OBJECTS *go-text-objects*
-
-vim-go comes with several custom |text-objects| that can be used to operate
-upon regions of text. vim-go currently defines the following text objects:
-
- *go-v_af* *go-af*
-af "a function", select contents from a function definition to the
- closing bracket. If |'g:go_textobj_include_function_doc'| is
- enabled it also includes the comment doc for a function
- declaration. This text-object also supports literal functions.
- If |'g:go_textobj_include_variable'| is enabled it also
- includes the variable of an function assignment
-
- *go-v_if* *go-if*
-if "inside a function", select contents of a function,
- excluding the function definition and the closing bracket. This
- text-object also supports literal functions
-
- *go-v_ac* *go-ac*
-ac "a comment", select contents of the current comment block.
-
- *go-v_ic* *go-ic*
-ic "inner comment", select contents of the current comment block,
- excluding the start and end comment markers.
-
-vim-go also defines the following text motion objects:
-
- *go-v_]]* *go-]]*
-]] [count] forward to next function declaration. If
- |'g:go_textobj_include_function_doc'| is enabled and if your
- on a comment, it skips the function which the comment
- belongs and forwards to the next function declaration.
-
- *go-v_[[* *go-[[*
-[[ [count] backward to previous function declaration.
-
-
-
-==============================================================================
-FUNCTIONS *go-functions*
-
- *go#statusline#Show()*
-
-Shows the status of a job running asynchronously. Can be used to plug into the
-statusline. It works to show the status per package instead of per file.
-Assume you have three files open, all belonging to the same package, if the
-package build (`:GoBuild`) is successful, all statuslines will show `success`,
-if it fails all windows' statuslines will show `failed`.
-
-To avoid always showing old status information, the status information is
-cleaned for each package after `60` seconds. This can be changed with the
-|'g:go_statusline_duration'| setting.
-
- *go#complete#GetInfo()*
-
-Returns the description of the identifer under the cursor. Can be used to plug
-into the statusline.
-
- *go#complete#Complete()*
-
-Uses `gopls` for autocompletion. By default, it is hooked up to 'omnifunc'.
-
- *go#tool#DescribeBalloon()*
-
-Suitable to be used as an expression to show the evaluation balloon. See `help
-balloonexpr`.
-
-==============================================================================
-SETTINGS *go-settings*
-
- *'g:go_version_warning'*
-
-Enable warning when using an unsupported version of Vim. By default it is
-enabled.
->
- let g:go_version_warning = 1
-<
-
- *'g:go_code_completion_enabled'*
-
-Enable code completion with 'omnifunc'. By default it is enabled.
->
- let g:go_code_completion_enabled = 1
-<
-
- *'g:go_code_completion_icase'*
-
-Override the icase field in 'omnifunc' results. By default it is set to 0.
-See 'complete-items' for details.
->
- let g:go_code_completion_icase = 0
-<
-
- *'g:go_test_show_name'*
-
-Show the name of each failed test before the errors and logs output by the
-test. By default it is disabled.
->
- let g:go_test_show_name = 0
-<
-
- *'g:go_test_timeout'*
-
-Use this option to change the test timeout of |:GoTest|. By default it is
-set to 10 seconds . >
-
- let g:go_test_timeout= '10s'
-<
- *'g:go_play_browser_command'*
-
-Browser to use for |:GoPlay|, |:GoDocBrowser|, and |:GoLSPDebugBrowser|. The
-url must be added with `%URL%`, and it's advisable to include `&` to make sure
-the shell returns. For example:
->
- let g:go_play_browser_command = 'firefox-developer %URL% &'
-<
-
-By default it tries to find it automatically for the current OS. >
-
- let g:go_play_browser_command = ''
-<
- *'g:go_play_open_browser'*
-
-Use this option to open browser after posting the snippet to play.golang.org
-with |:GoPlay|. By default it's enabled. >
-
- let g:go_play_open_browser = 1
-<
- *'g:go_auto_type_info'*
-
-Use this option to show the type info (|:GoInfo|) for the word under the
-cursor automatically. Whenever the cursor changes the type info will be
-updated. By default it's disabled. The delay can be configured with the
-|'g:go_updatetime'| setting.
->
- let g:go_auto_type_info = 0
-<
-
- *'g:go_info_mode'*
-
-Use this option to define the command to be used for |:GoInfo|. By default
-`gopls` is used, because it is the fastest and is known to be highly accurate.
-One might also use `guru` for its accuracy.
-Valid options are `gopls` and `guru`.
->
- let g:go_info_mode = 'gopls'
-<
- *'g:go_auto_sameids'*
-
-Use this option to highlight all uses of the identifier under the cursor
-(|:GoSameIds|) automatically. By default it's disabled. The delay can be
-configured with the |'g:go_updatetime'| setting.
->
- let g:go_auto_sameids = 0
-<
- *'g:go_updatetime'*
-
-Use this option to configure the delay until it starts some jobs (see
-|'g:go_auto_type_info'|, |'g:go_auto_sameids'|). If set to 0, it uses the
-value from 'updatetime'. By default it's set to 800ms.
->
- let g:go_updatetime = 800
-<
- *'g:go_jump_to_error'*
-
-Use this option to enable/disable passing the bang attribute to the mappings
-(e.g. |(go-build)|, |(go-run)|, etc.) and the metalinter on save. When
-enabled it will jump to the first error automatically (means it will NOT pass
-the bang attribute to the appropriate command, i.e: (go-run) -> :GoRun ).
-Note, that calling this doesn't have any affect on calling the commands
-manually. This setting is only useful for changing the behaviour of our custom
-static mappings. By default it's enabled.
->
- let g:go_jump_to_error = 1
-<
- *'g:go_fmt_autosave'*
-
-Use this option to auto |:GoFmt| on save. When both 'g:go_imports_autosave'
-and 'g:go_fmt_autosave' are enabled and both 'g:go_fmt_command' and
-'g:go_imports_mode' are set to `goimports`, `goimports` will be run only once.
-By default it's enabled >
-
- let g:go_fmt_autosave = 1
-<
- *'g:go_fmt_command'*
-
-Use this option to define which tool is used to format code. Valid options are
-`gofmt`, `goimports`, and `gopls`. By default `gofmt` is used.
->
-
- let g:go_fmt_command = "gofmt"
-<
- *'g:go_fmt_options'*
-
-Use this option to add additional options to the |'g:go_fmt_command'|. It's
-value type can be either a string or a dictionary. This is due backwards
-compatibility. The string version will be removed in the future so please use
-the dictionary version. Default is empty.
->
- let g:go_fmt_options = ''
-
- or
-
- let g:go_fmt_options = {}
-<
-The dictionary version allows you to define options for multiple binaries:
->
- let g:go_fmt_options = {
- \ 'gofmt': '-s',
- \ 'goimports': '-local mycompany.com',
- \ }
-<
- *'b:go_fmt_options'*
-
-This option is identical to |'g:go_fmt_options'|, but a buffer-level setting.
-If present, it's used instead of the global setting. By default it is not set.
-
-As an example, the following autocmd will configure goimports to put imports
-of packages from the current module in their own group:
->
- autocmd FileType go let b:go_fmt_options = {
- \ 'goimports': '-local ' .
- \ trim(system('{cd '. shellescape(expand('%:h')) .' && go list -m;}')),
- \ }
-<
- *'g:go_fmt_fail_silently'*
-
-Use this option to disable showing a location list when |'g:go_fmt_command'|
-fails. By default the location list is shown. >
-
- let g:go_fmt_fail_silently = 0
-<
- *'g:go_fmt_experimental'*
-
-Use this option to enable fmt's experimental mode. This experimental mode is
-superior to the current mode as it fully saves the undo history, so undo/redo
-doesn't break. However, it's slow (creates/deletes a file for every save) and
-it's causing problems on some Vim versions. This has no effect if
-`g:go_fmt_command` is set to `gopls`. By default it's disabled.
->
-
- let g:go_fmt_experimental = 0
-
-<
-
- *'g:go_imports_autosave'*
-
-Use this option to auto |:GoImports| on save. When both
-'g:go_imports_autosave' and 'g:go_fmt_autosave' are enabled and both
-'g:go_fmt_command' and 'g:go_imports_mode' are set to `goimports`, `goimports`
-will be run only once. By default it's disabled.
->
- let g:go_imports_autosave = 0
-<
- *'g:go_imports_mode'*
-
-Use this option to define which tool is used to adjust imports. Valid options
-are `goimports` and `gopls`. The buffer will not be formatted when this is set
-to `gopls`. By default `goimports` is used.
->
-
- let g:go_imports_mode = "goimports"
-<
- *'g:go_mod_fmt_autosave'*
-
-Use this option to auto |:GoModFmt| on save. By default it's enabled >
-
- let g:go_mod_fmt_autosave = 1
-<
-
- *'g:go_doc_keywordprg_enabled'*
-
-Use this option to run `godoc` on words under the cursor with |K|; this will
-normally run the `man` program, but for Go using `godoc` is more idiomatic. It
-will not override the 'keywordprg' setting, but will run |:GoDoc|. Default
-is enabled. >
-
- let g:go_doc_keywordprg_enabled = 1
-<
- *'g:go_doc_height'*
-
-Maximum height for the GoDoc window created with |:GoDoc|. Default is 20. >
-
- let g:go_doc_max_height = 20
-<
-
- *'g:go_doc_url'*
-
-godoc server URL used when |:GoDocBrowser| is used. Change if you want to use
-a private internal service. Default is 'https://pkg.go.dev'.
->
- let g:go_doc_url = 'https://pkg.go.dev'
-<
-
- *'g:go_doc_popup_window'*
-
-Use this option to use the popup-window for |K| and |:GoDoc|, rather than the
-|preview-window|. Default is disabled.
->
- let g:go_doc_popup_window = 0
-<
-
- *'g:go_def_mode'*
-
-Use this option to define the command to be used for |:GoDef|. By default
-`gopls` is used, because it is the fastest. One might also use `guru` for its
-accuracy or `godef` for its performance. Valid options are `godef`, `gopls`,
-and `guru`.
->
- let g:go_def_mode = 'gopls'
-<
- *'g:go_fillstruct_mode'*
-
-Use this option to define the command to be used for |:GoFillStruct|. By
-default `fillstruct` is used. Valid values are `fillstruct` and `gopls`. By
-default it is `fillstruct`.
->
- let g:go_fillstruct_mode = 'fillstruct'
-<
- *'g:go_referrers_mode'*
-
-Use this option to define the command to be used for |:GoReferrers|. By
-default `gopls` is used, because it is the fastest and works with Go modules.
-One might also use `guru` for its ability to show references from other
-packages. This option will be removed after `gopls` can show references from
-other packages. Valid options are `gopls` and `guru`. By default it's `gopls`.
->
- let g:go_referrers_mode = 'gopls'
-<
- *'g:go_implements_mode'*
-
-Use this option to define the command to be used for |:GoImplements|.
-The Implements feature in gopls is still new and being worked upon.
-Valid options are `gopls` and `guru`. By default it's `gopls`.
->
- let g:go_implements_mode = 'gopls'
-<
- *'g:go_def_mapping_enabled'*
-
-Use this option to enable/disable the default mapping of CTRL-],
-<C-LeftMouse>, g<C-LeftMouse> and (`gd`) for GoDef and CTRL-t for :GoDefPop.
-Disabling it allows you to map something else to these keys or mappings.
-Default is enabled. >
-
- let g:go_def_mapping_enabled = 1
-<
- *'g:go_def_reuse_buffer'*
-
-Use this option to jump to an existing buffer for the split, vsplit and tab
-mappings of |:GoDef|. By default it's disabled. >
-
- let g:go_def_reuse_buffer = 0
-<
- *'g:go_bin_path'*
-
-Use this option to change default path for vim-go tools when using
-|:GoInstallBinaries| and |:GoUpdateBinaries|. If not set `$GOBIN` or
-`$GOPATH/bin` is used. >
-
- let g:go_bin_path = ""
-<
- *'g:go_search_bin_path_first'*
-
-This option lets |'g:go_bin_path'| (or its default value) take precedence over
-$PATH when invoking a tool command such as |:GoFmt| or |:GoImports|.
-
-Enabling this option ensures that the binaries installed via
-|:GoInstallBinaries| and |:GoUpdateBinaries| are the same ones that are
-invoked via the tool commands.
-
-By default it is enabled. >
-
- let g:go_search_bin_path_first = 1
-<
- *'g:go_snippet_engine'*
-
-Define the snippet engine to use. The default is to auto-detect one. Valid
-values are:
-
- automatic Automatically detect a snippet engine.
- ultisnips https://github.com/SirVer/ultisnips
- neosnippet https://github.com/Shougo/neosnippet.vim
- minisnip https://github.com/joereynolds/vim-minisnip
- Note: the original at KeyboardFire/vim-minisnip won't work.
->
- let g:go_snippet_engine = "automatic"
-<
- *'g:go_get_update'*
-
-Use this option to disable updating dependencies with |:GoInstallBinaries|. By
-default this is enabled.
->
- let g:go_get_update = 1
-<
- *'g:go_guru_scope'*
-
-Use this option to define the scope of the analysis to be passed for guru
-related commands, such as |:GoImplements|, |:GoCallers|, etc. You can change
-it on-the-fly with |:GoGuruScope|. The input should be a a list of package
-pattern. An example input might be:
-`["github.com/fatih/color","github.com/fatih/structs"]`
-
-Also see |go-guru-scope|.
-
-By default it's not set, so the relevant commands' defaults are being used.
->
- let g:go_guru_scope = []
-<
- *'g:go_build_tags'*
-
-Space-separated list of build tags passed to the `-tags` flag of tools that
-support it.
-There is also the |:GoBuildTags| convenience command to change or remove build
-tags.
->
- let g:go_build_tags = ''
-<
- *'g:go_autodetect_gopath'*
-
-Automatically modify GOPATH for certain directory structures, such as for
-the `godep` tool which stores dependencies in the `Godeps` folder. What this
-means is that all tools are now working with the newly modified GOPATH. So
-|:GoDef| for example jumps to the source inside the `Godeps` (vendored)
-source. Currently `godep` and `gb` are supported. By default it's disabled.
->
- let g:go_autodetect_gopath = 0
-<
- *'g:go_textobj_enabled'*
-
-Adds custom text objects. By default it's enabled. >
-
- let g:go_textobj_enabled = 1
-<
- *'g:go_textobj_include_function_doc'*
-
-Consider the comment above a function to be part of the function when using
-the `af` text object and `[[` motion. By default it's enabled. >
-
- let g:go_textobj_include_function_doc = 1
-<
- *'g:go_textobj_include_variable'*
-
-Consider the variable of an function assignment to be part of the anonymous
-function when using the `af` text object. By default it's enabled. >
-
- let g:go_textobj_include_variable = 1
-<
- *'g:go_metalinter_autosave'*
-
-Use this option to auto |:GoMetaLinter| on save. Only linter messages for
-the active buffer will be shown.
-
-By default, `golangci-lint` messages will be shown in the |location-list|
-window. The list to use can be set using |'g:go_list_type_commands'|.
-
- By default it's disabled >
- let g:go_metalinter_autosave = 0
-<
- *'g:go_metalinter_autosave_enabled'*
-
-Specifies the enabled linters for auto |:GoMetaLinter| on save. When the
-metalinter is `golangci-lint`, if any are enabled, `--disable-all` will be
-sent to the metalinter.
-
-When `g:go_metalinter_command` is set to `staticcheck`, the default value is
-an empty list; `staticcheck`'s `-checks` flag will not be used.
->
- let g:go_metalinter_autosave_enabled = ['all']
-<
-
-When `g:go_metalinter_command is set to `golangci-lint'`, the default value is
->
- let g:go_metalinter_autosave_enabled = ['vet', 'golint']
-<
- *'g:go_metalinter_enabled'*
-
-Specifies the linters to enable for the |:GoMetaLinter| command. For
-`golangci-lint`, if any are enabled, `--disable-all` will be passed to the
-metalinter.
-
-When `g:go_metalinter_command` is set to `staticcheck`, the default value is
-an empty list; `staticcheck`'s `-checks` flag will not be used.
->
- let g:go_metalinter_autosave_enabled = ['all']
-<
-
-When `g:go_metalinter_command is set to `golangci-lint'`, the default value is
->
- let g:go_metalinter_enabled = ['vet', 'golint', 'errcheck']
-<
- *'g:go_metalinter_command'*
-
-Overrides the command to be executed when |:GoMetaLinter| is called. By
-default it's `golangci-lint`. Valid options are `golangci-lint, `gopls`, and
-`staticcheck`..
-
-When the value is `gopls`, users may want to consider setting
-`g:go_gopls_staticcheck`. It can also be used as an advanced setting for users
-who want to have more control over the metalinter.
->
- let g:go_metalinter_command = "golangci-lint"
-<
- *'g:go_metalinter_deadline'*
-
-Overrides the maximum time the linters have to complete. By default it's 5
-seconds.
-
-Only applies when the metalinter is `golangci-lint`.
->
- let g:go_metalinter_deadline = "5s"
-<
- *'g:go_list_height'*
-
-Specifies the window height for the quickfix and location list windows. The
-default value (empty) automatically sets the height to the number of items
-(maximum up to 10 items to prevent large heights). Setting the value
-explicitly overrides this behavior. For standard Vim behavior, set it to 10.
->
- let g:go_list_height = 0
-<
- *'g:go_list_type'*
-
-Specifies the type of list to use for command outputs (such as errors from
-builds, results from static analysis commands, etc...). The list type for
-specific commands can be overridden with |'g:go_list_type_commands'|. The
-default value (empty) will use the appropriate kind of list for the command
-that was called. Supported values are "", "quickfix", and "locationlist".
->
- let g:go_list_type = ""
-<
-
- *'g:go_list_type_commands'*
-
-Specifies the type of list to use for command outputs (such as errors from
-builds, results from static analysis commands, etc...). When an expected key
-is not present in the dictionary, |'g:go_list_type'| will be used instead.
-Supported keys are "GoBuild", "GoErrCheck", "GoFmt", "GoModFmt", "GoInstall",
-"GoLint", "GoMetaLinter", "GoMetaLinterAutoSave", "GoModifyTags" (used for
-both :GoAddTags and :GoRemoveTags), "GoRename", "GoRun", and "GoTest".
-Supported values for each command are "quickfix" and "locationlist".
->
- let g:go_list_type_commands = {}
-<
-As an example, the following settings will change all list types to
-`locationlist` except for `:GoBuild` where `quickfix` is used:
->
- let g:go_list_type = "locationlist"
- let g:go_list_type_commands = {"GoBuild": "quickfix"}
-<
-
- *'g:go_list_autoclose'*
-
-Specifies whether the quickfix/location list should be closed automatically
-in the absence of errors. The default value is 1.
-If you prefer to keep a long running error window open, you can disable
-this by setting the value to 0.
->
- let g:go_list_autoclose = 1
-<
- *'g:go_asmfmt_autosave'*
-
-Use this option to auto |:AsmFmt| on save. By default it's disabled. >
-
- let g:go_asmfmt_autosave = 0
-<
- *'g:go_term_mode'*
-
-The default command used to open a new terminal for go commands such as
-|:GoRun|. The default is `:vsplit`.
-
-Applicable to Neovim and Vim with `terminal` feature only.
->
- let g:go_term_mode = "vsplit"
-<
- *'g:go_term_reuse'*
-
-Reuse the terminal window when |'g:go_term_enabled'| is set. By default it's
-disabled.
->
- let g:go_term_reuse = 0
-<
- *'g:go_term_height'*
- *'g:go_term_width'*
-
-Controls the height and width of a terminal split, respectively. By default
-these are not set, meaning that the height and width are set automatically by
-the editor. The height only applies to a horizontal split and width only
-applies to a vertical split.
-
-Applicable to Neovim and Vim with `terminal` feature only.
-
-For example here is how to set each to 30.
->
- let g:go_term_height = 30
- let g:go_term_width = 30
-<
- *'g:go_term_enabled'*
-
-Causes some types of jobs to run inside a new terminal according to
-|'g:go_term_mode'|. By default it is disabled.
-
-Applicable to Neovim and Vim with `terminal` feature only.
->
- let g:go_term_enabled = 0
-<
- *'g:go_term_close_on_exit'*
-
-Closes the terminal after the command run in it exits when the command fails.
-By default it is enabled.
-
-Applicable to Neovim and Vim with `terminal` feature only.
-
->
- let g:go_term_close_on_exit = 1
-<
- *'g:go_alternate_mode'*
-
-Specifies the command that |:GoAlternate| uses to open the alternate file. By
-default it is set to edit.
->
- let g:go_alternate_mode = "edit"
-<
- *'g:go_rename_command'*
-
-Use this option to define which tool is used to rename. By default `gopls`
-is used. Valid options are `gorename` and `gopls`.
->
- let g:go_rename_command = 'gopls'
-<
- *'g:go_gorename_prefill'*
-
-Expression to prefill the new identifier when using |:GoRename| without any
-arguments. Use an empty string if you don't want to prefill anything. By
-default it converts the identifier to camel case but preserves the
-capitalisation of the first letter to ensure that the exported state stays the
-same.
->
- let g:go_gorename_prefill = 'expand("<cword>") =~# "^[A-Z]"' .
- \ '? go#util#pascalcase(expand("<cword>"))' .
- \ ': go#util#camelcase(expand("<cword>"))'
-<
-
- *'g:go_gopls_enabled'*
-
-Specifies whether `gopls` can be used by vim-go.
-
-Completion will not work when gopls is disabled and other configuration
-options may also need to be adjusted.
-
-By default gopls is enabled.
-
->
- let g:go_gopls_enabled = 1
-<
-
- *'g:go_gopls_options'*
-
-The commandline arguments to pass to gopls.
-
-By default, it is `['-remote=auto']`.
->
- let g:go_gopls_options = ['-remote=auto']
-<
-
- *'g:go_gopls_analyses'*
-
-The analyses settings for `gopls`.
-
-The Expected value is either `v:null` or a dictionary. The dictionary will be
-provided to `gopls` via json-rpc, so dictionary values need to be of the
-appropriate type for Vim to convert to JSON (e.g. truthy dictionary values
-should be `v:true` or `v:false`). By default, it is `v:null`.
->
- let g:go_gopls_analyses = v:null
-<
-
- *'g:go_gopls_complete_unimported'*
-
-Specifies whether `gopls` should include suggestions from unimported packages.
-
-When it is `v:null`, `gopls`' default will be used. By default it is `v:null`.
->
- let g:go_gopls_complete_unimported = v:null
-<
-
- *'g:go_gopls_deep_completion'*
-
-Specifies whether `gopls` should use deep completion.
-
-When it is `v:null`, `gopls`' default will be used. By default it is `v:null`.
->
- let g:go_gopls_deep_completion = v:null
-<
-
- *'g:go_gopls_matcher'*
-
-Specifies how `gopls` should match for completions.
-
-Valid values are `v:null`, `fuzzy`, and `caseSensitive`. When it is `v:null`,
-`gopls`' default will be used. By default it is `v:null`.
->
- let g:go_gopls_matcher = v:null
-<
-
- *'g:go_gopls_staticcheck'*
-
-Specifies whether `gopls` should run staticcheck checks.
-
-When it is `v:null`, `gopls`' default will be used. By default it is `v:null`.
->
- let g:go_gopls_staticcheck = v:null
-<
-
- *'g:go_gopls_use_placeholders'*
-
-Specifies whether `gopls` can provide placeholders for function parameters and
-struct fields. When set, completion items will be treated as anonymous
-snippets if UltiSnips is installed and configured to be used as
-|'g:go_snippet_engine'|.
-
-When it is `v:null`, `gopls`' default will be used. By default it is `v:null`.
->
- let g:go_gopls_use_placeholders = v:null
-<
-
- *'g:go_gopls_temp_modfile'*
-
-Specifies whether `gopls` should use a temp modfile and suggest edits rather
-than modifying the ambient go.mod file.
-
-When it is `v:null`, `gopls`' default will be used. By default it is `v:null`.
->
- let g:go_gopls_temp_modfile = v:null
-<
-
- *'g:go_gopls_local'*
-
-Specifies the prefix for imports that `gopls` should group separately.
-
-The value can either be a string or a dictionary. When it is a string, all
-workspaces will use the same value. When it is a dictionary, the key should be
-the absolute path of the workspace and the value is the prefix to use for
-local imports within that workspace.
-
-When it is `v:null`, `gopls`' default will be used. By default it is `v:null`.
->
- let g:go_gopls_local = v:null
-<
-
- *'g:go_gopls_gofumpt'*
-
-Specifies whether `gopls` should use `gofumpt` for formatting.
-
-When it is `v:null`, `gopls`' default will be used. By default it is `v:null`.
->
- let g:go_gopls_gofumpt = v:null
-<
-
- *'g:go_gopls_settings'*
-
-Specifies `gopls` workspace settings for `gopls` that are not yet officially
-supported by vim-go.
-
-Any value in the dictionary will be overridden by values provided in the
-specific options supported by vim-go (e.g. g:go_gopls_staticcheck) or
-settings statically configured by vim-go to ensure expected behavior. By
-default it is `v:null`.
->
- let g:go_gopls_settings = v:null
-<
- *'g:go_diagnostics_enabled'*
-
-Deprecated. See `'g:go_diagnostics_level'`. Specifies whether `gopls`
-diagnostics are enabled. Only the diagnostics for the current buffer will be
-processed when it is not set; all others will be ignored. By default it is
-disabled.
->
- let g:go_diagnostics_enabled = 0
-<
- *'g:go_diagnostics_level'*
-
-Specifies the `gopls` diagnostics level. Valid values are 0, 1, and 2. 0
-ignores `gopls` diagnostics, 1 is for errors only, and 2 is for errors and
-warnings. By default it is 0.
->
- let g:go_diagnostics_level = 0
-<
-
- *'g:go_template_autocreate'*
-
-When a new Go file is created, vim-go automatically fills the buffer content
-with a Go code template. By default, the templates under the `templates`
-folder are used. This can be changed with the |'g:go_template_file'| and
-|'g:go_template_test_file'| settings to either use a different file in the
-same `templates` folder, or to use a file stored elsewhere.
-
-If the new file is created in an already prepopulated package (with other Go
-files), in this case a Go code template with only the Go package declaration
-(which is automatically determined according to the current package) is added.
-
-To always use the package name instead of the template, enable the
-|'g:go_template_use_pkg'| setting.
-
-By default it is enabled.
->
- let g:go_template_autocreate = 1
-<
- *'g:go_template_file'*
-
-Specifies either the file under the `templates` folder that is used if a new
-Go file is created. Checkout |'g:go_template_autocreate'| for more info. By
-default the `hello_world.go` file is used.
-
-This variable can be set to an absolute path, so the template files don't have
-to be stored inside the vim-go directory structure. Useful when you want to
-use different templates for different projects.
->
- let g:go_template_file = "hello_world.go"
-<
- *'g:go_template_test_file'*
-
-Like with |'g:go_template_file'|, this specifies the file to use for test
-tempaltes. The template file should be under the `templates` folder,
-alternatively absolute paths can be used, too. Checkout
-|'g:go_template_autocreate'| for more info. By default, the
-`hello_world_test.go` file is used.
->
- let g:go_template_test_file = "hello_world_test.go"
-<
- *'g:go_template_use_pkg'*
-
-Specifies that, rather than using a template, the package name is used if a
-new Go file is created. Checkout |'g:go_template_autocreate'| for more info.
-By default the template file specified by |'g:go_template_file'| is used.
-
->
- let g:go_template_use_pkg = 0
-<
- *'g:go_decls_includes'*
-
-Only useful if `ctrlp.vim`, `unite.vim`, `denite.nvim` or `fzf` are installed.
-This sets which declarations to show for |:GoDecls| (`ctrp.vim`),
-|unite-decls| (`unite.vim`) and |denite-decls| (`denite.nvim`). It is a Comma
-delimited list. Possible options are: {func,type}. The default is: >
-
- let g:go_decls_includes = 'func,type'
-<
- *'g:go_decls_mode'*
-
-Define the tool to be used for |:GoDecls|. Valid options are `ctrlp.vim`,
-`fzf`, or an empty string; in which case it will try to autodetect either
-`ctrlp.vim` or `fzf`.
->
- let g:go_decls_mode = ''
-<
- *'g:go_echo_command_info'*
-
-Echoes information about various Go commands, such as `:GoBuild`, `:GoTest`,
-`:GoCoverage`, etc... Useful to disable if you use the statusline integration,
-i.e: |go#statusline#Show()|. By default it's enabled
->
- let g:go_echo_command_info = 1
-<
- *'g:go_echo_go_info'*
-
-Use this option to show the identifier information when code completion is
-done. By default it's enabled. >
-
- let g:go_echo_go_info = 1
-<
-Please note that 'noshowmode' must be set for this feature to work correctly.
-
- *'g:go_statusline_duration'*
-
-Specifies the duration of statusline information being showed per package. By
-default it's 60 seconds. Must be in milliseconds.
->
- let g:go_statusline_duration = 60000
-<
- *'g:go_addtags_transform'*
-
-Sets the `transform` option for `gomodifytags` when using |:GoAddTags| or if
-it's being used for snippet expansion of single fields. Possible options are:
-`snakecase`, `camelcase`, `lispcase`, `pascalcase`, `keep`. For the following
-case, if `snakecase` is used the field will be transformed to:
->
- type T struct {
- FooBarQuz string `json:"foo_bar_quz"`
- }
-<
-
-If "camelcase" is used:
->
- type T struct {
- FooBarQuz string `json:"fooBarQuz"`
- }
-<
-By default "snakecase" is used. Current values are: ["snakecase",
-"camelcase", "lispcase", "pascalcase", "keep"].
->
- let g:go_addtags_transform = 'snakecase'
-<
- *'g:go_addtags_skip_unexported'*
-
-Sets the `skip-unexported` option for `gomodifytags` when using |:GoAddTags|.
-If set it will prevent `gomodifytags` from adding tags to unexported fields:
->
- type T struct {
- FooBar string `json:"foo_bar"`
- quz string
- }
-<
-By default it is disabled.
->
- let g:go_addtags_skip_unexported = 0
-<
- *'g:go_debug'*
-
-A list of options to debug; useful for development and/or reporting bugs.
-
-Currently accepted values:
-
- shell-commands Echo all shell commands that vim-go runs.
- debugger-state Expose debugger state in 'g:go_debug_diag'.
- debugger-commands Echo communication between vim-go and `dlv`; requests and
- responses are recorded in `g:go_debug_commands`.
- lsp Echo communication between vim-go and `gopls`. All
- communication is shown in a dedicated window. When
- enabled before gopls is started, |:GoLSPDebugBrowser| can
- be used to open a browser window to help debug gopls.
->
- let g:go_debug = []
-<
-
-==============================================================================
-SYNTAX HIGHLIGHTING *ft-go-syntax* *go-syntax*
-
-vim-go comes with an enhanced version of Vim's Go syntax highlighting. It
-comes with a number of features, most of which are disabled by default.
-
-The recommended settings are the default values. If you're experiencing
-slowdowns in Go files and you enabled some of these options then try disabling
-them; some can be resource intensive.
-
- *'g:go_fold_enable'*
-
-Control syntax-based folding which takes effect when 'foldmethod' is set to
-`syntax`.
-You can enable specific fold regions by setting an array. Possible values are:
-
- block `{` .. `}` blocks.
- import `import` block.
- varconst `var` and `const` blocks.
- package_comment The package comment.
- comment Any comment that is not the package comment.
-
-By default all except "comment" are enabled:
->
- let g:go_fold_enable = ['block', 'import', 'varconst', 'package_comment']
-<
-Enable folding of only imports:
->
- let g:go_fold_enable = ['import']
-<
-Disable everything (same as not setting 'foldmethod' to `syntax`):
->
- let g:go_fold_enable = []
-<
- *'g:go_highlight_array_whitespace_error'*
-
-Highlight white space after `[]`. >
-
- let g:go_highlight_array_whitespace_error = 0
-<
- *'g:go_highlight_chan_whitespace_error'*
-
-Highlight white space around the receive operator (`<-`) that doesn't follow
-the standard style. >
-
- let g:go_highlight_chan_whitespace_error = 0
-<
- *'g:go_highlight_extra_types'*
-
-Highlight commonly used library types (`io.Reader`, etc.). >
-
- let g:go_highlight_extra_types = 0
-<
- *'g:go_highlight_space_tab_error'*
-
-Highlight instances of tabs following spaces. >
-
- let g:go_highlight_space_tab_error = 0
-<
- *'g:go_highlight_trailing_whitespace_error'*
-
-Highlight trailing white space. >
-
- let g:go_highlight_trailing_whitespace_error = 0
-<
- *'g:go_highlight_operators'*
-
-Highlight operators such as `:=` , `==`, `-=`, etc.
->
- let g:go_highlight_operators = 0
-<
- *'g:go_highlight_functions'*
-
-Highlight function and method declarations.
->
- let g:go_highlight_functions = 0
-<
- *'g:go_highlight_function_parameters'*
-
-Highlight the variable names in parameters (including named return parameters)
-in function declarations. Setting this implies the functionality from
-|'g:go_highlight_functions'|.
->
- let g:go_highlight_function_parameters = 0
-<
- *'g:go_highlight_function_calls'*
-
-Highlight function and method calls.
->
- let g:go_highlight_function_calls = 0
-<
- *'g:go_highlight_types'*
-
-Highlight struct and interface names.
->
- let g:go_highlight_types = 0
-<
- *'g:go_highlight_fields'*
-
-Highlight struct field names.
->
- let g:go_highlight_fields = 0
-<
- *'g:go_highlight_build_constraints'*
-
-Highlights build constraints.
->
- let g:go_highlight_build_constraints = 0
-<
- *'g:go_highlight_generate_tags'*
-
-Highlight go:generate directives.
->
- let g:go_highlight_generate_tags = 0
-<
- *'g:go_highlight_string_spellcheck'*
-
-Highlight spelling errors in strings when |spell| is enabled.
->
- let g:go_highlight_string_spellcheck = 1
-<
- *'g:go_highlight_format_strings'*
-
-Highlight printf-style formatting verbs inside string literals.
->
- let g:go_highlight_format_strings = 1
-<
- *'g:go_highlight_variable_declarations'*
-
-Highlight variable names in variable declarations (`x` in ` x :=`).
->
- let g:go_highlight_variable_declarations = 0
-<
- *'g:go_highlight_variable_assignments'*
-
-Highlight variable names in variable assignments (`x` in `x =`).
->
- let g:go_highlight_variable_assignments = 0
-<
- *'g:go_highlight_diagnostic_errors'*
-
-Highlight diagnostic errors.
->
- let g:go_highlight_diagnostic_errors = 1
-<
- *'g:go_highlight_diagnostic_warnings'*
-
-Highlight diagnostic warnings.
->
- let g:go_highlight_diagnostic_warnings = 1
-<
-
-==============================================================================
- *gohtmltmpl* *ft-gohtmltmpl-syntax*
- *gotexttmpl* *ft-gotexttmpl-syntax*
-Go template syntax~
-
-The `gotexttmpl` 'filetype' provides syntax highlighting and indentation for
-Go's `text/template` package.
-
-The `gohtmltmpl` filetype is for use with the `html/template` package and is
-identical to `gotexttmpl` except that it will also load the standard `html`
-filetype.
-
-The `gohtmltmpl` filetype is automatically set for `*.tmpl` files; the
-`gotexttmpl` is never automatically set and needs to be set manually.
-
-==============================================================================
- *gomod* *ft-gomod-syntax*
-go.mod file syntax~
-
-The `gomod` 'filetype' provides syntax highlighting for Go's module file
-`go.mod`
-
-
-==============================================================================
-DEBUGGER *go-debug*
-
-Vim-go comes with a special "debugger mode". This starts a `dlv` process in
-the background and provides various commands to communicate with it.
-
-This debugger is similar to Visual Studio or Eclipse and has the following
-features:
-
- * Show stack trace and jumps.
- * List local variables.
- * List function arguments.
- * Expand values of struct or array/slice.
- * Show balloon on the symbol.
- * Show output of stdout/stderr.
- * Toggle breakpoint.
- * Stack operation continue/next/step out.
-
-This feature requires either Vim 8.0.0087 or newer with the |+job| feature or
-Neovim. This features also requires Delve 1.0.0 or newer, and it is
-recommended to use Go 1.10 or newer, as its new caching will speed up
-recompiles.
-
- *go-debug-intro*
-GETTING STARTED WITH THE DEBUGGER~
-
-Use |:GoDebugStart| or |:GoDebugTest| to start the debugger. The first
-argument is the package name, and any arguments after that will be passed on
-to the program; for example:
->
- :GoDebugStart . -someflag value
-<
-This may take few seconds. After the code is compiled you'll see three new
-windows: the stack trace on left side, the variable list on the bottom-left,
-and program output at the bottom.
-
-You can add breakpoints with |:GoDebugBreakpoint| (<F9>) and run your program
-with |:GoDebugContinue| (<F5>).
-
-The program will halt on the breakpoint, at which point you can inspect the
-program state. You can go to the next line with |:GoDebugNext| (<F10>) or step
-in with |:GoDebugStep| (<F11>).
-
-The program can also be halted with `:GoDebugHalt` (<F8>).
-
-The variable window in the bottom left (`GODEBUG_VARIABLES`) will display all
-local variables. Struct values are displayed as `{...}`, array/slices as
-`[4]`. Use <CR> on the variable name to expand the values.
-
-The `GODEBUG_OUTPUT` window displays output from the program and the Delve
-debugger.
-
-The `GODEBUG_STACKTRACE` window can be used to jump to different places in the
-call stack.
-
-When you're done use |:GoDebugStop| to close the debugging windows and halt
-the `dlv` process, or |:GoDebugRestart| to recompile the code.
-
- *go-debug-commands*
-DEBUGGER COMMANDS~
-
-Only |:GoDebugAttach|, |:GoDebugStart|, |:GoDebugTest|, and
-|:GoDebugBreakpoint| are available by default. |:GoDebugContinue| becomes
-available after running |:GoDebugAttach|, |:GoDebugStart| or |:GoDebugTest|.
-The rest of the commands and mappings become available after executing
-|:GoDebugContinue|.
-
- *:GoDebugAttach*
-:GoDebugAttach pid
-
- Start the debug mode for pid; this does several things:
-
- * Setup the debug windows according to |'g:go_debug_windows'|.
- * Make the `:GoDebug*` commands and `(go-debug-*)` mappings available.
-
- Use |:GoDebugStop| to stop `dlv` and exit debugging mode.
-
- *:GoDebugStart*
-:GoDebugStart [pkg] [program-args]
-
- Start the debug mode for [pkg]; this does several things:
-
- * Setup the debug windows according to |'g:go_debug_windows'|.
- * Make the `:GoDebug*` commands and `(go-debug-*)` mappings available.
-
- The directory of the current buffer is used if [pkg] is empty. Any other
- arguments will be passed to the program.
-
- Use |:GoDebugStop| to stop `dlv` and exit debugging mode.
-
- *:GoDebugTest*
-:GoDebugTest [pkg] [program-args]
-
- Behaves the same as |:GoDebugStart| but runs `dlv test` instead of
- `dlv debug` so you can debug tests.
-
- Use `-test.flag` to pass flags to `go test` when debugging a test; for
- example `-test.v` or `-test.run TestFoo`
-
- *:GoDebugTestFunc*
-:GoDebugTestFunc [expand]
-
- Behaves the same as |:GoDebugTest| and implicitly adds `-test.run` to run
- the nearest test or example function (i.e the nearest function declaration
- that matches `func Test` or `func Example`) at or previous to the cursor.
- Search will not wrap around when at the top of the file.
-
- *:GoDebugRestart*
-:GoDebugRestart
-
- Stop the program (if running) and restart `dlv` to recompile the package.
- The current window layout and breakpoints will be left intact.
-
- *:GoDebugHalt*
- *(go-debug-halt)*
-:GoDebugHalt
-
- Halt the program.
-
- Mapped to <F8> by default.
-
- *:GoDebugStop*
- *(go-debug-stop)*
-:GoDebugStop
-
- Stop `dlv` and remove all debug-specific commands, mappings, and windows.
-
- *:GoDebugBreakpoint*
- *(go-debug-breakpoint)*
-:GoDebugBreakpoint [linenr]
-
- Toggle breakpoint for the [linenr]. [linenr] defaults to the current line
- if it is omitted. A line with a breakpoint will have the
- {godebugbreakpoint} |:sign| placed on it. The line the program is
- currently halted on will have the {godebugcurline} sign.
-
- *hl-GoDebugCurrent* *hl-GoDebugBreakpoint*
- A line with a breakpoint will be highlighted with the {GoDebugBreakpoint}
- group; the line the program is currently halted on will be highlighted
- with {GoDebugCurrent}.
-
- Mapped to <F9> by default.
-
- *:GoDebugContinue*
- *(go-debug-continue)*
-:GoDebugContinue
-
- Continue execution until breakpoint or program termination. It will start
- the program if it hasn't been started yet.
-
- Mapped to <F5> by default.
-
- *:GoDebugNext*
- *(go-debug-next)*
-:GoDebugNext
-
- Advance execution by one line, also called "step over" by some other
- debuggers.
-
- Mapped to <F10> by default.
-
- *:GoDebugStep*
- *(go-debug-step)*
-:GoDebugStep
-
- Advance execution by one step, stopping at the next line of code that will
- be executed (regardless of location).
-
- Mapped to <F11> by default.
-
- *:GoDebugStepOut*
- *(go-debug-stepout)*
-
-:GoDebugStepOut
-
- Run all the code in the current function and halt when the function
- returns ("step out of the current function").
-
- *:GoDebugSet*
-:GoDebugSet {var} {value}
-
- Set the variable {var} to {value}. Example:
->
- :GoDebugSet truth 42
-<
- This only works for `float`, `int` and variants, `uint` and variants,
- `bool`, and pointers (this is a `delve` limitation, not a vim-go
- limitation).
-
- *:GoDebugPrint*
- *(go-debug-print)*
-:GoDebugPrint {expr}
-
- Print the result of a Go expression.
->
- :GoDebugPrint truth == 42
- truth == 42 true
-<
- Mapped to <F6> by default, which will evaluate the <cword> under the
- cursor.
-
- *go-debug-settings*
-DEBUGGER SETTINGS~
-
- *'g:go_debug_windows'*
-
-Controls the window layout for debugging mode. This is a |dict| with four
-possible keys: "vars", "stack", "goroutines", and "out"; each of the new
-windows will be created in that that order with the commands in the value. The
-current window is made the only window before creating the debug windows.
-
-A window will not be created if a key is missing or empty.
-
-Defaults:
->
- let g:go_debug_windows = {
- \ 'vars': 'leftabove 30vnew',
- \ 'stack': 'leftabove 20new',
- \ 'goroutines': 'botright 10new',
- \ 'out': 'botright 5new',
- \ }
-<
-Show only variables on the right-hand side: >
-
- let g:go_debug_windows = {
- \ 'vars': 'rightbelow 60vnew',
- \ }
-
- *'g:go_debug_mappings'*
-
-Contains custom key mapping information to customize the active mappings
-when debugging.
-
-Only the customizations desired need to be provided; the debugger will use its
-default key mappings for any mapping not defined here.
-
-This value should be a dictionary whose keys are the plugin mapping commands
-(e.g. `(go-debug-continue)`). The values are dictionaries with two keys.
-`key` and `attributes`.
-
-`key` is expected to be the key to map (i.e. it's the `lhs` in a mapping).
-`key` can be empty or missing to prevent a key mapping from being applied for
-one the named mappings.
-
-`arguments` is the string of `map-arguments` for the mapping (e.g.
-`<nowait>`).
-
-The first item must be the `lhs` to use for the mapping. The optional
-second item is for `:map-arguments`. All mappings will always be `:map-local`,
-so there is never a need to include `"<buffer>"` in the the arguments.
->
- let g:go_debug_mappings = {
- \ '(go-debug-continue)': {'key': 'c', 'arguments': '<nowait>'],
- \ '(go-debug-stop)': {'key': 'q'},
- \ '(go-debug-next)': {'key': 'n', 'arguments': '<nowait>'},
- \ '(go-debug-step)': {'key': 's'},
- \}
-<
-
-Defaults are equivalent to:
->
- let g:go_debug_mappings = {
- \ '(go-debug-continue)': {'key': '<F5>'},
- \ '(go-debug-print)': {'key': '<F6>'},
- \ '(go-debug-breakpoint)': {'key': '<F9>'},
- \ '(go-debug-next)': {'key': '<F10>'},
- \ '(go-debug-step)': {'key': '<F11>'},
- \ '(go-debug-halt)': {'key': '<F8>'},
- \ }
-<
-
-Your user specified settings will be merged with the defaults.
-
- *'g:go_debug_address'*
-
-Server address `dlv` will listen on; must be in `hostname:port` format.
-Defaults to `127.0.0.1:8181`:
->
- let g:go_debug_address = '127.0.0.1:8181'
-<
-
- *'g:go_debug_log_output'*
-
-Specifies log output options for `dlv`. Value should be a single string of
-comma-separated options suitable for passing to `dlv`. An empty string (`''`)
-will suppress logging entirely. Default: `'debugger,rpc'`:
->
- let g:go_debug_log_output = 'debugger,rpc'
-<
-
- *'g:go_highlight_debug'*
-
-Highlight the current line and breakpoints in the debugger.
-
->
- let g:go_highlight_debug = 1
-<
-
- *'go:go_debug_breakpoint_sign_text'*
-
-Set the sign text used for breakpoints in the debugger. By default it's '>'.
-
->
- let g:go_debug_breakpoint_sign_text = '>'
-<
-
-==============================================================================
-FAQ TROUBLESHOOTING *go-troubleshooting*
-
-How do I troubleshoot problems?~
-
-One of the best ways to understand what vim-go is doing and the output from
-the tools to which it delegates is to use leverage the features described in
-|'g:go_debug'|.
-
-Completion and other functions that use `gopls` don't work~
-
-Vim-go is heavily reliant on `gopls` for completion and other functionality.
-Many of the features that use `gopls` (e.g. completion, jumping to
-definitions, showing identifier information, et al.) can be configured to
-delegate to other tools. e.g. completion via 'omnifunc', |'g:go_info_mode'|
-and |'g:go_def_mode'| can be set to use other tools for now (though some of
-the alternatives to `gopls` are effectively at their end of life and support
-for them from within vim-go may be removed soon).
-
-I want to disable `gopls`~
-
-Vim-go's use of `gopls` can be disabled with 'g:go_gopls_enabled'.
-
-Some users want to do this to limit the load on their system when using vim-go
-concurrently with an LSP client like vim-lsp. Instead of disabling vim-go's
-use of `gopls`, you may prefer to configure vim-go to share the `gopls`
-instance with other LSP plugins. 'g:go_gopls_options' can be used to configure
-how vim-go starts `gopls` so that the instance can be shared with other
-plugins and vim-go user's can leverage the full power of vim-go.
-
-I get a "Unknown function: go#config#..." error~
-
-This often happens to vim-polyglot users when new config options are added to
-vim-go. Run vim-polyglot's `build` script or make sure that vim-go is loaded
-before vim-polyglot.
-
-It can also happen when multiple versions of vim-go are installed and the
-version loaded by Vim doesn't have a function introduced by a later version.
-To see where vim-go is being loaded from run
->
- :verbose function go#config#FmtAutosave
-<
-
-The output will show the path to the `autoload/go/config.vim` that was loaded
-by Vim. Make sure the root of the path to output by the command is the path
-from which vim-go is expected to sourced. If it is not rooted as expected,
-then there are multiple copies of vim-go installed; remove the unexpected
-copies.
-
-I get "not an editor command" error when I invoke :GoXXX~
-
-This happens if vim-go is not installed properly. Be sure you have added this
-line into your vimrc:
->
- filetype plugin indent on
-<
-
-I get a "command not found" error when I invoke :GoXXX~
-
-If you try to call |:GoDef|, |:GoInfo| and get a command not found, check that
-you have the binaries installed by using |:GoInstallBinaries|.
-
-Before opening vim, check your current $PATH:
->
- echo $PATH
-<
-After opening vim, run `:echo $PATH`, the output must be your current `$PATH`
-plus `$GOPATH/bin` (the location where |:GoInstallBinaries| installed the
-binaries).
-
- *go-guru-scope*
-What is the guru scope and how do I set it?~
-
-Many vim-go commands use the `guru` commandline tool to get information. Some
-`guru` commands require an expensive analysis of the source code. To still get
-a reasonable amount of performance `guru` limits this analysis to a selected
-list of packages. This is known as the "guru scope".
-
-The default is to use the package the current buffer belongs to, but this may
-not always be correct. For example for the file `guthub.com/user/pkg/a/a.go`
-the scope will be set to `github.com/user/pkg/a`, but you probably want
-`github.com/user/pkg`
-
-Guessing what package(s) you do want is not easy so you may need to set this
-manually, usually from an |autocommand|:
->
- autocmd BufRead /home/martin/go/src/github.com/user/pkg/*.go
- \ :GoGuruScope github.com/user/pkg
-<
-
-If you have a lot of packages with the same prefix (`github.com/user`) you can
-use a single autocommand:
->
- autocmd BufRead /home/martin/go/src/*.go
- \ let s:tmp = matchlist(expand('%:p'),
- \ '/home/martin/go/src/\(github.com/user/[^/]\+\)')
- \| if len(s:tmp) > 1 | exe 'silent :GoGuruScope ' . s:tmp[1] | endif
- \| unlet s:tmp
-<
-Also see |:GoGuruScope| and |'g:go_guru_scope'|.
-
-
-Vim becomes slow while editing Go files~
-
-The most common cause for this is using an older version of Vim that doesn't
-support asynchronous jobs. |'g:go_auto_sameids'| and |'g:go_auto_type_info'|
-run jobs that can cause noticable delays when used with vim74. The problem is
-most pronounced on vim74, but can occur on vim8 and nvim. On vim8 and nvim,
-the problem should be restricted to a short period when the first buffer in a
-package is first loaded.
-
-If you see unexpected characters rendered in the current window, the problem
-is most likely due to |'g:go_auto_sameids'| or |'g:go_auto_type_info'|. First,
-try using another mode for |'g:go_info_mode'|. If that doesn't work, try
-disabling |'g:go_auto_sameids'| and |'g:go_auto_type_info'|.
-
-To a lesser extent, this can be caused by `g:go_highlight_*` options. If Vim
-is just slower than normal, but doesn't render unexpected characters in the
-currrent window, then the problem is most likely the `g:go_highlight_*`
-options. Try disabling them if you've enabled some of them.
-
-I get errors when using GoInstallBinaries~
-
-If you see errors like this:
->
- Error installing golang.org/x/tools/cmd/goimports
-<
-that means your local Go setup is broken or the remote website is down. For
-example sometimes code.google.com times out. To test, just execute a simple
-`go get`:
->
- go get golang.org/x/tools/cmd/goimports
-<
-You'll see a more detailed error. If this works, vim-go will work too.
-
-
-I want to use a different binary name than "go", can I do this?~
-
-There is no way to directly configure the binary name; but you can use a
-wrapper script; for example if you would like to run `goapp` instead of `go`:
-
-1. In `~/gobin/go` (remember to make it executable):
->
- #!/bin/sh
- # Remove gobin from PATH and run goapp.
- PATH=${PATH#$HOME/gobin} goapp "$@"
-<
-2. Start Vim with `~/gobin` as the first `PATH` entry so it will use the
- wrapper script:
->
- PATH="$HOME/gobin/:$PATH" vim
-<
- Alternatively you you could set `$PATH` in your vimrc with an |:autocmd|.
-
-
-How do I use vim-go with syntastic?~
-
-Sometimes when using both `vim-go` and `syntastic` Vim will start lagging
-while saving and opening files. The following fixes this:
->
- let g:syntastic_go_checkers = ['golint', 'govet']
- let g:syntastic_mode_map = { 'mode': 'active', 'passive_filetypes': ['go'] }
-<
-If you want to add errcheck you can use golangci-lint as a wrapper:
->
- let g:syntastic_go_checkers = ['golint', 'govet', 'golangci-lint']
- let g:syntastic_go_gometalinter_args = ['--disable-all', '--enable=errcheck']
- let g:syntastic_mode_map = { 'mode': 'active', 'passive_filetypes': ['go'] }
-<
-Another issue with `vim-go` and `syntastic` is that the location list window
-that contains the output of commands such as `:GoBuild` and `:GoTest` might
-not appear. To resolve this:
->
- let g:go_list_type = "quickfix"
-<
-
-How do I run focused ginkgo tests?~
-
-You must set this environment variable in your `.vimrc`:
->
- let $GINKGO_EDITOR_INTEGRATION = "true"
-<
-
-Using with NeoVim~
-
-Note: Neovim currently is not a first class citizen for vim-go. You are free
-to open bug, however I'm not using Neovim so it's hard for me to test it.
-vim-go might not work as well in Neovim as it does in Vim. I'm happy to accept
-pull requests or very detailed bug reports. If you're interested to improve
-the state of Neovim in vim-go you're always welcome!
-
-Run `:GoRun` in a new tab, horizontal split or vertical split terminal
->
- au FileType go nmap <leader>rt <Plug>(go-run-tab)
- au FileType go nmap <leader>rs <Plug>(go-run-split)
- au FileType go nmap <leader>rv <Plug>(go-run-vertical)
-<
-By default new terminals are opened in a vertical split. To change it
->
- let g:go_term_mode = "split"
->
-
-How can I customize the highlighting?~
-
-All the highlight groups used by vim-go are prefixed with `go` (e.g.
-`goType`) and are defined in the files in the `syntax` directory. To change
-the highlighting for any group, add a `highlight` command for the group to
-your vimrc. To turn off the highlighting for any group, add `highlight link
-group-name NONE` (where `group-name` is the name of the group whose highlight
-you'd like to turn off) to your vimrc.
-
-Some people may wish to highlight Go's builtins as keywords. To do so, one
-should simply add `highlight link goBuiltins Keyword` to the `vimrc` file.
-
-==============================================================================
-DEVELOPMENT *go-development*
-
-vim-go supports test files written in VimScript; the way they're run is
-roughly similar to Go tests:
-
-- A `*.vim` file has a corresponding `*_test.vim`.
-- All functions starting with `Test_` are run as test.
-- A test is considered to be "failed" if |v:errors| has any entries. You can
- use one of the |test-functions| to set this, or append to it directly.
-
-A simple example:
->
- function Test_run_fmt()
- call assert_equal(expected, actual)
- ...
- endfunction
-<
-To run tests vim-go comes with three small helper scripts:
-
- `scripts/install-vim` Install a pristine Vim to `/tmp/vim-go-test/`.
- `scripts/run-vim` Run a Vim version from `/tmp/vim-go-test/`.
- `scripts/test` Run all tests with a Vim from `/tmp/vim-go-test/`.
-
-All scripts accept a Vim version as the first argument, which can be
-`vim-8.0` or `nvim`. You will need to install a Vim version with
-`install-vim` before you can use `run-vim` or `test`.
-
-You can install and test all Vim versions by running `make`.
-
-
-==============================================================================
-DONATION *go-donation*
-
-People have asked for this for a long time, now you can be a fully supporter
-by being a patreon at: https://www.patreon.com/bhcleek
-
-By being a patron, you are enabling vim-go to grow and mature, helping me to
-invest in bug fixes, new documentation, and improving both current and future
-features. It's completely optional and is just a direct way to support
-vim-go's ongoing development. Thanks!
-
-Check it out: https://www.patreon.com/bhcleek
-
-
-==============================================================================
-CREDITS *go-credits*
-
-* Go Authors for official Vim plugins.
-* Gocode, Godef, Golint, Guru, Goimports, Errcheck projects and authors of
- those projects.
-* Other vim-plugins, thanks for inspiration (vim-golang, go.vim, vim-gocode,
- vim-godef).
-* vim-go contributors: https://github.com/fatih/vim-go/graphs/contributors.
-
-
- vim: ft=help tw=78 et ts=2 sw=2 sts=2 norl
-
-endif