mirror of
https://github.com/amix/vimrc
synced 2025-06-16 09:35:01 +08:00
Updated plugins
This commit is contained in:
@ -4,6 +4,6 @@ Thanks for improving vim-go! Before you dive in please read the following:
|
||||
[Documentation](https://github.com/fatih/vim-go/blob/master/doc/vim-go.txt), it might
|
||||
have answers for your problem
|
||||
2. If you add a new feature please don't forget to update the documentation:
|
||||
[doc/vim-go.txt](https://github.com/fatih/vim-go/blob/master/doc/vim-go.txt.
|
||||
[doc/vim-go.txt](https://github.com/fatih/vim-go/blob/master/doc/vim-go.txt).
|
||||
3. If it's a breaking change or exceed +100 lines please open an issue first
|
||||
and describe the changes you want to make.
|
||||
|
@ -1,8 +1,44 @@
|
||||
## unplanned
|
||||
|
||||
IMPROVEMENTS:
|
||||
|
||||
* `:GoAddTags` and `:GoRemoveTags` now continue to process if there are malformed individual struct tags [gh-1401]
|
||||
* `:GoAddTags` and `:GoRemoveTags` now shows a quickfix window if there are malformed struct tags [gh-1401]
|
||||
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
* Include comments in import block when folding is enabled [gh-1387]
|
||||
* Fix opening definitions in tabs [gh-1400]
|
||||
* Fix accidently closing quickfix window from other commands if :GoFmt or autosave format was called [gh-1407]
|
||||
|
||||
## 1.14 - (August 6, 2017)
|
||||
|
||||
FEATURES:
|
||||
|
||||
* We now have folding support based on Go syntax. Check out the
|
||||
[demo](https://twitter.com/fatih/status/893843722093330433) to see it in
|
||||
action. To enable it you have to set the following vim setting: `set
|
||||
foldmethod=syntax`. Currently it folds at block (`{ }`), var and const level.
|
||||
These can be individually disabled/enabled if wished. For more info please
|
||||
read the documentation for the `g:go_fold_enable` setting. [gh-1339]
|
||||
* `:GoFiles` accepts now an argument to change the type of files it can show.
|
||||
By default it shows`.go source files` but now it can be changed to show
|
||||
various kind of files. The full list can be seen via `go list --help` under
|
||||
the `// Source Files` section [gh-1372] i.e:
|
||||
|
||||
```
|
||||
:GoFiles CgoFiles // shows .go sources files that import "C"
|
||||
:GoFiles TestGoFiles // shows _test.go files in package
|
||||
:GoFiles IgnoredGoFiles // shows .go sources ignored due to build constraints
|
||||
etc..
|
||||
```
|
||||
|
||||
IMPROVEMENTS
|
||||
|
||||
* Files created with `_test.go` extension have a new template with a ready to go test function. The template can be changed with the `g:go_template_test_file` setting. [gh-1318]
|
||||
* Files created with `_test.go` extension have a new template with a ready to
|
||||
go test function. The template can be changed with the
|
||||
`g:go_template_test_file` setting. [gh-1318]
|
||||
* Improve performance for highly used operations by caching `go env` calls [gh-1320]
|
||||
* `:GoCoverage` can accept arguments now. i.e: `:GoCoverage -run TestFoo` [gh-1326]
|
||||
* `:GoDecls` and `:GoDeclsDir` shows a warning if [ctrlp.vim](https://github.com/ctrlpvim/ctrlp.vim) is not installed
|
||||
@ -10,6 +46,11 @@ IMPROVEMENTS
|
||||
* `:GoCoverage` echos now the progress if `g:go_echo_command_info` is enabled [gh-1333]
|
||||
* Add `g:go_doc_max_height` setting to control the maximum height of the window created by `:GoDoc` and `K` mapping [gh-1335]
|
||||
* The `af` text object is able to include the assignment variable for anonymous functions. Can be disabled with `g:go_textobj_include_variable = 0` [gh-1345]
|
||||
* Add `g:go_list_autoclose` setting to prevent closting the quickfix/location list after zero items [gh-1361]
|
||||
* Cursor is now adjusted and locked to the correct line when `goimports` is used for autosave [gh-1367]
|
||||
* Complement the path of command for different situations of Cygwin environment [gh-1394]
|
||||
* Show message when using :GoDef and opening a new buffer [gh-1385]
|
||||
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
@ -17,7 +58,29 @@ BUG FIXES:
|
||||
* Fix documentation for vim-go & syntastic integration for errcheck using [gh-1323]
|
||||
* Fix showing an output if a test has finished when `:GoTest` is called [gh-1327]
|
||||
* Fix warning when goimports doesn't support srcdir [gh-1344]
|
||||
* Fix brokwn code folding with go_highlight_types [gh-1338]
|
||||
* Fix broken code folding with go_highlight_types [gh-1338]
|
||||
* Fix blocking the ui when swapfile is enabled and `:GoFmt` is called (either manually or via autosave) [gh-1362]
|
||||
* Fix getting bin paths for binaries if GOPATH was not set and Go version =>1.7 was used [gh-1363]
|
||||
* Fix picking up the correct list type for showing `:GoFmt` errors [gh-1365]
|
||||
* Fix auto detecting of GOPATH for import paths with string 'src' (i.e: `GOPATH/src/github.com/foo/src/bar`) [gh-1366]
|
||||
* Fix showing an empty window if `gogetdoc` was not found [gh-1379]
|
||||
* Fix commands not being executed if paths would include spaces (binary name, GOPATH, file itself, etc..) [gh-1374]
|
||||
* Fix showing correct message when editing a new file [gh-1371]
|
||||
* Fix filepaths in the quickfix list for :GoVet [gh-1381]
|
||||
* Run :GoLint against the package of the open file [gh-1382]
|
||||
|
||||
BACKWARDS INCOMPATIBILITIES:
|
||||
|
||||
* `:GoFmt` now uses `quickfix` to show formatting errors instead of
|
||||
`locationlist`. To change back to `locationlist` you can change it with the
|
||||
setting `let g:go_list_type = "locationlist"` [gh-1365]
|
||||
* `:GoLint` now runs against the package of the open file instead of the
|
||||
current working directory. This is so all commands behave the same relative
|
||||
to the current open buffer. For more info check the [comment
|
||||
here](https://github.com/fatih/vim-go/issues/1375#issuecomment-317535953)
|
||||
[gh-1382]
|
||||
|
||||
|
||||
|
||||
## 1.13 - (June 6, 2017)
|
||||
|
||||
@ -150,7 +213,11 @@ BACKWARDS INCOMPATIBILITIES:
|
||||
|
||||
FEATURES:
|
||||
|
||||
* Travis test integration has been added. Now any file that is added as `<name>_test.vim` will be automatically tested in for every Pull Request (just like how we add tests to Go with `_test.go`). Going forward this will tremendously increase the stability and decrease the maintenance burden of vim-go. [gh-1157]
|
||||
* Travis test integration has been added. Now any file that is added as
|
||||
`<name>_test.vim` will be automatically tested in for every Pull Request
|
||||
(just like how we add tests to Go with `_test.go`). Going forward this will
|
||||
tremendously increase the stability and decrease the maintenance burden of
|
||||
vim-go. [gh-1157]
|
||||
* Add new `g:go_updatetime` setting to change the default updatetime (which was hardcoded previously) [gh-1055]
|
||||
* Add new `g:go_template_use_pkg` setting to enable to use cwd as package name instead of basic template file [gh-1124]
|
||||
|
||||
@ -491,6 +558,376 @@ BACKWARDS INCOMPATIBILITIES:
|
||||
i.g: `let g:go_guru_scope = ["github.com/fatih/structs", "golang.org/x/tools/..."]`
|
||||
|
||||
|
||||
## Previous releases
|
||||
## 1.5 (Mar 16, 2016)
|
||||
|
||||
Previous changelogs can be found here: https://github.com/fatih/vim-go/releases
|
||||
FEATURES:
|
||||
* Introducing code name "motion". A new whole way of moving
|
||||
around and navigating (gh-765). Checkout the following new changes:
|
||||
* A vim-go specific tool, called [motion](https://github.com/fatih/motion) is being developed which
|
||||
provides us the underlying foundation for the following and upcoming
|
||||
new features.
|
||||
* `]]` and `[[` motions can be used to jump between functions
|
||||
* `if` and `af` are improved and implement from scratch. It has now
|
||||
support for literal functions, comments of functions, better cursor
|
||||
position support and more stable.
|
||||
* New `:GoDecls` and `:GoDeclsDir` commands that are available if
|
||||
`ctrlp.vim` is installed. Once called one can easily jump to any generic declaration available.
|
||||
* I wrote two blog posts about these new features in more detail. I recommend you to read it: [Treating Go types as objects in Vim](https://medium.com/@farslan/treating-go-types-as-objects-in-vim-ed6b3fad9287#.mbwaisevp) and [Navigation between functions and types in vim-go](https://medium.com/@farslan/navigation-between-functions-and-types-in-vim-go-f9dd7de8ca37#.2sdf8tbbe)
|
||||
* A new `:GoAlternate` command that toggles to the test
|
||||
file of the current file. It also has new appropriate mappings to open the
|
||||
alternate file in split or tabs. (gh-704)
|
||||
* Now commands can choose whether they want to open a
|
||||
`quickfix` or a `location list` via the setting `g:go_list_type`. Also all
|
||||
the commands have now some sensible settings, some will open a qf window,
|
||||
some will open a location list (gh-700)
|
||||
|
||||
IMPROVEMENTS:
|
||||
|
||||
* Add support for goimport's new `-srcdir`. Goimports now succesfully suports `vendor/` folders with this release. (gh-735)
|
||||
* Add `g:go_gorename_prefill` setting which disabled pre filling the argument for `:GoRename` (gh-711)
|
||||
* Improve `:GoRun` to complete to filenames (gh-742)
|
||||
* Highlight `//go:generate` comment directives (gh-757)
|
||||
* Indent code in Go HTML templates (gh-709)
|
||||
* Improve negative numbers of all types, octals, imaginary numbers with exponents (gh-752)
|
||||
* Improved internal usage of retrieving offsets (gh-762)
|
||||
* Improve by substitute all backslashes to slashes for filename (gh-703)
|
||||
* Improve internal Go package path function (gh-702)
|
||||
* Improved typo and grammar errors in docs (gh-714)
|
||||
* Improved internal `:GoInfo` automatic call (gh-759)
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
* Fix oracle scope not working if trailing slash exists in scope (gh-751)
|
||||
* Fix `:GoErrCheck` checking abspath (gh-671)
|
||||
* Fix `:GoInstall` correctly parsing errors (gh-692)
|
||||
* Fix `:GoInstall` correctly parsing errors (gh-692)
|
||||
* Fix `:GoTestFunc` for neovim (gh-695)
|
||||
* Fix `:GoRun` accepting arguments for neovim (gh-730)
|
||||
* Fix `go run` mappings not working (gh-542)
|
||||
* Fix autodetect gopath picking up non existing GB vendor folder
|
||||
* Fix gofmt errors showing per buffer instead of per script (gh-721)
|
||||
* Fix some of the neosnippet snippets
|
||||
|
||||
## 1.4 (Jan 18, 2016)
|
||||
|
||||
FEATURES:
|
||||
|
||||
* You waited for it for a long time. And here you have it: **Neovim support!**
|
||||
This is a huge feature. It's fully compatible with Vim and kicks only in if
|
||||
vim-go is being used within Neovim. Checkout the full list of changes
|
||||
(gh-607):
|
||||
* An async launcher and base foundation was implemented for the `go` command.
|
||||
This will be used in the future for all upcoming subcommands of the `go`
|
||||
tool.
|
||||
* `:GoBuild` is now called asynchronously (it doesn't block the UI anymore).
|
||||
* A new `go#jobcontrol#Statusline()` can be used to plug into the statusline.
|
||||
This will show the status of the job running asynchronously. The statusline
|
||||
is improved to show the status per package instead of file. Assume you have
|
||||
three files open, all belonging to the same package, if the package build
|
||||
(`:GoBuild`) is successful, all statusline's will be empty (means SUCCESS),
|
||||
if it fails all files statusline's will show `FAILED`.
|
||||
* `:GoRun` opens a new vertical terminal emulator inside Neovim and runs the
|
||||
command there. The terminal mode can be changed with `g:go_term_mode`,
|
||||
which is by default `vsplit`. Current options are `vsplit, split or tab`.
|
||||
We also have three new mappings to open `:GoRun` command in different
|
||||
terminal split modes: `<Plug>(go-run-vertical)`, `<Plug>(go-run-split)`
|
||||
and `<Plug>(go-run-tab)`
|
||||
* `:GoTest`, `:GoTestFunc` and `:GoTestCompile` opens and runs in a new
|
||||
terminal. The view mode (split,vertical, tab) is defined with
|
||||
`g:go_term_mode`. The `g:go_term_enabled` setting can be use to change the
|
||||
behavior of `:GoTestXXX` commands .If set to `1`, it opens the test
|
||||
commands inside a terminal, if not it runs them in background just like
|
||||
`:GoBuild` and displays the result in the statusline.
|
||||
* We have two settings for terminal sizes: `g:go_term_height` and
|
||||
`g:go_term_width`. By default a vertical or horizontal view is equally
|
||||
splitted by vim automatically. However with these settings we can for
|
||||
example have a terminal with a smaller height when we split it
|
||||
horizontally.
|
||||
* If a command inside the term fails (such as `go run`, `go test` ...) we
|
||||
parse now the errors and list them inside a location list.
|
||||
* Instead of quickfix window, vim-go now uses the `location list` feature of
|
||||
Vim. These are associated with each window independently of each other. This
|
||||
enables us to have multiple, independent location lists per window (example
|
||||
usages: `:GoBuild` with errors that needs to be fixed, `:GoLint` with
|
||||
warnings that we want to check, `:GoReferrers` with a list of referred
|
||||
identifiers) (gh-626)
|
||||
* a new **`:AsmFmt`** command which is integrated to work with [asmfmt](https://github.com/klauspost/asmfmt) (gh-673)
|
||||
* the full identifier information of a completed identifier is echoed in
|
||||
statusline. This is very useful to see a function signatures arguments.
|
||||
(gh-685)
|
||||
|
||||
IMPROVEMENTS:
|
||||
|
||||
* Improve `:GoFmt` by checking if the binary is indeed installed on the system (gh-617)
|
||||
* Improve `:GoMetaLinter` by adding the option to run the metalinter on save
|
||||
and adding the option to limit the output to the currently active buffer. Set
|
||||
`let g:go_metalinter_autosave = 1` to enable autosave and use `let
|
||||
g:go_metalinter_autosave_enabled = ['vet', 'golint']` to change your options.
|
||||
(gh-631)
|
||||
* Improved `:GoDef`. If `vimproc` is installed `godef` will make use of it (gh-670)
|
||||
* Improve completion of godoce when vimproc is used (gh-620)
|
||||
* Improve internal error matching prodecure to not match false positives (gh-618)
|
||||
* A new option to highlight interface variables with `go_highlight_interfaces` (gh-681)
|
||||
|
||||
BUG FIXES
|
||||
|
||||
* Fix `:GoFmt` changing the fileformat of the current buffer (gh-615)
|
||||
* Fix `:GoRename` to output the original error if parsing fails (gh-675)
|
||||
* Fix `:GoTest` to output the original error if parsing fails (gh-676)
|
||||
* Fixed `fmt.Fprintln` not to highlight as builtin (gh-628)
|
||||
* Fixed wrong highlighting of channels of channels (gh-678)
|
||||
|
||||
## 1.3 (Nov 22, 2015)
|
||||
|
||||
FEATURES:
|
||||
|
||||
* A new `:GoOracleTags` command was added to pass build tags to Oracle's `-tags` flag. (gh-573)
|
||||
|
||||
IMPROVEMENTS:
|
||||
|
||||
* Change `:GoTest` command to timeout after 10 seconds. Vim UI is blocking and
|
||||
tests with large running times makes Vim blocking for a long time. This is
|
||||
also customizable with the new option `g:go_test_timeout`. (gh-578)
|
||||
* Improve `:GoRename` to collect and populate quickfix window with errors.
|
||||
(gh-577)
|
||||
* Improve `:GoRun` by dropping bad filenames from quickfix window. This allows
|
||||
us to have only valid entries which can be jumped to (gh-547)
|
||||
* Improve `:GoMetaLinter` quickfix output by using absolute paths. This enables
|
||||
us to jump to errors for all cases. (gh-565)
|
||||
* Improve `:GoMetaLinter` command by adding a new option
|
||||
`g:go_metalinter_deadline` which cancels the linters after 5 seconds
|
||||
(previous default). (gh-576)
|
||||
* Improve `:GoMetaLinter` by jumping to the first encountered error from the quickfix window.
|
||||
* Automatically resize quickfix window based on the number of errors (gh-602)
|
||||
* Improve build constraints to show invalid cases (such as `// +buildfoo`, not
|
||||
having an empty line between the package statement, etc..). Also add missing
|
||||
`GOARCH` values sucha s `arm64`. There are many other useful improvements,
|
||||
for more detail please have a look at
|
||||
([gh-589](https://github.com/fatih/vim-go/pull/589))
|
||||
* Add support for all values of `GOARCH` (gh-601)
|
||||
* Add note about Syntastic usage as this problem comes up a lot (gh-580)
|
||||
* Add note about `:GoUpdateBinaries` (gh-606)
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
* Fixed `:GoErrCheck` showing the correct output when executed inside the source folder (gh-564)
|
||||
* Fixed `:GoBuild` by not using `/dev/null` anymore for build output (not
|
||||
supported by `go`). We pass a temporary file now. (gh-567)
|
||||
* Fixed `:GoFmt` passing `g:go_fmt_options` options to `goimports`. This option
|
||||
is only valid with `gofmt`. (gh-590)
|
||||
* Fix vim-go for `cygwin` users. (gh-575)
|
||||
* Fixed identifier in template files to be highlighted correctly (gh-559)
|
||||
* Fixed character region in template files to be highlighted correctly (gh-603)
|
||||
* Fixed variables in template files to be highlighted correctly (gh-611)
|
||||
* Do not treat builtins as keywords. Now `make` will not highlighted but
|
||||
`make()` will be highlighted (gh-605)
|
||||
|
||||
## 1.2 (Oct 2, 2015)
|
||||
|
||||
FEATURES:
|
||||
|
||||
* A new `:GoMetaLinter` command which invokes [gometalinter](https://github.com/alecthomas/gometalinter). Please check the PR [#553](https://github.com/fatih/vim-go/pull/553) for more detail on customizing and usage of `:GoMetaLinter`.
|
||||
|
||||
IMPROVEMENTS:
|
||||
|
||||
* Improve `:GoImport` to trim spaces when including import paths of form `"fmt "`
|
||||
* Avoid setting `filetype` twice. Previously it was doing it twice, which was expensive
|
||||
* Improve handling of GOPATH's with trailing `/` characters, such as `/home/user/go/`
|
||||
* Add a new `g:go_highlight_string_spellcheck` feature, which is enabled by feature. Now if spell is enabled, go strings are also checked.
|
||||
* Specify our limited but functional [gb](http://getgb.io/) support
|
||||
|
||||
BUG FIXES:
|
||||
* Fixed `:GoRun` to display errors when `g:go_dispatch_enabled` was enabled
|
||||
* Fixed `:GoDrop` displaying "Not enough arguments" (regression)
|
||||
* Fixed `:GoErrCheck` not showing `PASS` message if the command was successful
|
||||
* Fixed `:GoErrCheck` not executing in the directory of the currently edited file
|
||||
* Close quickfix window after a successful second round of `:GoInstall`
|
||||
* Fix passing files rather than packages to certain oracle commands.
|
||||
* Escape files passed to oracle command. This could lead to some serious things.
|
||||
* Clear `g:go_oracle_scope` when the scope was reseted. Previously it was set to empty string, which was causing false positives.
|
||||
* Correct various misspellings.
|
||||
|
||||
## 1.1 (Jul 25, 2015)
|
||||
|
||||
With this release the version will now increase in `minor` levels. So the next
|
||||
release will be `1.2`, the other one `1.3`, etc.. This provides us more
|
||||
flexibility (like releasing patch versions if needed).
|
||||
|
||||
FEATURES:
|
||||
* A new `:GoGenerate` command is now available which can be used to invoke `go generate` within vim
|
||||
* Vim-go didn't had any license, now we use BSD 3-Clause License (the same as Go). This is needed for Linux distributions to package vim-go and is also something that people asked for.
|
||||
|
||||
IMPROVEMENTS:
|
||||
* Improve commands `GoRun, GoTest{,Func,Compile}, GoCoverage,
|
||||
GoGenerate, GoErrcheck, GoLint, and GoVet` to handle multiple arguments.
|
||||
Previously this feature was limited to only certain commands. What this means
|
||||
is, for example `:GoVet . -all` will invoke `go tool vet . -all`
|
||||
automatically instead of plan `go vet`. This is one of the big changes in
|
||||
this release, so give it a try :)
|
||||
* Improved `:GoFmt` command, which now uses the `-w` flag to
|
||||
write to the source code directly, instead of outputting it to stdout. This
|
||||
makes `:GoFmt` much more faster than the current implementation. This is one
|
||||
of the big changes in this release, so feedback is welcome!
|
||||
* Improve `:GoImport` to have a `!` feature. Now when when called
|
||||
with a `!` appended it will go get it. i.e: `:GoImport!
|
||||
github.com/fatih/color`. Useful if `:GoImport` fails and you want to download
|
||||
it.
|
||||
* Automatic GOPATH detections can now detect `gb` vendored folders. Some commands should now work without any problem when invoked on a `gb` project.
|
||||
* All command arguments are now properly escaped for shell invocation.
|
||||
* Added the `-f` flag to :GoInstallBinaries command to support `git url.<base>.insteadOf` configuration
|
||||
* Improve width and precision highlighting, such as `%s %5s %-5s %5.5f %.5f`
|
||||
* Show an error if a region is not selected when `:GoFreeVars` is called
|
||||
|
||||
BUG FIXES:
|
||||
* Fix`:GoDef` for files containing spaces. We know escape the files before passing to `:GoDef`
|
||||
* Fix `:GoFmt` not picking up the correct GOPATH when the fmt command was set to `goimports`
|
||||
* Fix and simplify README.md, add Wiki reference
|
||||
* Fixed tagbar integration to show correct imports.
|
||||
|
||||
|
||||
## 1.0.5 (May 26, 2015)
|
||||
|
||||
FEATURES:
|
||||
* A new `:GoOracleScope` is added to change the oracle scope on-the-fly. It
|
||||
accepts import paths as arguments. If no arguments are passed it prints the
|
||||
current custom oracle scope. `:GoOracleScope` also supports completion of
|
||||
import paths, so it's very fast and handy to use. `:GoOracleScope ""` clears
|
||||
the current custom scope.
|
||||
* A new `:GoPath` command that displays the current `GOPATH`. A path can be
|
||||
passed to change the `GOPATH` (i.e `:GoPath ~/foo/src`). `:GoPath ""` clears
|
||||
and resets the `GOPATH` to the initial value.
|
||||
* A new "autodetect GOPATH" feature is added. This automatically detects if the
|
||||
project is using `godep` or is under a `src` root directory which is not in
|
||||
`GOPATH` and changes/modifies the `GOPATH` so all commands work based on this
|
||||
GOPATH. What this means is, commands such as `:GoDef`, `:GoBuild`, etc.. will
|
||||
include the Godeps folder. For example any go-to-definition via `:GoDef` will
|
||||
jump to the source code inside Godeps. This is enabled by default, but can
|
||||
disabled with `let g:go_autodetect_gopath = 0`. This new feature is also the
|
||||
foundation for other tools such as `gb` or `wgo`.
|
||||
|
||||
IMPROVEMENTS:
|
||||
* Improve `:GoFmt` (gofmt and goimports) speed. Now it's 2x faster than the previous implementation.
|
||||
* Add Dispatch support for `:GoBuild` and `:GoRun`. For more info about
|
||||
dispatch see https://github.com/tpope/vim-dispatch . By default it's
|
||||
disabled, to enable it add `let g:go_dispatch_enabled = 1` to your vimrc.
|
||||
* Add support for the bang `!` attribute for all `go` tool commands. What this
|
||||
does it, if `:GoBuild` is called it will jump to the error. But `:GoBuild!`
|
||||
will not jump to any error. This has the same behavior as the internal
|
||||
`:make` command in vim. We had this feature already for `:GoBuild` and
|
||||
`:GoRun`. But not for `:GoInstall`, `:GoTest`, etc.. Now all commands are
|
||||
unified.
|
||||
* Add autojump to error for `:GoInstall`.
|
||||
* Add autowrite feature for `:GoInstall`, `:GoTestXXX` functions and `:GoVet`
|
||||
* Support `git url.<base>.insteadOf` and custom import paths of binaries. This
|
||||
improves the commands `:GoInstallBinaries` and `:GoUpdateBinaries`.
|
||||
* Add support for highlighting go templates with `*.tmpl` extensions. Based on
|
||||
the work from @cespare from https://github.com/cespare/vim-go-templates
|
||||
|
||||
BUG FIXES:
|
||||
* Fix clearing the status bar when `:GoErrCheck` is called
|
||||
* Fix godocNotFound to not match 'os' pkg contents. This improves the command
|
||||
`:GoDoc`
|
||||
* Fix parsing and jumping to error locations when used Vim from a different
|
||||
directory than the current buffer's directory
|
||||
* Fix completion showing duplicates paths for completion results, such as
|
||||
github.com/fatih/color and github.com/fatih/color/.
|
||||
|
||||
## 1.0.4 (Apr 28, 2015)
|
||||
|
||||
FEATURES:
|
||||
|
||||
* A new `:GoTestFunc` command (with appropriate
|
||||
mappings) is added. Run tests function which surrounds the current cursor
|
||||
location. Useful to test single tests.
|
||||
* Highlight all Go operators. Previously not all
|
||||
operators were highlighted. As previously, to highlight options, enable it
|
||||
with by setting `g:go_highlight_operators` to 1 in your vimrc.
|
||||
|
||||
IMPROVEMENTS:
|
||||
|
||||
* Improved certain `:GoDoc` usages to show a better error message
|
||||
* Improved `:GoRename` to have a default value for rename input. Avoids retyping similar words.
|
||||
* Synced with latest Oracle version. `callgraph` is removed.
|
||||
* Removed our custom referrers mode. New version of oracle now displays the matching lines.
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
* Fixed the internal `executeInDir` function which was failing when ignorelist was not set properly.
|
||||
* Fixed trailing slash for package completion with `:GoImport`
|
||||
* Fixed paths in error list for Windows users.
|
||||
* Fixed not showing "import cycle not allowed" error message when called `:GoBuild` or `:GoRun`
|
||||
* Fixed users using vimproc requiring arguments to functions to be escaped.
|
||||
* Fixed depth for test snippets
|
||||
* Fixed neosnippet support loading snippet files the second time if necessary.
|
||||
|
||||
## 1.0.3 (Mar 7, 2015)
|
||||
|
||||
FEATURES:
|
||||
* A new `:GoTestCompile` command (with appropriate mappings) is added. Useful to compile a test binary or show/fix compile errors in quickfix window
|
||||
|
||||
IMPROVEMENTS:
|
||||
* `referrer` mode is improved to show referring lines in the quickfix window
|
||||
* A new `errt` snippet is added, which expands to `if err != nil { t.Fatal(err) }`
|
||||
* A new `errh` snippet is added, useful to be used in a `http.Handler`
|
||||
* UltiSnips snippets are improved to take advance of Vim's `Visual` mode. For example selecting a block and typing `if` will create an if scope around the block.
|
||||
* Cleanup README.md
|
||||
|
||||
BUG FIXES:
|
||||
* Fix trimming brackets if completion was invoked on a previous completion
|
||||
* Fix Oracle scope settings. Added docs about usage.
|
||||
* Fixed previously broken `var` and `vars` snippets
|
||||
* Fix duplicate docs
|
||||
* Fix fallback binary path for Windows users. The fallback mechanism is used to discover the necessary Go tools, such as `godef`, `gocode`, etc...
|
||||
|
||||
## 1.0.2 (Feb 17, 2015)
|
||||
|
||||
FEATURES:
|
||||
|
||||
* New snippets are added, mostly for testing ( [changes](https://github.com/fatih/vim-go/pull/321/files))
|
||||
|
||||
IMPROVEMENTS:
|
||||
|
||||
* Enable all Oracle commands. Docs, mappings and commands are also added. It uses Quickfix list instead of a custom UI.
|
||||
* Clarify installation process in Readme, add instructions for vim-plug, NeoBundle and manual.
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
* Fix shiftwidth parsing, it was broken in the previous release for old Vim versions
|
||||
* Fix experimantal mode
|
||||
|
||||
|
||||
## 1.0.1 (Feb 9, 2015)
|
||||
|
||||
FEATURES:
|
||||
|
||||
* New feature to highlight build constraints (disabled by default)
|
||||
|
||||
IMPROVEMENTS:
|
||||
|
||||
* Updated godef import path
|
||||
* Updated Readme for possible problems with `csh`
|
||||
* Documentation for text objects are updated, typo fixes are merged
|
||||
* If vimproc is installed, Windows users will use it for autocompletion
|
||||
* Improve UltiSnips snippets to pick Visual selection (demo: http://quick.as/0dvigz5)
|
||||
* Packages with extensions, like "gopkg.in/yaml.v2" can be now displayed
|
||||
* Packages with different import paths, like "github.com/bitly/go-simplejson" can be now displayed
|
||||
|
||||
BUG FIXES:
|
||||
|
||||
* Fatal errors are now parsed successfully and populated to quickfix list
|
||||
* Shiftwidth is changed to use shiftwidth() function. Fixes usage with plugins like vim-sleuth and possible mis usage (like setting shiftwidth to zero)
|
||||
* Added a new [Donation](https://github.com/fatih/vim-go#donations) section to Readme, for those who ask for it.
|
||||
* Fix parsing of errcheck error syntax
|
||||
* Fix consistency between Neosnippet and UltiSnips snippets
|
||||
|
||||
|
||||
## 1.0 (Dec 24, 2014)
|
||||
|
||||
We don't tag any changes or releases, so let's start with `1.0`. Our Windows
|
||||
support is now in a good shape, tons of bugs are fixed, many new features and
|
||||
improvements is being added and it's getting better with each day (thanks to
|
||||
the community contributions).
|
||||
|
||||
## 0.0 (Mar 24, 2014)
|
||||
|
||||
Initial commit: https://github.com/fatih/vim-go/commit/78c5caa82c111c50e9c219f222d65b07694f8f5a
|
||||
|
@ -59,6 +59,11 @@ Official documentation can be found under [doc/vim-go.txt](doc/vim-go.txt). You
|
||||
```
|
||||
:help vim-go
|
||||
```
|
||||
|
||||
Depending on your installation, you may have to generate the plugin's [help
|
||||
tags](https://github.com/vim/vim/blob/v8.0.0711/runtime/doc/helphelp.txt#L206-L227)
|
||||
manually (eg. `:helptags ALL`).
|
||||
|
||||
We also have an [official vim-go
|
||||
tutorial](https://github.com/fatih/vim-go-tutorial).
|
||||
|
||||
|
@ -25,7 +25,8 @@ function! go#def#Jump(mode) abort
|
||||
let $GOPATH = old_gopath
|
||||
return
|
||||
endif
|
||||
let command = printf("%s -f=%s -o=%s -t", bin_path, fname, go#util#OffsetCursor())
|
||||
let command = printf("%s -f=%s -o=%s -t", go#util#Shellescape(bin_path),
|
||||
\ go#util#Shellescape(fname), go#util#OffsetCursor())
|
||||
let out = go#util#System(command)
|
||||
if exists("l:tmpname")
|
||||
call delete(l:tmpname)
|
||||
@ -96,6 +97,7 @@ function! s:jump_to_declaration_cb(mode, bin_name, job, exit_status, data) abort
|
||||
endif
|
||||
|
||||
call go#def#jump_to_declaration(a:data[0], a:mode, a:bin_name)
|
||||
call go#util#EchoSuccess(fnamemodify(a:data[0], ":t"))
|
||||
endfunction
|
||||
|
||||
function! go#def#jump_to_declaration(out, mode, bin_name) abort
|
||||
@ -153,9 +155,11 @@ function! go#def#jump_to_declaration(out, mode, bin_name) abort
|
||||
endif
|
||||
|
||||
if a:mode == "tab"
|
||||
let &switchbuf = "usetab"
|
||||
let &switchbuf = "useopen,usetab,newtab"
|
||||
if bufloaded(filename) == 0
|
||||
tab split
|
||||
else
|
||||
let cmd = 'sbuf'
|
||||
endif
|
||||
elseif a:mode == "split"
|
||||
split
|
||||
@ -164,7 +168,7 @@ function! go#def#jump_to_declaration(out, mode, bin_name) abort
|
||||
endif
|
||||
|
||||
" open the file and jump to line and column
|
||||
exec cmd filename
|
||||
exec cmd fnameescape(filename)
|
||||
endif
|
||||
endif
|
||||
call cursor(line, col)
|
||||
|
@ -58,17 +58,21 @@ function! go#doc#OpenBrowser(...) abort
|
||||
endfunction
|
||||
|
||||
function! go#doc#Open(newmode, mode, ...) abort
|
||||
" With argument: run "godoc [arg]".
|
||||
if len(a:000)
|
||||
" check if we have 'godoc' and use it automatically
|
||||
let bin_path = go#path#CheckBinPath('godoc')
|
||||
if empty(bin_path)
|
||||
return
|
||||
endif
|
||||
|
||||
let command = printf("%s %s", bin_path, join(a:000, ' '))
|
||||
let command = printf("%s %s", go#util#Shellescape(bin_path), join(a:000, ' '))
|
||||
let out = go#util#System(command)
|
||||
" Without argument: run gogetdoc on cursor position.
|
||||
else
|
||||
let out = s:gogetdoc(0)
|
||||
if out == -1
|
||||
return
|
||||
endif
|
||||
endif
|
||||
|
||||
if go#util#ShellError() != 0
|
||||
@ -137,7 +141,7 @@ function! s:gogetdoc(json) abort
|
||||
return -1
|
||||
endif
|
||||
|
||||
let cmd = [bin_path]
|
||||
let cmd = [go#util#Shellescape(bin_path)]
|
||||
|
||||
let offset = go#util#OffsetCursor()
|
||||
let fname = expand("%:p:gs!\\!/!")
|
||||
|
@ -69,7 +69,10 @@ function! go#fmt#Format(withGoimport) abort
|
||||
let bin_name = "goimports"
|
||||
endif
|
||||
|
||||
let current_col = col('.')
|
||||
let out = go#fmt#run(bin_name, l:tmpname, expand('%'))
|
||||
let diff_offset = len(readfile(l:tmpname)) - line('$')
|
||||
|
||||
if go#util#ShellError() == 0
|
||||
call go#fmt#update_file(l:tmpname, expand('%'))
|
||||
elseif g:go_fmt_fail_silently == 0
|
||||
@ -95,6 +98,9 @@ function! go#fmt#Format(withGoimport) abort
|
||||
" Restore our cursor/windows positions.
|
||||
call winrestview(l:curw)
|
||||
endif
|
||||
|
||||
" be smart and jump to the line the new statement was added/removed
|
||||
call cursor(line('.') + diff_offset, current_col)
|
||||
endfunction
|
||||
|
||||
" update_file updates the target file with the given formatted source
|
||||
@ -116,15 +122,25 @@ function! go#fmt#update_file(source, target)
|
||||
endif
|
||||
|
||||
" reload buffer to reflect latest changes
|
||||
silent! edit!
|
||||
silent edit!
|
||||
|
||||
let &fileformat = old_fileformat
|
||||
let &syntax = &syntax
|
||||
|
||||
|
||||
" the title information was introduced with 7.4-2200
|
||||
" https://github.com/vim/vim/commit/d823fa910cca43fec3c31c030ee908a14c272640
|
||||
if !has('patch-7.4-2200')
|
||||
return
|
||||
endif
|
||||
|
||||
" clean up previous location list
|
||||
let l:listtype = "locationlist"
|
||||
call go#list#Clean(l:listtype)
|
||||
call go#list#Window(l:listtype)
|
||||
let l:list_title = getqflist({'title': 1})
|
||||
if has_key(l:list_title, "title") && l:list_title['title'] == "Format"
|
||||
let l:listtype = go#list#Type("quickfix")
|
||||
call go#list#Clean(l:listtype)
|
||||
call go#list#Window(l:listtype)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" run runs the gofmt/goimport command for the given source file and returns
|
||||
@ -166,9 +182,10 @@ function! s:fmt_cmd(bin_name, source, target)
|
||||
endif
|
||||
|
||||
" start constructing the command
|
||||
let bin_path = go#util#Shellescape(bin_path)
|
||||
let cmd = [bin_path]
|
||||
call add(cmd, "-w")
|
||||
|
||||
|
||||
" add the options for binary (if any). go_fmt_options was by default of type
|
||||
" string, however to allow customization it's now a dictionary of binary
|
||||
" name mapping to options.
|
||||
@ -228,7 +245,7 @@ endfunction
|
||||
" show_errors opens a location list and shows the given errors. If the given
|
||||
" errors is empty, it closes the the location list
|
||||
function! s:show_errors(errors) abort
|
||||
let l:listtype = go#list#Type("locationlist")
|
||||
let l:listtype = go#list#Type("quickfix")
|
||||
if !empty(a:errors)
|
||||
call go#list#Populate(l:listtype, a:errors, 'Format')
|
||||
echohl Error | echomsg "Gofmt returned error" | echohl None
|
||||
|
@ -33,7 +33,7 @@ function! go#impl#Impl(...) abort
|
||||
return
|
||||
endif
|
||||
|
||||
let result = go#util#System(printf("%s '%s' '%s'", binpath, recv, iface))
|
||||
let result = go#util#System(join(go#util#Shelllist([binpath, recv, iface], ' ')))
|
||||
if go#util#ShellError() != 0
|
||||
call go#util#EchoError(result)
|
||||
return
|
||||
|
@ -31,10 +31,6 @@ function go#job#Spawn(args)
|
||||
endfunction
|
||||
|
||||
function cbs.exit_cb(job, exitval) dict
|
||||
if has_key(self, 'custom_cb')
|
||||
call self.custom_cb(a:job, a:exitval, self.messages)
|
||||
endif
|
||||
|
||||
if has_key(self, 'error_info_cb')
|
||||
call self.error_info_cb(a:job, a:exitval, self.messages)
|
||||
endif
|
||||
@ -47,6 +43,10 @@ function go#job#Spawn(args)
|
||||
endif
|
||||
endif
|
||||
|
||||
if has_key(self, 'custom_cb')
|
||||
call self.custom_cb(a:job, a:exitval, self.messages)
|
||||
endif
|
||||
|
||||
let l:listtype = go#list#Type("quickfix")
|
||||
if a:exitval == 0
|
||||
call go#list#Clean(l:listtype)
|
||||
|
@ -10,7 +10,8 @@ function! go#keyify#Keyify()
|
||||
endif
|
||||
|
||||
" Get result of command as json, that contains `start`, `end` and `replacement`
|
||||
let command = printf("%s -json %s:#%s", bin_path, fname, go#util#OffsetCursor())
|
||||
let command = printf("%s -json %s:#%s", go#util#Shellescape(bin_path),
|
||||
\ go#util#Shellescape(fname), go#util#OffsetCursor())
|
||||
let output = go#util#System(command)
|
||||
silent! let result = json_decode(output)
|
||||
|
||||
|
@ -121,9 +121,10 @@ function! go#lint#Golint(...) abort
|
||||
if empty(bin_path)
|
||||
return
|
||||
endif
|
||||
let bin_path = go#util#Shellescape(bin_path)
|
||||
|
||||
if a:0 == 0
|
||||
let out = go#util#System(bin_path)
|
||||
let out = go#util#System(bin_path . " " . go#util#Shellescape(go#package#ImportPath()))
|
||||
else
|
||||
let out = go#util#System(bin_path . " " . go#util#Shelljoin(a:000))
|
||||
endif
|
||||
@ -146,9 +147,9 @@ function! go#lint#Vet(bang, ...) abort
|
||||
call go#cmd#autowrite()
|
||||
echon "vim-go: " | echohl Identifier | echon "calling vet..." | echohl None
|
||||
if a:0 == 0
|
||||
let out = go#tool#ExecuteInDir('go vet')
|
||||
let out = go#util#System('go vet ' . go#util#Shellescape(go#package#ImportPath()))
|
||||
else
|
||||
let out = go#tool#ExecuteInDir('go tool vet ' . go#util#Shelljoin(a:000))
|
||||
let out = go#util#System('go tool vet ' . go#util#Shelljoin(a:000))
|
||||
endif
|
||||
|
||||
let l:listtype = "quickfix"
|
||||
@ -188,7 +189,7 @@ function! go#lint#Errcheck(...) abort
|
||||
echon "vim-go: " | echohl Identifier | echon "errcheck analysing ..." | echohl None
|
||||
redraw
|
||||
|
||||
let command = bin_path . ' -abspath ' . import_path
|
||||
let command = go#util#Shellescape(bin_path) . ' -abspath ' . import_path
|
||||
let out = go#tool#ExecuteInDir(command)
|
||||
|
||||
let l:listtype = "quickfix"
|
||||
|
@ -3,8 +3,10 @@ if !exists("g:go_list_type")
|
||||
endif
|
||||
|
||||
" Window opens the list with the given height up to 10 lines maximum.
|
||||
" Otherwise g:go_loclist_height is used. If no or zero height is given it
|
||||
" closes the window
|
||||
" Otherwise g:go_loclist_height is used.
|
||||
"
|
||||
" If no or zero height is given it closes the window by default.
|
||||
" To prevent this, set g:go_list_autoclose = 0
|
||||
function! go#list#Window(listtype, ...) abort
|
||||
let l:listtype = go#list#Type(a:listtype)
|
||||
" we don't use lwindow to close the location list as we need also the
|
||||
@ -13,10 +15,13 @@ function! go#list#Window(listtype, ...) abort
|
||||
" location list increases/decreases, cwindow will not resize when a new
|
||||
" updated height is passed. lopen in the other hand resizes the screen.
|
||||
if !a:0 || a:1 == 0
|
||||
if l:listtype == "locationlist"
|
||||
lclose
|
||||
else
|
||||
cclose
|
||||
let autoclose_window = get(g:, 'go_list_autoclose', 1)
|
||||
if autoclose_window
|
||||
if l:listtype == "locationlist"
|
||||
lclose
|
||||
else
|
||||
cclose
|
||||
endif
|
||||
endif
|
||||
return
|
||||
endif
|
||||
|
@ -83,8 +83,16 @@ function! go#path#Detect() abort
|
||||
" fetched from a customizable list. The user should define any new package
|
||||
" management tool by it's own.
|
||||
|
||||
" src folder outside $GOPATH
|
||||
let src_root = finddir("src", current_dir .";")
|
||||
" src folders outside $GOPATH
|
||||
let src_roots = finddir("src", current_dir .";", -1)
|
||||
|
||||
" for cases like GOPATH/src/foo/src/bar, pick up GOPATH/src instead of
|
||||
" GOPATH/src/foo/src
|
||||
let src_root = ""
|
||||
if len(src_roots) > 0
|
||||
let src_root = src_roots[-1]
|
||||
endif
|
||||
|
||||
if !empty(src_root)
|
||||
let src_path = fnamemodify(src_root, ':p:h:h') . go#util#PathSep()
|
||||
|
||||
@ -129,6 +137,9 @@ function! go#path#BinPath() abort
|
||||
let bin_path = $GOBIN
|
||||
else
|
||||
let go_paths = split(go#path#Default(), go#util#PathListSep())
|
||||
if len(go_paths) == 0
|
||||
return "" "nothing found
|
||||
endif
|
||||
let bin_path = expand(go_paths[0] . "/bin/")
|
||||
endif
|
||||
|
||||
@ -157,6 +168,11 @@ function! go#path#CheckBinPath(binpath) abort
|
||||
let binpath = exepath(binpath)
|
||||
endif
|
||||
let $PATH = old_path
|
||||
|
||||
if go#util#IsUsingCygwinShell() == 1
|
||||
return go#path#CygwinPath(binpath)
|
||||
endif
|
||||
|
||||
return binpath
|
||||
endif
|
||||
|
||||
@ -173,18 +189,15 @@ function! go#path#CheckBinPath(binpath) abort
|
||||
|
||||
let $PATH = old_path
|
||||
|
||||
" When you are using:
|
||||
" 1) Windows system
|
||||
" 2) Has cygpath executable
|
||||
" 3) Use *sh* as 'shell'
|
||||
"
|
||||
" This converts your <path> to $(cygpath '<path>') to make cygwin working in
|
||||
" shell of cygwin way
|
||||
if go#util#IsWin() && executable('cygpath') && &shell !~ '.*sh.*'
|
||||
return printf("$(cygpath '%s')", a:bin_path)
|
||||
endif
|
||||
if go#util#IsUsingCygwinShell() == 1
|
||||
return go#path#CygwinPath(a:binpath)
|
||||
endif
|
||||
|
||||
return go_bin_path . go#util#PathSep() . basename
|
||||
endfunction
|
||||
|
||||
function! go#path#CygwinPath(path)
|
||||
return substitute(a:path, '\\', '/', "g")
|
||||
endfunction
|
||||
|
||||
" vim: sw=2 ts=2 et
|
||||
|
@ -1,12 +1,6 @@
|
||||
" mapped to :GoAddTags
|
||||
function! go#tags#Add(start, end, count, ...) abort
|
||||
let fname = fnamemodify(expand("%"), ':p:gs?\\?/?')
|
||||
if &modified
|
||||
" Write current unsaved buffer to a temp file and use the modified content
|
||||
let l:tmpname = tempname()
|
||||
call writefile(getline(1, '$'), l:tmpname)
|
||||
let fname = l:tmpname
|
||||
endif
|
||||
|
||||
let offset = 0
|
||||
if a:count == -1
|
||||
let offset = go#util#OffsetCursor()
|
||||
@ -14,22 +8,11 @@ function! go#tags#Add(start, end, count, ...) abort
|
||||
|
||||
let test_mode = 0
|
||||
call call("go#tags#run", [a:start, a:end, offset, "add", fname, test_mode] + a:000)
|
||||
|
||||
" if exists, delete it as we don't need it anymore
|
||||
if exists("l:tmpname")
|
||||
call delete(l:tmpname)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" mapped to :GoRemoveTags
|
||||
function! go#tags#Remove(start, end, count, ...) abort
|
||||
let fname = fnamemodify(expand("%"), ':p:gs?\\?/?')
|
||||
if &modified
|
||||
" Write current unsaved buffer to a temp file and use the modified content
|
||||
let l:tmpname = tempname()
|
||||
call writefile(getline(1, '$'), l:tmpname)
|
||||
let fname = l:tmpname
|
||||
endif
|
||||
|
||||
let offset = 0
|
||||
if a:count == -1
|
||||
let offset = go#util#OffsetCursor()
|
||||
@ -37,11 +20,6 @@ function! go#tags#Remove(start, end, count, ...) abort
|
||||
|
||||
let test_mode = 0
|
||||
call call("go#tags#run", [a:start, a:end, offset, "remove", fname, test_mode] + a:000)
|
||||
|
||||
" if exists, delete it as we don't need it anymore
|
||||
if exists("l:tmpname")
|
||||
call delete(l:tmpname)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" run runs gomodifytag. This is an internal test so we can test it
|
||||
@ -49,6 +27,10 @@ function! go#tags#run(start, end, offset, mode, fname, test_mode, ...) abort
|
||||
" do not split this into multiple lines, somehow tests fail in that case
|
||||
let args = {'mode': a:mode,'start': a:start,'end': a:end,'offset': a:offset,'fname': a:fname,'cmd_args': a:000}
|
||||
|
||||
if &modified
|
||||
let args["modified"] = 1
|
||||
endif
|
||||
|
||||
let result = s:create_cmd(args)
|
||||
if has_key(result, 'err')
|
||||
call go#util#EchoError(result.err)
|
||||
@ -57,8 +39,15 @@ function! go#tags#run(start, end, offset, mode, fname, test_mode, ...) abort
|
||||
|
||||
let command = join(result.cmd, " ")
|
||||
|
||||
call go#cmd#autowrite()
|
||||
let out = go#util#System(command)
|
||||
if &modified
|
||||
let filename = expand("%:p:gs!\\!/!")
|
||||
let content = join(go#util#GetLines(), "\n")
|
||||
let in = filename . "\n" . strlen(content) . "\n" . content
|
||||
let out = go#util#System(command, in)
|
||||
else
|
||||
let out = go#util#System(command)
|
||||
endif
|
||||
|
||||
if go#util#ShellError() != 0
|
||||
call go#util#EchoError(out)
|
||||
return
|
||||
@ -103,6 +92,16 @@ func s:write_out(out) abort
|
||||
call setline(line, lines[index])
|
||||
let index += 1
|
||||
endfor
|
||||
|
||||
if has_key(result, 'errors')
|
||||
let l:winnr = winnr()
|
||||
let l:listtype = go#list#Type("quickfix")
|
||||
call go#list#ParseFormat(l:listtype, "%f:%l:%c:%m", result['errors'], "gomodifytags")
|
||||
call go#list#Window(l:listtype, len(result['errors']))
|
||||
|
||||
"prevent jumping to quickfix list
|
||||
exe l:winnr . "wincmd w"
|
||||
endif
|
||||
endfunc
|
||||
|
||||
|
||||
@ -116,6 +115,7 @@ func s:create_cmd(args) abort
|
||||
if empty(bin_path)
|
||||
return {'err': "gomodifytags does not exist"}
|
||||
endif
|
||||
let bin_path = go#util#Shellescape(bin_path)
|
||||
|
||||
let l:start = a:args.start
|
||||
let l:end = a:args.end
|
||||
@ -127,9 +127,13 @@ func s:create_cmd(args) abort
|
||||
" start constructing the command
|
||||
let cmd = [bin_path]
|
||||
call extend(cmd, ["-format", "json"])
|
||||
call extend(cmd, ["-file", a:args.fname])
|
||||
call extend(cmd, ["-file", go#util#Shellescape(a:args.fname)])
|
||||
call extend(cmd, ["-transform", l:modifytags_transform])
|
||||
|
||||
if has_key(a:args, "modified")
|
||||
call add(cmd, "-modified")
|
||||
endif
|
||||
|
||||
if l:offset != 0
|
||||
call extend(cmd, ["-offset", l:offset])
|
||||
else
|
||||
|
@ -21,7 +21,7 @@ function! go#template#create() abort
|
||||
let l:template_file = get(g:, 'go_template_file', "hello_world.go")
|
||||
endif
|
||||
let l:template_path = go#util#Join(l:root_dir, "templates", l:template_file)
|
||||
exe '0r ' . fnameescape(l:template_path)
|
||||
silent exe '0r ' . fnameescape(l:template_path)
|
||||
elseif l:package_name == -1 && l:go_template_use_pkg == 1
|
||||
" cwd is now the dir of the package
|
||||
let l:path = fnamemodify(getcwd(), ':t')
|
||||
@ -33,9 +33,6 @@ function! go#template#create() abort
|
||||
endif
|
||||
$delete _
|
||||
|
||||
" Remove the '... [New File]' message line from the command line
|
||||
echon
|
||||
|
||||
execute cd . fnameescape(dir)
|
||||
endfunction
|
||||
|
||||
|
@ -1,11 +1,42 @@
|
||||
function! go#tool#Files() abort
|
||||
if go#util#IsWin()
|
||||
let format = '{{range $f := .GoFiles}}{{$.Dir}}\{{$f}}{{printf \"\n\"}}{{end}}{{range $f := .CgoFiles}}{{$.Dir}}\{{$f}}{{printf \"\n\"}}{{end}}'
|
||||
else
|
||||
let format = "{{range $f := .GoFiles}}{{$.Dir}}/{{$f}}{{printf \"\\n\"}}{{end}}{{range $f := .CgoFiles}}{{$.Dir}}/{{$f}}{{printf \"\\n\"}}{{end}}"
|
||||
" From "go list -h".
|
||||
function! go#tool#ValidFiles(...)
|
||||
let l:list = ["GoFiles", "CgoFiles", "IgnoredGoFiles", "CFiles", "CXXFiles",
|
||||
\ "MFiles", "HFiles", "FFiles", "SFiles", "SwigFiles", "SwigCXXFiles",
|
||||
\ "SysoFiles", "TestGoFiles", "XTestGoFiles"]
|
||||
|
||||
" Used as completion
|
||||
if len(a:000) > 0
|
||||
let l:list = filter(l:list, 'strpart(v:val, 0, len(a:1)) == a:1')
|
||||
endif
|
||||
let command = 'go list -f '.shellescape(format)
|
||||
let out = go#tool#ExecuteInDir(command)
|
||||
|
||||
return l:list
|
||||
endfunction
|
||||
|
||||
function! go#tool#Files(...) abort
|
||||
if len(a:000) > 0
|
||||
let source_files = a:000
|
||||
else
|
||||
let source_files = ['GoFiles']
|
||||
endif
|
||||
|
||||
let combined = ''
|
||||
for sf in source_files
|
||||
" Strip dot in case people used ":GoFiles .GoFiles".
|
||||
let sf = substitute(sf, '^\.', '', '')
|
||||
|
||||
" Make sure the passed options are valid.
|
||||
if index(go#tool#ValidFiles(), sf) == -1
|
||||
echoerr "unknown source file variable: " . sf
|
||||
endif
|
||||
|
||||
if go#util#IsWin()
|
||||
let combined .= '{{range $f := .' . sf . '}}{{$.Dir}}\{{$f}}{{printf \"\n\"}}{{end}}{{range $f := .CgoFiles}}{{$.Dir}}\{{$f}}{{printf \"\n\"}}{{end}}'
|
||||
else
|
||||
let combined .= "{{range $f := ." . sf . "}}{{$.Dir}}/{{$f}}{{printf \"\\n\"}}{{end}}{{range $f := .CgoFiles}}{{$.Dir}}/{{$f}}{{printf \"\\n\"}}{{end}}"
|
||||
endif
|
||||
endfor
|
||||
|
||||
let out = go#tool#ExecuteInDir('go list -f ' . shellescape(combined))
|
||||
return split(out, '\n')
|
||||
endfunction
|
||||
|
||||
|
@ -43,6 +43,14 @@ function! go#util#IsWin() abort
|
||||
return 0
|
||||
endfunction
|
||||
|
||||
" Checks if using:
|
||||
" 1) Windows system,
|
||||
" 2) And has cygpath executable,
|
||||
" 3) And uses *sh* as 'shell'
|
||||
function! go#util#IsUsingCygwinShell()
|
||||
return go#util#IsWin() && executable('cygpath') && &shell =~ '.*sh.*'
|
||||
endfunction
|
||||
|
||||
function! go#util#has_job() abort
|
||||
" job was introduced in 7.4.xxx however there are multiple bug fixes and one
|
||||
" of the latest is 8.0.0087 which is required for a stable async API.
|
||||
@ -102,7 +110,7 @@ function! go#util#osarch() abort
|
||||
return go#util#env("goos") . '_' . go#util#env("goarch")
|
||||
endfunction
|
||||
|
||||
" System runs a shell command. If possible, it will temporary set
|
||||
" System runs a shell command. If possible, it will temporary set
|
||||
" the shell to /bin/sh for Unix-like systems providing a Bourne
|
||||
" POSIX like environment.
|
||||
function! go#util#System(str, ...) abort
|
||||
|
@ -167,7 +167,8 @@ COMMANDS *go-commands*
|
||||
*:GoLint*
|
||||
:GoLint [packages]
|
||||
|
||||
Run golint for the current directory, or for given packages.
|
||||
Run golint for the directory under your current file, or for the given
|
||||
packages.
|
||||
|
||||
*:GoDoc*
|
||||
:GoDoc [word]
|
||||
@ -436,18 +437,22 @@ CTRL-t
|
||||
Check for unchecked errors in you current package. Errors are populated in
|
||||
the quickfix window.
|
||||
|
||||
You may optionally pass any valid errcheck flags/options. For a full list
|
||||
please see `errcheck -h`.
|
||||
You may optionally pass any valid errcheck flags/options. See
|
||||
`errcheck -h` for a full list.
|
||||
|
||||
*:GoFiles*
|
||||
:GoFiles
|
||||
:GoFiles [source_files]
|
||||
|
||||
Show source files that depends for the current package
|
||||
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
|
||||
Show dependencies for the current package.
|
||||
|
||||
*:GoInstallBinaries*
|
||||
:GoInstallBinaries
|
||||
@ -1129,7 +1134,7 @@ The dictionary version allows you to define options for multiple binaries:
|
||||
<
|
||||
*'g:go_fmt_fail_silently'*
|
||||
|
||||
Use this option to disable showing a location list when |'g:go_fmt_command'|
|
||||
Use this option to disable showing a quickfix list when |'g:go_fmt_command'|
|
||||
fails. By default the location list is shown. >
|
||||
|
||||
let g:go_fmt_fail_silently = 0
|
||||
@ -1163,7 +1168,7 @@ Maximum height for the GoDoc window created with |:GoDoc|. Default is 20. >
|
||||
|
||||
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 more faster. Current valid options are: `[guru, godef]` >
|
||||
`godef` as it's faster. Current valid options are: `[guru, godef]` >
|
||||
|
||||
let g:go_def_mode = 'guru'
|
||||
<
|
||||
@ -1419,6 +1424,16 @@ Supported values are "", "quickfix", and "locationlist". >
|
||||
|
||||
let g:go_list_type = ""
|
||||
<
|
||||
|
||||
*'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. >
|
||||
@ -1574,7 +1589,6 @@ 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
|
||||
@ -1598,6 +1612,28 @@ By default "snakecase" is used. Current values are: ["snakecase",
|
||||
>
|
||||
let g:go_addtags_transform = 'snakecase'
|
||||
<
|
||||
*'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.
|
||||
|
||||
By default they're all enabled:
|
||||
>
|
||||
let g:go_fold_enable = ['block', 'import', 'varconst']
|
||||
<
|
||||
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 = []
|
||||
<
|
||||
|
||||
==============================================================================
|
||||
DEVELOPMENT *go-development*
|
||||
@ -1669,6 +1705,25 @@ example sometimes code.google.com times out. To test, just execute a simple
|
||||
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
|
||||
|
@ -23,7 +23,7 @@ command! -nargs=* -range GoAddTags call go#tags#Add(<line1>, <line2>, <count>, <
|
||||
command! -nargs=* -range GoRemoveTags call go#tags#Remove(<line1>, <line2>, <count>, <f-args>)
|
||||
|
||||
" -- tool
|
||||
command! -nargs=0 GoFiles echo go#tool#Files()
|
||||
command! -nargs=* -complete=customlist,go#tool#ValidFiles GoFiles echo go#tool#Files(<f-args>)
|
||||
command! -nargs=0 GoDeps echo go#tool#Deps()
|
||||
command! -nargs=* GoInfo call go#tool#Info(0)
|
||||
command! -nargs=0 GoAutoTypeInfoToggle call go#complete#ToggleAutoTypeInfo()
|
||||
|
@ -89,12 +89,32 @@ if !exists("g:go_highlight_generate_tags")
|
||||
let g:go_highlight_generate_tags = 0
|
||||
endif
|
||||
|
||||
let s:fold_block = 1
|
||||
let s:fold_import = 1
|
||||
let s:fold_varconst = 1
|
||||
if exists("g:go_fold_enable")
|
||||
if index(g:go_fold_enable, 'block') == -1
|
||||
let s:fold_block = 0
|
||||
endif
|
||||
if index(g:go_fold_enable, 'import') == -1
|
||||
let s:fold_import = 0
|
||||
endif
|
||||
if index(g:go_fold_enable, 'varconst') == -1
|
||||
let s:fold_varconst = 0
|
||||
endif
|
||||
endif
|
||||
|
||||
syn case match
|
||||
|
||||
syn keyword goDirective package import
|
||||
syn keyword goDeclaration var const
|
||||
syn keyword goPackage package
|
||||
syn keyword goImport import contained
|
||||
syn keyword goVar var contained
|
||||
syn keyword goConst const contained
|
||||
|
||||
hi def link goDirective Statement
|
||||
hi def link goPackage Statement
|
||||
hi def link goImport Statement
|
||||
hi def link goVar Keyword
|
||||
hi def link goConst Keyword
|
||||
hi def link goDeclaration Keyword
|
||||
|
||||
" Keywords within functions
|
||||
@ -189,8 +209,35 @@ syn region goCharacter start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=
|
||||
hi def link goCharacter Character
|
||||
|
||||
" Regions
|
||||
syn region goBlock start="{" end="}" transparent fold
|
||||
syn region goParen start='(' end=')' transparent
|
||||
if s:fold_block
|
||||
syn region goBlock start="{" end="}" transparent fold
|
||||
else
|
||||
syn region goBlock start="{" end="}" transparent
|
||||
endif
|
||||
|
||||
" import
|
||||
if s:fold_import
|
||||
syn region goImport start='import (' end=')' transparent fold contains=goImport,goString,goComment
|
||||
else
|
||||
syn region goImport start='import (' end=')' transparent contains=goImport,goString,goComment
|
||||
endif
|
||||
|
||||
" var, const
|
||||
if s:fold_varconst
|
||||
syn region goVar start='var (' end='^\s*)$' transparent fold
|
||||
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
|
||||
syn region goConst start='const (' end='^\s*)$' transparent fold
|
||||
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
|
||||
else
|
||||
syn region goVar start='var (' end='^\s*)$' transparent
|
||||
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
|
||||
syn region goConst start='const (' end='^\s*)$' transparent
|
||||
\ contains=ALLBUT,goParen,goBlock,goFunction,goTypeName,goReceiverType,goReceiverVar
|
||||
endif
|
||||
|
||||
" Single-line var, const, and import.
|
||||
syn match goSingleDecl /\(import\|var\|const\) [^(]\@=/ contains=goImport,goVar,goConst
|
||||
|
||||
" Integers
|
||||
syn match goDecimalInt "\<-\=\d\+\%([Ee][-+]\=\d\+\)\=\>"
|
||||
@ -321,7 +368,7 @@ hi def link goField Identifier
|
||||
|
||||
" Structs & Interfaces;
|
||||
if g:go_highlight_types != 0
|
||||
syn match goTypeConstructor /\<\w\+{\@=/he=e-1
|
||||
syn match goTypeConstructor /\<\w\+{\@=/
|
||||
syn match goTypeDecl /\<type\>/ nextgroup=goTypeName skipwhite skipnl
|
||||
syn match goTypeName /\w\+/ contained nextgroup=goDeclType skipwhite skipnl
|
||||
syn match goDeclType /\<\(interface\|struct\)\>/ skipwhite skipnl
|
||||
|
Reference in New Issue
Block a user