寻找当前缓冲区lsp客户端

问题描述 投票:0回答:2

我正在寻找在 Neovim 的 lualine 中添加当前的 lsp 客户端。我以为我会使用

vim.lsp.get_active_clients()
但我无法从该数据中获取名称。看起来名字应该在里面...

我引用了这些文档: https://neovim.io/doc/user/lsp.html#vim.lsp.get_active_clients() https://neovim.io/doc/user/lsp.html#lsp-client

我正在我的代码中尝试这个:

local function lsp_client()
  local clients = vim.lsp.get_active_clients()
  if (clients ~= nil) then
    return dump(clients)
  else
    return "No Client Found"
  end
end

-- Table to String for printing
function dump(o)
    if type(o) == 'table' then
        local s = '{ '
        for k, v in pairs(o) do
            if type(k) ~= 'number' then k = '"' .. k .. '"' end
            s = s .. '[' .. k .. '] = ' .. dump(v) .. ','
        end
        return s .. '} '
    else
        return tostring(o)
    end
end

转储功能在我的

utilities.lua
文件中。我可以访问它,它从表中给我一个字符串,但我只想要 lsp 客户端的名称。我可以做些什么不同的事情?

lua neovim lua-table
2个回答
3
投票

我使用以下

lualine
插件配置来显示当前缓冲区的 LSP 客户端:

-- LSP clients attached to buffer
local clients_lsp = function ()
  local bufnr = vim.api.nvim_get_current_buf()

  local clients = vim.lsp.buf_get_clients(bufnr)
  if next(clients) == nil then
    return ''
  end

  local c = {}
  for _, client in pairs(clients) do
    table.insert(c, client.name)
  end
  return '\u{f085} ' .. table.concat(c, '|')
end

local config = {
  (...)
  sections = {
    lualine_a = { 'mode' },
    lualine_b = { branch, filename },
    lualine_c = { clients_lsp, diagnostics, },
    (...)
  },
}

lualine.setup(config)

3
投票

好的,这就是我所做的:

在我的 lualine.lua 文件中

local function lsp_clients()
  local clients = vim.lsp.get_active_clients()
  local clients_list = {}
  for _, client in pairs(clients) do
    table.insert(clients_list, client.name)
  end
  return 'LSP: ' .. utils.dump(clients_list)
end

在我的utils.lua文件中

-- Table to String for printing
function M.dump(o)
    if type(o) == 'table' then
        local s = ''
        for k, v in pairs(o) do
            if type(k) ~= 'number' then k = '"' .. k .. '"' end
            --s = s .. '[' .. k .. '] = ' .. M.dump(v) .. ','
            s = s .. M.dump(v) .. ','
        end
        return s
    else
        return tostring(o)
    end
end
© www.soinside.com 2019 - 2024. All rights reserved.