Closed tinywaferShark closed 2 years ago
你可以把配置文件贴上来吗?我注意到 verible 可能需要一些额外的东西。
指的是veridian
的配置吗
require'lspconfig'.veridian.setup{}
return {
cmd ={"veridian"},
filetypes = { "verilog","systemverilog" },
single_filesupport = true,
root_dir = function()
return vim.fn.getcwd()
end,
}
你可以只保留 root_dir 进行尝试,setup 和其它的代码都可以删除。
veridian.lua 可以上传吗
~/.local/share/nvim/site/pack/packer/opt/nvim-lspconfig/lua/lspconfig/server_configurations/veridian.lua
文件内容
return {
default_config = {
cmd = {"veridian"};
filetypes = {"systemverilog", "verilog"};
single_filesupport = true,
root_dir = function()
return vim.fn.getcwd()
end,
settings = {};
},
docs = {
description = [[
test
]],
default_config = {
root_dir = [[util.find_git_ancestor]],
},
},
}
我发现对于我这种自己添加这种不存在在lsp-installer里的客户端,是不能在/configure/plugins/nvim-lsp-installer.lua
最后一行直接加,否则那些attach的按键映射实现不了,用不了gh
[g
这些按键。只能将这部分内容重新写在lspconfig里面,可能我后续得去看看如何在lspinstaller里面定制新加的客户端
--这样是不行的
local servers = {
vimls = require("configure.lsp.vimls"),
sumneko_lua = require("configure.lsp.sumneko_lua"),
pyright = require("configure.lsp.pyright"),
clangd = require("configure.lsp.clangd"),
-- tsserver = require("configure.lsp.tsserver"),
-- html = require("configure.lsp.html"),
-- cssls = require("configure.lsp.cssls"),
jsonls = require("configure.lsp.jsonls"),
veridian = require("configure.lsp.veridian"),
}
require'lspconfig'.veridian.setup{
cmd ={"veridian"},
on_attach = attach,
filetypes = { "verilog","systemverilog" },
single_filesupport = true,
root_dir = function()
return vim.fn.getcwd()
end,
}
最后,非常感谢你的知乎内容和看到我的问题。
很抱歉,我不能具体的帮助到你。
或许你可以为 veridian 的文件设置一个 autocmd,当打开这类文件后自动 setup LSP 服务。
你也可以不使用 autocmd,而是将它放在 ftplugin 中。
关于这个问题这里不再详细探究了。
另外对于某些服务端的 attach 的键绑定,你可以看看下面的代码,首先到 configure/lsp/xxx.lua 中这样返回:
return {
hooks = {
---@diagnostic disable-next-line: unused-local
attach = function(client, bufnr)
-- 重新绑定键
vim.keymap.set("n", "<leader>t", ":command<cr>", {silent = true})
client.resolved_capabilities.document_formatting = false
end,
},
options = {
root_dir = function()
return vim.fn.getcwd()
end,
},
}
然后在使用 lsp-installer.lua 自动启动 LSP 时:
for server_name, server_settings in pairs(M.language_servers_config) do
-- 具体的启动配置
local server_options = server_settings.options
-- 拿到每个 LSP 服务配置中的 hook
local server_hooks = server_settings.hooks
local server_available, server = M.nvim_lsp_installer_servers.get_server(server_name)
if server_available then
-- 如果没有安装,就安装
if not server:is_installed() then
vim.notify("Install Language Server: " .. server_name, "info", { title = "Language Server" })
---@diagnostic disable-next-line: undefined-field
server:install()
-- 安装完成,准备启动
else
server_options.handlers = M.lsp_handlers
server_options.capabilities = M.capabilities
-- 重点(attach 的键位绑定)
server_options.on_attach = function(client, bufnr)
-- 先执行公用的回调函数
M.attach_callbackfn(client, bufnr)
-- 再执行私有的回调函数(如果公用回调中已经设置了的话,这里会覆盖上面的)
server_hooks.attach(client, bufnr)
end
server_options.flags = { debounce_text_changes = 150 }
---@diagnostic disable-next-line: undefined-field
server:setup(server_options)
end
end
end
感谢你的帮助
我在nvim-lsp-installer中新增了一个这样的lsp客户端,这是一个verilog的语言服务器。
打开了一个verilog文件之后,并不能启动。 在输入了
lspstart veridian
之后就可以启动这个服务器