Awesome
nlsp-settings.nvim
A plugin to configure Neovim LSP using json/yaml files like coc-settings.json
.
<sub>Using nlsp-settings.nvim
and lspconfig and jsonls and nvim-compe and vim-vsnip</sub>
Using nlsp-settings.nvim
, you can write some of the settings
to be passed to lspconfig.xxx.setup()
in a json file.
You can also use it with jsonls to complete the configuration values.
Requirements
- Neovim
- neovim/nvim-lspconfig
Installation
Plug 'neovim/nvim-lspconfig'
Plug 'tamago324/nlsp-settings.nvim'
" Recommend
Plug 'williamboman/mason.nvim'
Plug 'williamboman/mason-lspconfig.nvim'
" Optional
Plug 'rcarriga/nvim-notify'
Getting Started
Step1. Install jsonls with mason.nvim
:MasonInstall json-lsp
Step2. Setup LSP servers
Example: Completion using omnifunc
local mason = require("mason")
local mason_lspconfig = require("mason-lspconfig")
local lspconfig = require("lspconfig")
local nlspsettings = require("nlspsettings")
nlspsettings.setup({
config_home = vim.fn.stdpath('config') .. '/nlsp-settings',
local_settings_dir = ".nlsp-settings",
local_settings_root_markers_fallback = { '.git' },
append_default_schemas = true,
loader = 'json'
})
function on_attach(client, bufnr)
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
end
local global_capabilities = vim.lsp.protocol.make_client_capabilities()
global_capabilities.textDocument.completion.completionItem.snippetSupport = true
lspconfig.util.default_config = vim.tbl_extend("force", lspconfig.util.default_config, {
capabilities = global_capabilities,
})
mason.setup()
mason_lspconfig.setup()
mason_lspconfig.setup_handlers({
function (server_name)
lspconfig[server_name].setup({
on_attach = on_attach
})
end
})
TODO: その他の設定は doc を参照
Step3. Write settings
Execute :LspSettings sumneko_lua
.
sumneko_lua.json
will be created under the directory set in config_home
. Type <C-x><C-o>
. You should now have jsonls completion enabled.
Usage
LspSettings command
:LspSettings [server_name]
: Open the global settings file for the specified{server_name}
.:LspSettings buffer
: Open the global settings file that matches the current buffer.:LspSettings local [server_name]
: Open the local settings file of the specified{server_name}
corresponding to the cwd.:LspSettings local buffer
orLspSettings buffer local
: Open the local settings file of the server corresponding to the current buffer.:LspSettings update [server_name]
: Update the setting values for the specified{server_name}
.
For a list of language servers that have JSON Schema, see here.
Settings files for each project
You can create a settings file for each project with the following command.
:LspSettings local [server_name]
.:LspSettings update [server_name]
The settings file will be created in {project_path}/.nlsp-settings/{server_name}.json
.
Combine with Lua configuration
It is still possible to write settings
in lua.
However, if you have the same key, the value in the JSON file will take precedence.
Example) Write sumneko_lua settings in Lua
local mason = require("mason")
local mason_lspconfig = require("mason-lspconfig")
local lspconfig = require("lspconfig")
local server_opts = {}
-- lua
server_opts.sumneko_lua = {
settings = {
Lua = {
workspace = {
library = {
[vim.fn.expand("$VIMRUNTIME/lua")] = true,
[vim.fn.stdpath("config") .. '/lua'] = true,
}
}
}
}
}
local common_setup_opts = {
-- on_attach = on_attach,
-- capabilities = require('cmp_nvim_lsp').update_capabilities(
-- vim.lsp.protocol.make_client_capabilities()
-- )
}
mason.setup()
mason_lspconfig.setup()
mason_lspconfig.setup_handlers({
function (server_name)
local opts = vim.deepcopy(common_setup_opts)
if server_opts[server_name] then
opts = vim.tbl_deep_extend('force', opts, server_opts[server_name])
end
lspconfig[server_name].setup(opts)
end
})
Contributing
- All contributions are welcome.
License
MIT