migrate nvim config to 0.12.0: vim.pack, ui2, snacks -> mini, just general spring cleaning
This commit is contained in:
parent
d1178fbe59
commit
14b1a9b057
70 changed files with 1081 additions and 1483 deletions
|
|
@ -1,14 +1,81 @@
|
|||
local utils = require("utils")
|
||||
local lsplib = require("lsplib")
|
||||
local inlay_hints_handler = require("inlay_hints_handler")
|
||||
|
||||
local format_on_save = true
|
||||
|
||||
vim.api.nvim_create_user_command("FormatEnable", function() format_on_save = true end, {})
|
||||
vim.api.nvim_create_user_command("FormatDisable", function() format_on_save = false end, {})
|
||||
vim.api.nvim_create_user_command("Format", function() vim.lsp.buf.format() end, {})
|
||||
|
||||
vim.lsp.config("*", {
|
||||
root_markers = { ".git" },
|
||||
})
|
||||
|
||||
local servers = {}
|
||||
utils.foreach(utils.get_file_names_in_dir("../lsp", "*.lua", true), function(server_name)
|
||||
table.insert(servers, server_name)
|
||||
end)
|
||||
local lsp_dir = vim.fs.joinpath(vim.fn.stdpath("config"), "lsp")
|
||||
for name, type in vim.fs.dir(lsp_dir) do
|
||||
if type == "file" and name:match("%.lua$") then
|
||||
table.insert(servers, (name:gsub("%.lua$", "")))
|
||||
end
|
||||
end
|
||||
|
||||
local lsp_pick_ns = vim.api.nvim_create_namespace("lsp_pick")
|
||||
local function lsp_pick(scope)
|
||||
vim.lsp.buf[scope]({
|
||||
on_list = function(options)
|
||||
if #options.items == 1 then
|
||||
local item = options.items[1]
|
||||
vim.cmd("normal! m'")
|
||||
vim.cmd.drop(item.filename)
|
||||
if item.lnum <= vim.api.nvim_buf_line_count(0) then
|
||||
vim.api.nvim_win_set_cursor(0, { item.lnum, (item.col or 1) - 1 })
|
||||
end
|
||||
return
|
||||
end
|
||||
local cwd = (vim.uv.cwd() or "") .. "/"
|
||||
local home = (vim.env.HOME or "") .. "/"
|
||||
for _, item in ipairs(options.items) do
|
||||
local icon, icon_hl = MiniIcons.get("file", item.filename)
|
||||
local rel = item.filename
|
||||
if rel:sub(1, #cwd) == cwd then
|
||||
rel = rel:sub(#cwd + 1)
|
||||
elseif rel:sub(1, #home) == home then
|
||||
rel = "~/" .. rel:sub(#home + 1)
|
||||
end
|
||||
local prefix = string.format("%s:%d:%d:", rel, item.lnum, item.col or 0)
|
||||
item.path = item.filename
|
||||
item.icon_hl = icon_hl
|
||||
item.icon_end = #icon
|
||||
item.prefix_end = #icon + 1 + #prefix
|
||||
item.text = string.format("%s %s %s", icon, prefix, vim.trim(item.text or ""))
|
||||
end
|
||||
MiniPick.start({
|
||||
source = {
|
||||
name = string.format("LSP (%s)", scope),
|
||||
items = options.items,
|
||||
show = function(buf_id, items_to_show, query)
|
||||
MiniPick.default_show(buf_id, items_to_show, query)
|
||||
vim.api.nvim_buf_clear_namespace(buf_id, lsp_pick_ns, 0, -1)
|
||||
for i, item in ipairs(items_to_show) do
|
||||
vim.api.nvim_buf_set_extmark(buf_id, lsp_pick_ns, i - 1, 0, {
|
||||
end_col = item.icon_end,
|
||||
hl_group = item.icon_hl,
|
||||
priority = 200,
|
||||
})
|
||||
vim.api.nvim_buf_set_extmark(buf_id, lsp_pick_ns, i - 1, item.icon_end + 1, {
|
||||
end_col = item.prefix_end,
|
||||
hl_group = "Comment",
|
||||
priority = 200,
|
||||
})
|
||||
end
|
||||
end,
|
||||
preview = MiniPick.default_preview,
|
||||
choose = MiniPick.default_choose,
|
||||
},
|
||||
})
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
vim.lsp.enable(servers)
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
|
|
@ -17,6 +84,33 @@ vim.api.nvim_create_autocmd("LspAttach", {
|
|||
local bufnr = args.buf
|
||||
assert(client, "LspAttach: client is nil")
|
||||
|
||||
lsplib.configure_generic_client(client, bufnr)
|
||||
end
|
||||
inlay_hints_handler.add_buffer(bufnr)
|
||||
|
||||
if client:supports_method("textDocument/formatting") then
|
||||
vim.api.nvim_buf_create_user_command(bufnr, "Format", vim.lsp.buf.format, { nargs = 0 })
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
buffer = bufnr,
|
||||
callback = function()
|
||||
if format_on_save then vim.lsp.buf.format() end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
for mode, keys in pairs({
|
||||
n = {
|
||||
{ "K", function() vim.lsp.buf.hover() end, { buf = bufnr } },
|
||||
{ "<leader>a", function() vim.lsp.buf.code_action() end, { buf = bufnr } },
|
||||
{ "gd", function() lsp_pick("definition") end, { buf = bufnr } },
|
||||
{ "gD", function() lsp_pick("declaration") end, { buf = bufnr } },
|
||||
{ "gr", function() lsp_pick("references") end, { buf = bufnr, nowait = true } },
|
||||
{ "gi", function() lsp_pick("implementation") end, { buf = bufnr } },
|
||||
{ "gt", function() lsp_pick("type_definition") end, { buf = bufnr } },
|
||||
},
|
||||
i = {
|
||||
{ "<C-s>", function() vim.lsp.buf.signature_help() end, { buf = bufnr } },
|
||||
},
|
||||
}) do
|
||||
utils.set_keymap_list(keys, mode)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue