For legacy python implementation, see branch master.
Language Server Protocol (LSP) support for vim and neovim.
More recordings at Updates, screenshots & GIFs.
- Non-blocking asynchronous calls.
- Sensible completion.
Integrated well with deoplete or
ncm2, or MUcomplete.
Or simply with vim built-in
omnifunc
. - Realtime diagnostics/compiler/lint message.
- Rename.
- Hover/Get identifier info.
- Goto definition.
- Goto reference locations.
- Workspace/Document symbols query.
- Formatting.
- Code Action/Quick Fix.
Using vim-plug
:
Plug 'autozimu/LanguageClient-neovim', {
\ 'branch': 'next',
\ 'do': 'bash install.sh',
\ }
" (Optional) Multi-entry selection UI.
Plug 'junegunn/fzf'
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Example configuration
" Required for operations modifying multiple buffers like rename.
set hidden
let g:LanguageClient_serverCommands = {
\ 'rust': ['~/.cargo/bin/rustup', 'run', 'stable', 'rls'],
\ 'javascript': ['/usr/local/bin/javascript-typescript-stdio'],
\ 'javascript.jsx': ['tcp://127.0.0.1:2089'],
\ 'python': ['/usr/local/bin/pyls'],
\ }
nnoremap <F5> :call LanguageClient_contextMenu()<CR>
" Or map each action separately
nnoremap <silent> K :call LanguageClient#textDocument_hover()<CR>
nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR>
nnoremap <silent> <F2> :call LanguageClient#textDocument_rename()<CR>
Run command nvim +PlugInstall +UpdateRemotePlugins +qa
in shell to install
this plugin. Install corresponding language servers. Restart neovim/vim and
language services will be available right away. Happy hacking!
Please see http://langserver.org and/or https://microsoft.github.io/language-server-protocol/implementors/servers/.
:help LanguageClient
for full list of configurations, commands and functions.
See Updates. Subscribe the issue if you want to receive notifications.
The MIT License.