视频与目录
项目 | 值 |
---|
教程目录 | https://blog.csdn.net/lxyoucan/article/details/120641546 |
视频全屏 | https://www.bilibili.com/video/BV14h411b77b/ |
视频 |
|
12_[nvim0.5+从0单排]_nvim内置lsp搭建lua IDE
大家好,本期内容主要是说如何手动搭建lua的开发环境。
其他开发语言的手动配置教程可以参考下面链接:
https://github.com/neovim/nvim-lspconfig/blob/master/CONFIG.md
自动安装
自动安装很简单:LspInstall lua
一行命令搞定。但是今天主要请的并不是自动安装,而是手动安装。
详情请参考
《09_[nvim0.5+从0单排]_nvim内置lsp搭建python IDE》
https://www.bilibili.com/video/BV1cQ4y1z7J3/
手动安装
下载lua-language-server.zip并解压
这个文件我是从github上下载的,没做任何修改。为了方便一些github访问慢的朋友,可以从我的百度云分享中下载。
链接: https://pan.baidu.com/s/1K7PB3J538iL-1nWZNJT6HQ
提取码: yiqn
下载以后解压到本地任意路径,我这里的解压路径是:
~/.local/share/nvim/lsp/lua-language-server
你可以根据自己的需要来修改,后面的配置文件中会用到这个路径。
lsp配置
新增配置文件
~/.config/nvim/lua/lspconf/lua.lua
文件内容如下:
local nvim_lsp = require('lspconfig')
Itkey_on_attach = function(client, bufnr)
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
local opts = { noremap=true, silent=true }
buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
buf_set_keymap('n', '<space>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
buf_set_keymap('n', '<S-C-j>', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
buf_set_keymap('n', '<space>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
buf_set_keymap("n", "<leader>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
if client.resolved_capabilities.document_formatting then
vim.api.nvim_command [[augroup Format]]
vim.api.nvim_command [[autocmd! * <buffer>]]
vim.api.nvim_command [[autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_seq_sync()]]
vim.api.nvim_command [[augroup END]]
end
end
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.completion.completionItem.documentationFormat = { 'markdown', 'plaintext' }
capabilities.textDocument.completion.completionItem.snippetSupport = true
capabilities.textDocument.completion.completionItem.preselectSupport = true
capabilities.textDocument.completion.completionItem.insertReplaceSupport = true
capabilities.textDocument.completion.completionItem.labelDetailsSupport = true
capabilities.textDocument.completion.completionItem.deprecatedSupport = true
capabilities.textDocument.completion.completionItem.commitCharactersSupport = true
capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1 } }
capabilities.textDocument.completion.completionItem.resolveSupport = {
properties = {
'documentation',
'detail',
'additionalTextEdits',
},
}
Itkey_capabilities = capabilities
local system_name
if vim.fn.has("mac") == 1 then
system_name = "macOS"
elseif vim.fn.has("unix") == 1 then
system_name = "Linux"
elseif vim.fn.has("win32") == 1 then
system_name = "Windows"
else
print("Unsupported system for sumneko")
end
local sumneko_root_path = vim.fn.stdpath("data") .. "/lsp/lua-language-server"
local sumneko_binary = sumneko_root_path .. "/bin/" .. system_name .. "/lua-language-server"
local runtime_path = vim.split(package.path, ";")
table.insert(runtime_path, "lua/?.lua")
table.insert(runtime_path, "lua/?/init.lua")
require "lspconfig".sumneko_lua.setup {
on_attach = Itkey_on_attach,
cmd = {sumneko_binary, "-E", sumneko_root_path .. "/main.lua", "--locale=zh-cn"},
settings = {
Lua = {
runtime = {
version = "LuaJIT",
path = runtime_path
},
diagnostics = {
globals = {"vim"}
},
workspace = {
library = vim.api.nvim_get_runtime_file("", true)
},
telemetry = {
enable = false
}
}
},
capabilities = Itkey_capabilities
}
配置nvim-cmp
~/.config/nvim/after/plugin/nvim-cmp.lua
增加如下一行:
require("lspconf.lua")
代码格式化
因为lua 的lsp没有自带代码格式化的功能,所以我们使用第三方的插件来格式化lua的代码。
packer插件管理器安装方法
修改~/.config/nvim/lua/plugins.lua
文件,并在use 'wbthomason/packer.nvim'
增加如下内容:
use "mhartington/formatter.nvim"
:wq
退出重新打开nvim后,执行:PackerInstall
安装成功。
配置 formatter.nvim
安装用于lua代码格式化的命令行程序
npm i -g lua-fmt
新增配置文件
~/.config/nvim/after/plugin/formatter.lua
内容如下:
local status, formatter = pcall(require, "formatter")
if (not status) then
return
end
formatter.setup(
{
filetype = {
lua = {
function()
return {
exe = "luafmt",
args = {"--indent-count", 2, "--stdin"},
stdin = true
}
end
},
sql = {
function()
return {
exe = "sqlformat",
args = {"-k", "lower", "-i", "lower", "-r", "-"},
stdin = true
}
end
}
}
}
)
vim.api.nvim_exec(
[[
augroup FormatAutogroup
autocmd!
autocmd BufWritePost *.rs,*.lua FormatWrite
augroup END
]],
true
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)