VimPlugin: Coc.nvim: Difference between revisions

From wikinotes
Line 40: Line 40:
= Languages =
= Languages =
<blockquote>
<blockquote>
== Language Servers ==
Languages can be installed dynamically with <code>:CocInstall coc-python</code><br>
Languages can be installed dynamically with <code>:CocInstall coc-python</code><br>
or automatically like <code>Plug 'neoclide/coc-tsserver', {'do': 'yarn install --frozen-lockfile'}</code>.
or automatically like <code>Plug 'neoclide/coc-tsserver', {'do': 'yarn install --frozen-lockfile'}</code>.
Line 58: Line 59:
|-
|-
|}
|}
== Custom Language Servers ==
Some programs may be able to function as an LSP, and can be registered to do so.<br>
see https://github.com/neoclide/coc.nvim/wiki/Language-servers#register-custom-language-servers
<source lang="json">
{
  "languageserver": {
      "sorbet": {
        "command": "srb",
        "args": ["tc", "--lsp"],
        "filetypes": ["ruby"]
      }
  }
}
</source>
</blockquote><!-- languages -->
</blockquote><!-- languages -->



Revision as of 06:15, 28 December 2021

coc.nvim aims to be intellisense (visualstudio) for vim.

  • autocompletion
  • outliner
  • refactor-rename
  • goto
  • show-references


WARNING:

coc.nvim DOES NOT play nice with other autocompleters.


Documentation

:h coc-nvim https://github.com/neoclide/coc.nvim/blob/master/doc/coc.txt
github https://github.com/neoclide/coc.nvim
wiki https://github.com/neoclide/coc.nvim/wiki
extension list https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions#implemented-coc-extensions

Locations

~/.config/nvim/coc-settings.json config
~/.config/coc/extensions/node_modules/${plugin} plugins installed here
~/.config/coc/memos.json persisted plugin data

Languages

Language Servers

Languages can be installed dynamically with :CocInstall coc-python
or automatically like Plug 'neoclide/coc-tsserver', {'do': 'yarn install --frozen-lockfile'}.

python unmaintained coc-python
python active coc-pyright
sh/bash active coc-sh
ruby/rails active coc-solargraph
ruby/rails active ruby sorbet
graphql active coc-graphql

Custom Language Servers

Some programs may be able to function as an LSP, and can be registered to do so.
see https://github.com/neoclide/coc.nvim/wiki/Language-servers#register-custom-language-servers

{
   "languageserver": {
      "sorbet": {
        "command": "srb",
        "args": ["tc", "--lsp"],
        "filetypes": ["ruby"]
      }
   }
}

Install

# archlinux
sudo pacman -S \
  nodejs \
  npm

# macos
brew install
  node.js \
  npm

npm install -g neovim
" install coc
Plug "https://github.com/neoclide/coc.nvim", {'branch': 'release'}

" install coc languages

" NOTE: technically this is supposed to work, but it doesn't for all languages
" Plug 'https://github.com/neoclide/coc-tsserver', {'do': 'yarn install --frozen-lockfile'}

if !(isdirectory($HOME."/.config/coc/extensions/node_modules/coc-sh"))
  CocInstall coc-sh
endif

NOTE:

Officially, installing servers can be done from vim-plug, but I have not had success with this.

CocInstall works every time. It's probably best to check for files on disk.

Configuration

Keybindings

coc.nvim does not provide function calls, they direct you to bind hotkeys instead.

nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)

Usage

Builtin Commands

CocInstall coc-python   " install a language
CocUninstall coc-python " uninstall a language
CocOutline              " tagbar-like outliner

Custom Commands (derived from plug functions)

" ex: command CocRename silent exec "normal \<Plug>(coc-rename)"

" Introspection (src, packages)
CocDefinition          " go to where variable assigned
CocTypeDefinition      " go to where variable type defined
CocImplementation
CocReferences          " show uses of variable
CocShowdocumentation   " show docs

" Formatting
CocFormatBuffer        " format file
CocFormatSelected      " format selection
CocOrganizeImports    " sort imports

" Debugging
CocInfo                " show nvim, coc, lsp info
CocOpenLog             " show log

Troubleshooting

:CocInfo  " print debug info