local M = {} local map = vim.keymap.set function M.lsp(buffer, client) local opts = { buffer = buffer, noremap = true, silent = true, } map("n", "gd", vim.lsp.buf.definition, opts) map("n", "gD", vim.lsp.buf.declaration, opts) map("n", "gr", vim.lsp.buf.references, opts) map("n", "gi", vim.lsp.buf.implementation, opts) map("n", "K", vim.lsp.buf.hover, opts) map("n", "rn", vim.lsp.buf.rename, opts) map("n", "ca", vim.lsp.buf.code_action, opts) map("n", "cf", function() vim.lsp.buf.format({ async = true; }) end, opts) if client and client.name == "clangd" then map("n", "hs", "ClangdSwitchSourceHeader", opts) end end function M.telescope() local opts = { noremap = true, silent = true, } map("n", "ff", function() require("telescope.builtin").find_files() end, opts) map("n", "fg", function() require("telescope.builtin").live_grep() end, opts) map("n", "fb", function() require("telescope.builtin").buffers() end, opts) map("n", "fh", function() require("telescope.builtin").help_tags() end, opts) map("n", "dd", function() require("telescope.builtin").diagnostics() end, opts) end function M.global() local opts = { noremap = true, silent = true, } map("n", "ö", "}", opts) map("n", "ä", "{", opts) map("n", "K", function() vim.diagnostic.open_float({ scope = "cursor", border = "rounded" }) end, opts) map("n", "q", vim.diagnostic.setloclist, opts) map("n", "[d", function() vim.diagnostic.jump_prev({ wrap = false }) end, opts) map("n", "]d", function() vim.diagnostic.jump_next({ wrap = false }) end, opts) map("n", "[e", function() vim.diagnostic.jump_prev({ severity = vim.diagnostic.severity.ERROR, wrap = false }) end, opts) map("n", "]e", function() vim.diagnostic.jump_next({ severity = vim.diagnostic.severity.ERROR, wrap = false }) end, opts) vim.keymap.set("n", "ts", function() vim.opt_local.spell = not vim.opt_local.spell:get() end, { desc = "Toggle spell checking" }) end return M