Preface
本文是neovim插件,nvim-lsp-loader的中文文档,将始终跟随最新的master发布和修改。
该插件可以帮助你为不同的项目,从.json
或者.lua
文件中加载定制化的的language server配置。本质上说,它是对nvim-lspconfig和mason.nvim功能的抽象和封装。
如果你仍继续使用nvim-lsp-installer,那么你可以切换到这个分支,但是由于nvim-lsp-installer不会继续活跃的开发,此分支也不会添加任何新功能。
本来我也是将自己的language server配置写入到~/.config/nvim
目录下。但这个文件过于巨大,不利于阅读和维护,也不利于定制化,我自己也曾尝试将其拆分为数个小文件,但是由于packer.nvim
的PR #192尚且处于WIP状态,导致加载拆分后的配置时,出现upvalues
错误,遂放弃此方案,并尝试构建了这个可以读取DSL的插件。
插件开发的过程中受到coc.nvim和nlsp-settings.nvim的启发,特此表示感谢!
功能概览
使用方法
安装和配置
我本人使用packer.nvim管理neovim的插件和配置。但是该插件理论上也支持paq.nvim或者vim-plug。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| use 'neovim/nvim-lspconfig' use 'williamboman/mason.nvim' use 'rcarriga/nvim-notify'
use { 'zhang-stephen/nvim-lsp-loader' after = 'nvim-lspconfig', config = function() require('nvim-lsp-loader').setup({ default_config_path = '~/.config/nvim/languages.json',
nested_json_keys = false,
auto_update = false,
root_patterns = { '.git/' },
on_attach = nil,
make_capabilities = nil,
server_config_cb = nil,
mode = 'user-first', }) end }
|
此插件应该可以支持lazy-loading,但是我尚未测试过。
生成配置
下面是一个用户定义的配置的示例。
注意: .json
文件不支持注释,因此在实际配置中不要写注释。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| { "languages": { "lua": { "name": "sumneko_lua", "managed_by": { "mason": true }, "config": { "settings": { "Lua": { "diagnostics": { "globals": [ "vim", "packer_plugins" ] }, "workspace": { "library": [ "$VIMRUNTIME/lua", "$VIMRUNTIME/lua/vim/lsp" ], "maxPreload": 100000, "preloadFileSize": 10000 }, "telemtry": { "enable": false }, "completion": { "keywordSnippet": "Disable", "callSnippet": "Disable" }, "runtime": { "version": "Lua 5.1" } } }, "root_dir": [ ".git/", "stylua.toml" ], "cmd": [ "sumneko_lua/extension/server/bin/lua-language-server" ] } }, "json": { "name": "jsonls", "managed_by.mason": true, "config": { "cmd": [ null, "--stdio" ] } }, "c_cpp": { "name": "clangd", "managed_by": { "mason": false }, "config": { "cmd": [ "clangd", "--log=error", "--background-index", "--clang-tidy", "-j=12", "--enable-config" ], "root_dir": [ ".git/", ".clangd" ], "single_file_support": true } } } }
|
配置是如何被加载的?
执行require('nvim-lsp-loader').setup()
时,该插件会尝试检测项目根目录,如果找不到符合root_patterns
的目录,则以当前目录作为项目根目录;随后,它会试图读取默认配置文件,和项目根目录下的.nvim/languages.json
文件,并根据mode
决定如何加载它们:
- 如果设置为
user-first
,那么项目根目录下的配置将会覆盖默认配置;若设置为default-first
则反之;
- 如果设置为
user-only
,那么只加载项目根目录下的配置;若设置为default-only
则反之。
然后所有的language server应该被自动配置好了。
代码贡献
该插件采用MIT许可协议,欢迎一切PR,issue或者新奇实用的点子!