From 21107f040b1579c1139ef0ca2ce993603d24826f Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Sun, 27 Apr 2025 14:12:18 +0300 Subject: Massive nvim refactor, migrated from nvim-lspconfig to NVIM 0.11 lsp/* also migrated most LSP clients to nix rather than mason --- .config/nvim/lua/keymaps.lua | 75 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 2 deletions(-) (limited to '.config/nvim/lua/keymaps.lua') diff --git a/.config/nvim/lua/keymaps.lua b/.config/nvim/lua/keymaps.lua index 94e4223..86547a2 100644 --- a/.config/nvim/lua/keymaps.lua +++ b/.config/nvim/lua/keymaps.lua @@ -15,6 +15,7 @@ end local function yank_filepath_to_clipboard(os) return function() local filepath = vim.fn.expand('%:p') + -- TODO: simplify bcz idc about windows anymore if os == 'linux' then local home_dir = vim.fn.expand('~') filepath = filepath:gsub(home_dir, '~') @@ -58,8 +59,8 @@ set({ 'n', 'x' }, 'p', 'lua RemoveClipboardCR()p', { noremap = true }) set({ 'n', 'x' }, 'P', 'lua RemoveClipboardCR()P', { noremap = true }) -- Move lines around -set('n', '', ":m .+1", { noremap = true }) -set('n', '', ":m .-2", { noremap = true }) +set('n', '', ':m .+1', { noremap = true }) +set('n', '', ':m .-2', { noremap = true }) set('v', '', ":m '>+1gv", { noremap = true }) set('v', '', ":m '<-2gv", { noremap = true }) @@ -99,3 +100,73 @@ set('n', 'x', 'source %', { desc = 'Execute the current -- Reformats file using lsp set('n', '=', vim.lsp.buf.format, { desc = 'Format File' }) + +-- LSP keymaps +local severity = vim.diagnostic.severity +local function next_diagnostic(diagnostic_severity) + return function() + require('lspsaga.diagnostic'):goto_next({ severity = diagnostic_severity }) + end +end +local function prev_diagnostic(diagnostic_severity) + return function() + require('lspsaga.diagnostic'):goto_prev({ severity = diagnostic_severity }) + end +end +local function cursor_diagnostics() + vim.diagnostic.open_float({ + scope = 'cursor', + border = 'single', + }) +end + +local keymaps = { + { 'n', 'gd', 'Lspsaga goto_definition', { desc = '[G]oto [D]efinition' } }, + { 'n', 'gu', 'Lspsaga finder', { desc = '[G]oto [U]sages' } }, + { { 'n', 'i' }, '', vim.lsp.buf.signature_help, { desc = 'Show [P]arameters' } }, + { 'n', 'K', 'Lspsaga hover_doc', { desc = 'Documentation' } }, + { 'n', 'R', 'Lspsaga rename', { desc = '[R]ename' } }, + { { 'n', 'i' }, '', 'Lspsaga code_action', { desc = 'Code Actions' } }, + { 'n', 'ca', 'Lspsaga code_action', { desc = '[C]ode [A]ctions' } }, + { 'n', 'e', next_diagnostic(severity.ERROR), { desc = 'Goto [E]rror' } }, + { 'n', 'E', prev_diagnostic(severity.ERROR), { desc = 'Goto [E]rror (prev)' } }, + { 'n', 'w', next_diagnostic(severity.WARN), { desc = 'Goto [W]arning' } }, + { 'n', 'W', prev_diagnostic(severity.WARN), { desc = 'Goto [W]arning (prev)' } }, + { 'n', 'D', cursor_diagnostics, { desc = '[D]iagnostics under cursor' } }, +} + +for _, ft in ipairs({ 'c', 'h', 'cpp', 'hpp' }) do + keymaps[ft] = { + { 'n', 'H', 'ClangdSwitchSourceHeader', { desc = '[H]eader and Source Switcher' } }, + { 'n', 'K', 'lua require("pretty_hover").hover()', { desc = 'Documentation Hover' } }, + } +end + +local function set_keymaps(tbl, bufnr) + for _, keymap in ipairs(tbl) do + local mode = keymap[1] + local lhs = keymap[2] + local rhs = keymap[3] + local opts = keymap[4] or {} + opts.buffer = bufnr + vim.keymap.set(mode, lhs, rhs, opts) + end +end + +vim.api.nvim_create_autocmd('LspAttach', { + desc = 'Register LSP keymaps', + group = vim.api.nvim_create_augroup('lsp-keymaps', { clear = true }), + callback = function(args) + local bufnr = args.buf + + local filetype = vim.bo[bufnr].filetype + set_keymaps(keymaps, bufnr) + for ft, tbl in pairs(keymaps) do + if type(ft) == 'number' or ft ~= filetype then + goto continue + end + set_keymaps(tbl, bufnr) + ::continue:: + end + end, +}) -- cgit v1.3.1