fix(lsp): enable lsp keybinds always, even when no server is attached
This commit is contained in:
@@ -145,6 +145,38 @@ end)
|
||||
vim.keymap.set("n", "]c", ":cn<CR>")
|
||||
vim.keymap.set("n", "[c", ":cp<CR>")
|
||||
|
||||
vim.keymap.set("n", "<leader>dk", vim.diagnostic.open_float)
|
||||
vim.keymap.set("n", "[d", function()
|
||||
vim.diagnostic.jump({ count = -1, float = true })
|
||||
end)
|
||||
vim.keymap.set("n", "]d", function()
|
||||
vim.diagnostic.jump({ count = 1, float = true })
|
||||
end)
|
||||
vim.keymap.set("n", "gD", vim.lsp.buf.declaration)
|
||||
vim.keymap.set("n", "K", function()
|
||||
vim.lsp.buf.hover({ max_width = 80 })
|
||||
end)
|
||||
vim.keymap.set({ "i", "s" }, "<C-s>", function()
|
||||
vim.lsp.buf.signature_help({ max_width = 80 })
|
||||
end)
|
||||
vim.keymap.set({ "n", "i" }, "<C-h>", vim.lsp.buf.document_highlight)
|
||||
vim.keymap.set({ "n", "x" }, "<leader>lf", vim.lsp.buf.format)
|
||||
vim.keymap.set("n", "<leader>ld", function()
|
||||
vim.diagnostic.enable(
|
||||
not vim.diagnostic.is_enabled({ bufnr = 0 }),
|
||||
{ bufnr = 0 }
|
||||
)
|
||||
end)
|
||||
vim.keymap.set({ "n", "i" }, "<C-l>", function()
|
||||
vim.lsp.buf.clear_references()
|
||||
vim.cmd.nohlsearch()
|
||||
vim.schedule(vim.cmd.diffupdate)
|
||||
return "<C-l>"
|
||||
end, { expr = true })
|
||||
vim.keymap.set("n", "<leader>dl", vim.diagnostic.setloclist)
|
||||
vim.keymap.set("n", "grt", vim.lsp.buf.type_definition)
|
||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition)
|
||||
|
||||
-- Default bindings that are good to know:
|
||||
-- insert mode:
|
||||
-- <C-T> - indent, see :h i_CTRL-T
|
||||
|
||||
+1
-95
@@ -2,7 +2,6 @@
|
||||
vim.lsp.config = vim.lsp.config
|
||||
|
||||
local log = require("log")
|
||||
local util = require("util")
|
||||
|
||||
local M = {}
|
||||
|
||||
@@ -15,97 +14,6 @@ M.diagnostic_signs = {
|
||||
},
|
||||
}
|
||||
|
||||
---@param bufnr integer
|
||||
local function set_keymaps(bufnr)
|
||||
local keymaps = {
|
||||
{ mode = { "n" }, lhs = "<leader>dk", rhs = vim.diagnostic.open_float },
|
||||
{
|
||||
mode = { "n" },
|
||||
lhs = "[d",
|
||||
rhs = function()
|
||||
vim.diagnostic.jump({ count = -1, float = true })
|
||||
end,
|
||||
},
|
||||
{
|
||||
mode = { "n" },
|
||||
lhs = "]d",
|
||||
rhs = function()
|
||||
vim.diagnostic.jump({ count = 1, float = true })
|
||||
end,
|
||||
},
|
||||
{ mode = { "n" }, lhs = "gD", rhs = vim.lsp.buf.declaration },
|
||||
{
|
||||
mode = "n",
|
||||
lhs = "K",
|
||||
rhs = function()
|
||||
vim.lsp.buf.hover({ max_width = 80 })
|
||||
end,
|
||||
},
|
||||
{
|
||||
mode = { "i", "s" },
|
||||
lhs = "<C-s>",
|
||||
rhs = function()
|
||||
vim.lsp.buf.signature_help({ max_width = 80 })
|
||||
end,
|
||||
},
|
||||
{
|
||||
mode = { "n", "i" },
|
||||
lhs = "<C-h>",
|
||||
rhs = vim.lsp.buf.document_highlight,
|
||||
},
|
||||
{
|
||||
mode = { "n", "x" },
|
||||
lhs = "<leader>lf",
|
||||
rhs = vim.lsp.buf.format,
|
||||
},
|
||||
{
|
||||
mode = { "n" },
|
||||
lhs = "<leader>ld",
|
||||
rhs = function()
|
||||
vim.diagnostic.enable(
|
||||
not vim.diagnostic.is_enabled({ bufnr = bufnr }),
|
||||
{ bufnr = bufnr }
|
||||
)
|
||||
end,
|
||||
},
|
||||
{
|
||||
mode = { "n", "i" },
|
||||
lhs = "<C-l>",
|
||||
rhs = function()
|
||||
vim.lsp.buf.clear_references()
|
||||
vim.cmd.nohlsearch()
|
||||
vim.schedule(vim.cmd.diffupdate)
|
||||
return "<C-l>"
|
||||
end,
|
||||
opts = { expr = true },
|
||||
},
|
||||
}
|
||||
|
||||
local telescope = util.try_require("telescope.builtin")
|
||||
|
||||
if telescope then
|
||||
vim.list_extend(keymaps, {
|
||||
{ mode = "n", lhs = "<leader>dl", rhs = telescope.diagnostics },
|
||||
{ mode = "n", lhs = "grt", rhs = telescope.lsp_type_definitions },
|
||||
{ mode = "n", lhs = "gd", rhs = telescope.lsp_definitions },
|
||||
{ mode = "n", lhs = "gri", rhs = telescope.lsp_implementations },
|
||||
{ mode = "n", lhs = "grr", rhs = telescope.lsp_references },
|
||||
})
|
||||
else
|
||||
vim.list_extend(keymaps, {
|
||||
{ mode = "n", lhs = "<leader>dl", rhs = vim.diagnostic.setloclist },
|
||||
{ mode = "n", lhs = "grt", rhs = vim.lsp.buf.type_definition },
|
||||
{ mode = "n", lhs = "gd", rhs = vim.lsp.buf.definition },
|
||||
})
|
||||
end
|
||||
|
||||
for _, keymap in ipairs(keymaps) do
|
||||
keymap.opts =
|
||||
vim.tbl_extend("keep", keymap.opts or {}, { buffer = bufnr })
|
||||
vim.keymap.set(keymap.mode, keymap.lhs, keymap.rhs, keymap.opts)
|
||||
end
|
||||
end
|
||||
|
||||
--- Load a JSON file and return a parsed table merged with settings
|
||||
---@param path string
|
||||
---@param settings? table
|
||||
@@ -131,9 +39,7 @@ local function with_file(path, settings)
|
||||
return vim.tbl_deep_extend("force", settings or {}, resp)
|
||||
end
|
||||
|
||||
function M.on_attach(client, bufnr)
|
||||
set_keymaps(bufnr)
|
||||
|
||||
function M.on_attach(client, _)
|
||||
client.settings = with_file(
|
||||
string.format(".%s.json", client.name),
|
||||
client.settings
|
||||
|
||||
@@ -158,6 +158,12 @@ return {
|
||||
})
|
||||
end)
|
||||
|
||||
vim.keymap.set("n", "<leader>dl", builtin.diagnostics)
|
||||
vim.keymap.set("n", "grt", builtin.lsp_type_definitions)
|
||||
vim.keymap.set("n", "gd", builtin.lsp_definitions)
|
||||
vim.keymap.set("n", "gri", builtin.lsp_implementations)
|
||||
vim.keymap.set("n", "grr", builtin.lsp_references)
|
||||
|
||||
telescope.load_extension("fzf")
|
||||
telescope.load_extension("notify")
|
||||
vim.keymap.set("n", "<leader>fn", function()
|
||||
|
||||
Reference in New Issue
Block a user