A plugin to configure Neovim LSP using json/yaml files like coc-settings.json
.
Using nlsp-settings.nvim
and lspconfig and jsonls and nvim-compe and vim-vsnip
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.
Plug 'neovim/nvim-lspconfig'
Plug 'tamago324/nlsp-settings.nvim'
" Recommend
Plug 'williamboman/mason.nvim'
Plug 'williamboman/mason-lspconfig.nvim'
" Optional
Plug 'rcarriga/nvim-notify'
:MasonInstall json-lsp
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 を参照
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.
: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
or LspSettings 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.
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
.
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
})
MIT