vim language server
npm install vim-language-server

!Type
!download
> language server for VimScript
Features:
- auto completion
- function signature help
- hover document
- go to definition
- go to references
- document symbols
- document highlight
- folding range
- select range
- rename
- snippets
- diagnostic
For yarn
``sh`
yarn global add vim-language-server
For npm
`sh`
npm install -g vim-language-server
For coc.nvim user install coc extension:
`vim`
:CocInstall coc-vimlsp
For vim-easycomplete user install lsp server via :InstallLspServer vim and config nothing:
`vim`
:InstallLspServer vim
for document highlight
`vim`
let g:markdown_fenced_languages = [
\ 'vim',
\ 'help'
\]
lsp client config example with coc.nvim
- Using node ipc
`jsonc,
"languageserver": {
"vimls": {
"module": "/path/to/vim-language-server/bin/index.js",
"args": ["--node-ipc"],
"initializationOptions": {
"isNeovim": true, // is neovim, default false
"iskeyword": "@,48-57,_,192-255,-#", // vim iskeyword option
"vimruntime": "", // $VIMRUNTIME option
"runtimepath": "", // vim runtime path separate by `
"diagnostic": {
"enable": true
},
"indexes": {
"runtimepath": true, // if index runtimepath's vim files this will effect the suggest
"gap": 100, // index time gap between next file
"count": 3, // count of files index at the same time
"projectRootPatterns" : ["strange-root-pattern", ".git", "autoload", "plugin"] // Names of files used as the mark of project root. If empty, the default value [".git", "autoload", "plugin"] will be used
},
"suggest": {
"fromVimruntime": true, // completionItems from vimruntime's vim files
"fromRuntimepath": false // completionItems from runtimepath's vim files, if this is true that fromVimruntime is true
}
},
"filetypes": [ "vim" ],
}
}
- Using stdio
`jsonc,
"languageserver": {
"vimls": {
"command": "vim-language-server",
"args": ["--stdio"],
"initializationOptions": {
"isNeovim": true, // is neovim, default false
"iskeyword": "@,48-57,_,192-255,-#", // vim iskeyword option
"vimruntime": "", // $VIMRUNTIME option
"runtimepath": "", // vim runtime path separate by `
"diagnostic": {
"enable": true
},
"indexes": {
"runtimepath": true, // if index runtimepath's vim files this will effect the suggest
"gap": 100, // index time gap between next file
"count": 3, // count of files index at the same time
"projectRootPatterns" : ["strange-root-pattern", ".git", "autoload", "plugin"] // Names of files used as the mark of project root. If empty, the default value [".git", "autoload", "plugin"] will be used
},
"suggest": {
"fromVimruntime": true, // completionItems from vimruntime's vim files
"fromRuntimepath": false // completionItems from runtimepath's vim files, if this is true that fromVimruntime is true
}
},
"filetypes": [ "vim" ]
}
}
Note:
- if you set isNeovim: true, command like fixdel in vimrc which neovim does not support will report error.gap
- if you want to speed up index, change to smaller and count to greater, this will cause high CPU usage for some timeruntimepath
- if you don't want to index vim's runtimepath files, set to false` and you will not get any suggest from those files.
> The screen record is using coc.nvim as LSP client.
Auto complete and function signature help:
Hover document:
Go to definition and references:
!goto
Document symbols:
Document highlight:
Folding range and selection range:
!fold
Rename:
Snippets and diagnostic:
!dia
!btc