github.com/bazelbuild/rules_go@v0.47.2-0.20240515105122-e7ddb9ea474e/docs/go/editors/vim.md (about)

     1  # Vim + `rules_go`
     2  
     3  `rules_go` has support for integration with text editors, see [Editor and tool
     4  integration](https://github.com/bazelbuild/rules_go/wiki/Editor-and-tool-integration).
     5  This document describes integration with Vim, which will provide semantic
     6  autocompletion for Bazel-generated Go files, among other things.
     7  
     8  ## Setup
     9  
    10  1. Install [vim-go](https://github.com/fatih/vim-go), a Vim plugin for Go
    11     development with support for `gopls`.
    12  
    13  2. Follow the instructions from [Editor
    14     setup](https://github.com/bazelbuild/rules_go/wiki/Editor-setup#3-editor-setup)
    15     for installing `gopls` and adding a launcher script.
    16     * Note that `gopls` should already be installed as part of installing `vim-go`.
    17  
    18  3. Add the following to your `.vimrc`:
    19  
    20        ```vim
    21        function! MaybeSetGoPackagesDriver()
    22          " Start at the current directory and see if there's a WORKSPACE file in the
    23          " current directory or any parent. If we find one, check if there's a
    24          " gopackagesdriver.sh in a tools/ directory, and point our
    25          " GOPACKAGESDRIVER env var at it.
    26          let l:dir = getcwd()
    27          while l:dir != "/"
    28            if filereadable(simplify(join([l:dir, 'WORKSPACE'], '/')))
    29              let l:maybe_driver_path = simplify(join([l:dir, 'tools/gopackagesdriver.sh'], '/'))
    30              if filereadable(l:maybe_driver_path)
    31                let $GOPACKAGESDRIVER = l:maybe_driver_path
    32                break
    33              end
    34            end
    35            let l:dir = fnamemodify(l:dir, ':h')
    36          endwhile
    37        endfunction
    38  
    39        call MaybeSetGoPackagesDriver()
    40  
    41        " See https://github.com/golang/tools/blob/master/gopls/doc/settings.md
    42        let g:go_gopls_settings = {
    43          \ 'build.directoryFilters': [
    44            \ '-bazel-bin',
    45            \ '-bazel-out',
    46            \ '-bazel-testlogs',
    47            \ '-bazel-mypkg',
    48          \ ],
    49          \ 'ui.completion.usePlaceholders': v:true,
    50          \ 'ui.semanticTokens': v:true,
    51          \ 'ui.codelenses': {
    52            \ 'gc_details': v:false,
    53            \ 'regenerate_cgo': v:false,
    54            \ 'generate': v:false,
    55            \ 'test': v:false,
    56            \ 'tidy': v:false,
    57            \ 'upgrade_dependency': v:false,
    58            \ 'vendor': v:false,
    59          \ },
    60        \ }
    61        ```
    62  
    63      * You'll want to replace `-bazel-mypkg` with your package.
    64      * If you've put your `gopackagesdriver.sh` script somewhere other than
    65        `tools/gopackagesdriver.sh`, you'll need to update
    66        `MaybeSetGoPackagesDriver` accordingly.