Your cart is currently empty!
Neovim: LSP Configuration
Install language server
brew install lua-language-server
Configure the language server in Neovim. This can be done in 2 ways.
First, by using vim.lsp.config['xxx'] in nvim/init.lua:
vim.lsp.config['luals'] = {
-- Command and arguments to start the server.
cmd = { 'lua-language-server' },
-- Filetypes to automatically attach to.
filetypes = { 'lua' },
-- Sets the "root directory" to the parent directory of the file in the
-- current buffer that contains either a ".luarc.json" or a
-- ".luarc.jsonc" file. Files that share a root directory will reuse
-- the connection to the same LSP server.
-- Nested lists indicate equal priority, see |vim.lsp.Config|.
root_markers = { '.luarc.json', '.luarc.jsonc', '.git' },
-- Specific settings to send to the server. The schema for this is
-- defined by the server. For example the schema for lua-language-server
-- can be found here https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json
settings = {
Lua = {
runtime = {
version = 'LuaJIT',
},
["diagnostics.globals"] = { "vim" }
}
}
}Second, by creating a file in nvim/lsp/luals.lua directory:
return {
-- Command and arguments to start the server.
cmd = { 'lua-language-server' },
-- Filetypes to automatically attach to.
filetypes = { 'lua' },
-- Sets the "root directory" to the parent directory of the file in the
-- current buffer that contains either a ".luarc.json" or a
-- ".luarc.jsonc" file. Files that share a root directory will reuse
-- the connection to the same LSP server.
-- Nested lists indicate equal priority, see |vim.lsp.Config|.
root_markers = { '.luarc.json', '.luarc.jsonc', '.git' },
-- Specific settings to send to the server. The schema for this is
-- defined by the server. For example the schema for lua-language-server
-- can be found here https://raw.githubusercontent.com/LuaLS/vscode-lua/master/setting/schema.json
settings = {
Lua = {
runtime = {
version = 'LuaJIT',
},
["diagnostics.globals"] = { "vim" }
}
}
}Enable the language server:
Since we use vim.lsp.config['luals'] OR by creating a file called lsp/luals.lua we will enable it with vim.lsp.enable['luals'].
vim.lsp.enable('luals')Check if the lsp is loaded:
:checkhealth vim.lsp
Enable pop-up completion and keybinding:
vim.api.nvim_create_autocmd('LspAttach', {
callback = function(ev)
local client = vim.lsp.get_client_by_id(ev.data.client_id)
if client:supports_method('textDocument/completion') then
vim.opt.completeopt = { 'menu', 'menuone', 'noinsert', 'fuzzy', 'popup' }
vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true })
vim.keymap.set('i', '<C-Space>', function()
vim.lsp.completion.get()
end)
end
end,
})Enable diagnostic:
vim.diagnostic.config({
-- Use the default configuration
-- virtual_lines = true
-- Alternatively, customize specific options
virtual_lines = {
-- Only show virtual line diagnostics for the current cursor line
current_line = true,
},
})References:

Leave a Reply