UNPKG

5.68 kBMarkdownView Raw
1# VimScript Language Server
2
3[![CI](https://github.com/iamcco/vim-language-server/workflows/CI/badge.svg?branch=master)](https://github.com/iamcco/vim-language-server/actions?query=workflow%3ACI)
4[![Npm](https://img.shields.io/github/package-json/v/iamcco/vim-language-server)](https://www.npmjs.com/package/vim-language-server)
5![Type](https://img.shields.io/npm/types/vim-language-server)
6![download](https://img.shields.io/npm/dm/vim-language-server)
7
8> language server for VimScript
9
10**Features:**
11
12- auto completion
13- function signature help
14- hover document
15- go to definition
16- go to references
17- document symbols
18- document highlight
19- folding range
20- select range
21- rename
22- snippets
23- diagnostic
24
25![autocomplete](https://user-images.githubusercontent.com/5492542/81493984-909c2e80-92d7-11ea-9638-d7be3e18e1d1.gif)
26
27## Install
28
29**For yarn**
30
31```sh
32yarn global add vim-language-server
33```
34
35**For npm**
36
37```sh
38npm install -g vim-language-server
39```
40
41**For coc.nvim user** install coc extension:
42
43```vim
44:CocInstall coc-vimlsp
45```
46
47## Config
48
49for document highlight
50
51```vim
52let g:markdown_fenced_languages = [
53 \ 'vim',
54 \ 'help'
55 \]
56```
57
58lsp client config example with coc.nvim
59
60- Using node ipc
61
62```jsonc
63"languageserver": {
64 "vimls": {
65 "module": "/path/to/vim-language-server/bin/index.js",
66 "args": ["--node-ipc"],
67 "initializationOptions": {
68 "isNeovim": true, // is neovim, default false
69 "iskeyword": "@,48-57,_,192-255,-#", // vim iskeyword option
70 "vimruntime": "", // $VIMRUNTIME option
71 "runtimepath": "", // vim runtime path separate by `,`
72 "diagnostic": {
73 "enable": true
74 },
75 "indexes": {
76 "runtimepath": true, // if index runtimepath's vim files this will effect the suggest
77 "gap": 100, // index time gap between next file
78 "count": 3, // count of files index at the same time
79 "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
80 },
81 "suggest": {
82 "fromVimruntime": true, // completionItems from vimruntime's vim files
83 "fromRuntimepath": false // completionItems from runtimepath's vim files, if this is true that fromVimruntime is true
84 }
85 },
86 "filetypes": [ "vim" ],
87 }
88}
89```
90
91- Using stdio
92
93```jsonc
94"languageserver": {
95 "vimls": {
96 "command": "vim-language-server",
97 "args": ["--stdio"],
98 "initializationOptions": {
99 "isNeovim": true, // is neovim, default false
100 "iskeyword": "@,48-57,_,192-255,-#", // vim iskeyword option
101 "vimruntime": "", // $VIMRUNTIME option
102 "runtimepath": "", // vim runtime path separate by `,`
103 "diagnostic": {
104 "enable": true
105 },
106 "indexes": {
107 "runtimepath": true, // if index runtimepath's vim files this will effect the suggest
108 "gap": 100, // index time gap between next file
109 "count": 3, // count of files index at the same time
110 "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
111 },
112 "suggest": {
113 "fromVimruntime": true, // completionItems from vimruntime's vim files
114 "fromRuntimepath": false // completionItems from runtimepath's vim files, if this is true that fromVimruntime is true
115 }
116 },
117 "filetypes": [ "vim" ]
118 }
119}
120```
121
122**Note**:
123
124- if you set `isNeovim: true`, command like `fixdel` in vimrc which neovim does not support will report error.
125- if you want to speed up index, change `gap` to smaller and `count` to greater, this will cause high CPU usage for some time
126- if you don't want to index vim's runtimepath files, set `runtimepath` to `false` and you will not get any suggest from those files.
127
128## Usage
129
130> The screen record is using coc.nvim as LSP client.
131
132**Auto complete and function signature help**:
133
134![autocomplete](https://user-images.githubusercontent.com/5492542/81493984-909c2e80-92d7-11ea-9638-d7be3e18e1d1.gif)
135
136**Hover document**:
137
138![hover](https://user-images.githubusercontent.com/5492542/81494066-5aab7a00-92d8-11ea-9ccd-31bd6440e622.gif)
139
140**Go to definition and references**:
141
142![goto](https://user-images.githubusercontent.com/5492542/81494125-c261c500-92d8-11ea-83c0-fecba34ea55e.gif)
143
144**Document symbols**:
145
146![symbols](https://user-images.githubusercontent.com/5492542/81494183-5cc20880-92d9-11ea-9495-a7691420df39.gif)
147
148**Document highlight**:
149
150![highlight](https://user-images.githubusercontent.com/5492542/81494214-b1fe1a00-92d9-11ea-9cc1-0420cddc5cbc.gif)
151
152**Folding range and selection range**:
153
154![fold](https://user-images.githubusercontent.com/5492542/81494276-3bade780-92da-11ea-8c93-bc3d2127a19d.gif)
155
156**Rename**:
157
158![rename](https://user-images.githubusercontent.com/5492542/81494329-aa8b4080-92da-11ea-8a5d-ace5385445e9.gif)
159
160**Snippets and diagnostic**:
161
162![dia](https://user-images.githubusercontent.com/5492542/81494408-503eaf80-92db-11ea-96ac-641d46027623.gif)
163
164## References
165
166- [vim-vimlparser](https://github.com/vim-jp/vim-vimlparser)
167- [neco-vim](https://github.com/Shougo/neco-vim)
168
169## Similar project
170
171- [vimscript-language-server](https://github.com/google/vimscript-language-server)
172
173### Buy Me A Coffee ☕️
174
175![btc](https://img.shields.io/keybase/btc/iamcco.svg?style=popout-square)
176
177![image](https://user-images.githubusercontent.com/5492542/42771079-962216b0-8958-11e8-81c0-520363ce1059.png)