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