12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234 |
- *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 autocomplete, 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 tests with |:GoTestFunc|).
- * Quickly execute your current file(s) with |:GoRun|.
- * Improved syntax highlighting and folding.
- * Debug programs with integrated `delve` support with |:GoDebugStart|.
- * Completion support via `gocode`.
- * `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 `gometalinter` 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*
- 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'
- * 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`).
- Autocompletion 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 and
- https://github.com/zchee/deoplete-go
- * 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
- * For a better documentation viewer check out:
- https://github.com/garyburd/go-explorer
- * Integration with `delve` (Neovim only):
- https://github.com/jodosha/vim-godebug
- * 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*
- *: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.
- *: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://godoc.org'. 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 tool vet flags/options. In this case,
- `go tool vet` is run in place of `go vet`. For a full list please see
- `go tool vet -h`.
- If [!] is not given the first error is jumped to.
- *:GoDef*
- :GoDef
- gd
- CTRL-]
- g<C-LeftMouse>
- <C-LeftMouse>
- Goto declaration/definition for the declaration 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.
- *: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'|.
- *: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 `gocode` to get the type informations. To
- change the underlying tool from `gocode` 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 timesout 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.
- If using neovim `:GoTestFunc` 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'|.
- *: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.
- If using neovim `:GoTestCompile` 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'|.
- *: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.
- *: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`, `gocode`, 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`, `gocode`, 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] [pattern2] ... [patternN]
- 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, within any package in the analysis
- scope.
- *: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 'updatetime'). If
- disabled it clears and stops automatic highlighting.
- *:GoMetaLinter*
- :GoMetaLinter [path]
- Calls the underlying `gometalinter` 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.
- *: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 guru, gorename,
- etc..
- The build tags is cleared (unset) if `""` is given. If no arguments is
- given it prints the current custom 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
- <
- *: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] ...
- Rmove 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'|.
- *:GoAsmFmtAutoSaveToggle*
- :GoAsmFmtAutoSaveToggle
- Toggles |'g:go_asmfmt_autosave'|.
- *:GoMetaLinterAutoSaveToggle*
- :GoMetaLinterAutoSaveToggle
- Toggles |'g:go_metalinter_autosave'|.
- By default, `gometalinter` 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: "",
- }
- <
- ==============================================================================
- 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 buffer.
- *(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-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-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
- ==============================================================================
- 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
- 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 statusline's will show
- `success`, if you it fails all file's statusline 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.
- ==============================================================================
- SETTINGS *go-settings*
- *'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| or |:GoDocBrowser|. 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
- `gocode` is being used as it's the fastest option. But one might also use
- `guru` as it's covers more cases and is more accurate. Current valid options
- are: `[gocode, guru]` >
- let g:go_info_mode = 'gocode'
- <
- *'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 a custom 'updatetime' for Go source files. If
- set to 0, no custom time will be configured. 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
- |(go-build)|, |(go-run)|, etc.. 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. 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 gofmt. 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',
- \ }
- <
- *'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 slows (creates/deletes a file for every save) and
- it's causing problems on some Vim versions. By default it's disabled. >
- let g:go_fmt_experimental = 0
- <
- *'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://godoc.org'.
- >
- let g:go_doc_url = 'https://godoc.org'
- <
- *'g:go_def_mode'*
- Use this option to define the command to be used for |:GoDef|. By default
- `guru` is being used as it covers all edge cases. But one might also use
- `godef` as it's faster. Current valid options are: `[guru, godef]` >
- let g:go_def_mode = 'guru'
- <
- *'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_doc_command'*
- Command to use for |:GoDoc|; only used when invoked with a package name. The
- `gogetdoc` command is always used when |:GoDoc| is used on the identifier
- under the cursor (i.e. without argument or from |K|). >
- let g:go_doc_command = ["godoc"]
- < *'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_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'*
- These options that will be automatically passed to the `-tags` option of
- various tools, such as `guru`, `gorename`, etc... This is a permanent
- setting. A more useful way is to use |:GoBuildTags| to dynamically change or
- remove build tags. By default it's not set.
- >
- 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, `gometalinter` 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. By
- default it's using `vet` and `golint`.
- >
- let g:go_metalinter_autosave_enabled = ['vet', 'golint']
- <
- *'g:go_metalinter_enabled'*
- Specifies the linters to enable for the |:GoMetaLinter| command. By default
- it's using `vet`, `golint` and `errcheck`.
- >
- let g:go_metalinter_enabled = ['vet', 'golint', 'errcheck']
- <
- *'g:go_metalinter_disabled'*
- Specifies the linters to disable for the |:GoMetaLinter| command. By default
- it's empty
- >
- let g:go_metalinter_disabled = []
- <
- *'g:go_metalinter_command'*
- Overrides the command to be executed when |:GoMetaLinter| is called. This is
- an advanced settings and is for users who want to have a complete control
- over how `gometalinter` should be executed. By default it's empty.
- >
- let g:go_metalinter_command = ""
- <
- *'g:go_metalinter_deadline'*
- Overrides the maximum time the linters have to complete. By default it's 5
- seconds.
- >
- 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", "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'*
- This option is Neovim only. Use it to change the default command used to
- open a new terminal for go commands such as |:GoRun|.
- The default is vsplit.
- >
- let g:go_term_mode = "vsplit"
- <
- *'g:go_term_height'*
- *'g:go_term_width'*
- These options are Neovim only. Use them to control the height and width of
- a terminal split. By default these are not set, meaning that the height and
- width are set automatically by Neovim. The height only applies to a
- horizontal split and width only applies to a vertical split.
- 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'*
- This option is Neovim only. Use it to change the behavior of the test
- commands. If set to 1 it opens the test commands inside a new terminal
- according to |'g:go_term_mode'|, otherwise it will run them in the background
- just like `:GoBuild`. By default it is disabled.
- >
- let g:go_term_enabled = 0
- <
- *'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_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_gocode_autobuild'*
- Specifies whether `gocode` should automatically build out-of-date packages
- when their source fields are modified, in order to obtain the freshest
- autocomplete results for them. By default it is enabled.
- >
- let g:go_gocode_autobuild = 1
- <
- *'g:go_gocode_propose_builtins'*
- Specifies whether `gocode` should add built-in types, functions and constants
- to an autocompletion proposals. By default it is enabled.
- >
- let g:go_gocode_propose_builtins = 1
- <
- *'g:go_gocode_unimported_packages'*
- Specifies whether `gocode` should include suggestions from unimported
- packages. By default it is disabled.
- >
- let g:go_gocode_unimported_packages = 0
- <
- *'g:go_gocode_socket_type'*
- Specifies whether `gocode` should use a different socket type. By default
- `unix` is enabled. Possible values: `unix`, `tcp`
- >
- let g:go_gocode_socket_type = 'unix'
- <
- *'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.
- 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 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.
- >
- let g:go_template_file = "hello_world.go"
- <
- *'g:go_template_test_file'*
- Specifies the file under the `templates` folder that is used if a new Go test
- file is created. 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 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`. 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"].
- >
- let g:go_addtags_transform = 'snakecase'
- <
- *'g:go_debug'*
- A list of options to debug; useful for development and/or reporting bugs.
- Currently accepted values:
- 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`.
- >
- 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_arguments'*
- Highlight the variable names in arguments and return values in function
- declarations. Setting this implies the functionality from
- |'g:go_highlight_functions'|.
- >
- let g:go_highlight_function_arguments = 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
- <
- ==============================================================================
- *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.
- ==============================================================================
- 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 Vim 8.0.0087 or newer with the |+job| feature. Neovim
- does _not_ work (yet).
- This 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| 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 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 |:GoDebugStart| and |:GoDebugBreakpoint| are available by default; the
- rest of the commands and mappings become available after starting debug mode.
- *:GoDebugStart*
- :GoDebugStart [pkg] [program-args]
- Start the debug mode for [pkg]; this does several things:
- * Start `dlv debug` for [pkg], or `dlv test` if the current buffer's
- filename ends with `_test.go`.
- * Setup the debug windows according to |'g:go_debug_windows'|.
- * Make the `:GoDebug*` commands and `(go-debug-*)` mappings available.
- The current directory is used if [pkg] is empty. Any other arguments will
- be passed to the program.
- Use `-test.flag` to pass flags to `go test` when debugging a test; for
- example `-test.v` or `-test.run TestFoo`
- Use |:GoDebugStop| to stop `dlv` and exit debugging mode.
- *:GoDebugRestart*
- :GoDebugRestart
- Stop the program (if running) and restart `dlv` to recompile the package.
- The current window layout and breakpoints will be left intact.
- *: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.
- It will behave as |:GoDebugContinue| if the program isn't started.
- 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).
- It will behave as |:GoDebugContinue| if the program isn't started.
- 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").
- It will behave as |:GoDebugContinue| if the program isn't started.
- *: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 three
- possible keys: "stack", "out", and "vars"; the windows will created in that
- order with the commands in the value.
- A window will not be created if a key is missing or empty.
- Defaults:
- >
- let g:go_debug_windows = {
- \ 'stack': 'leftabove 20vnew',
- \ 'out': 'botright 10new',
- \ 'vars': 'leftabove 30vnew',
- \ }
- <
- Show only variables on the right-hand side: >
- let g:go_debug_windows = {
- \ 'vars': 'rightbelow 60vnew',
- \ }
- <
- *'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'
- <
- ==============================================================================
- FAQ TROUBLESHOOTING *go-troubleshooting*
- 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 curent 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~
- This is usually caused by `g:go_highlight_*` options. Try disabling them if
- you've enabled some of them.
- Other common culprits are |'g:go_auto_sameids'| and |go#statusline#Show()|.
- 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 gometalinter as a wrapper
- >
- let g:syntastic_go_checkers = ['golint', 'govet', 'gometalinter']
- 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 well as good as 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"
- >
- ==============================================================================
- 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-7.4`, `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/fatih
- 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/fatih
- ==============================================================================
- 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
|