return { { "folke/which-key.nvim", event = "VeryLazy", opts = { spec = { { "l", ":Lazy", desc = "Lazy" }, { "t", function() vim.cmd.botright("new") vim.opt_local.number = false vim.opt_local.relativenumber = false vim.cmd.resize(10) vim.cmd.terminal() vim.cmd.startinsert() end, mode = "n", desc = "Open Terminal" }, --{ "wd", "execute 'bd' | execute 'close'", desc = "Delete window & buffer" }, -- Window & Buffer Management { "w", group = "Windows"}, { "wc", ":close", desc = "Close Window" }, { "ws", ":split", desc = "Horizontal Window Split" }, { "wv", ":vsplit", desc = "Vertial Window Split" }, { "wm", "_", desc = "Maximize Window" }, { "b", group = "Buffers"}, { "bd", function() local function is_neotree(bufnr) return vim.bo[bufnr].filetype == "neo-tree" end local current_buf = vim.api.nvim_get_current_buf() -- Skip if in neo-tree if is_neotree(current_buf) then vim.notify("Cannot delete buffer from neo-tree", vim.log.levels.WARN) return end local buflisted = vim.fn.getbufinfo({ buflisted = 1 }) -- Prevent deleting last buffer if #buflisted <= 1 then vim.notify("Cannot delete last buffer", vim.log.levels.WARN) return end vim.cmd.bprevious() vim.cmd.bdelete({ args = { tostring(current_buf) } }) -- If we ended up in neo-tree, move back to a regular window local new_buf = vim.api.nvim_get_current_buf() if is_neotree(new_buf) then vim.cmd.wincmd("l") end end, desc = "Delete Buffer" }, { "bD", function() local current_buf = vim.api.nvim_get_current_buf() local current_win = vim.api.nvim_get_current_win() if vim.bo[current_buf].filetype == "neo-tree" then vim.notify("Cannot delete neo-tree buffer", vim.log.levels.WARN) return end local wins = vim.fn.win_findbuf(current_buf) if #wins > 1 then vim.api.nvim_win_close(current_win, false) end if vim.api.nvim_buf_is_valid(current_buf) then vim.cmd('bdelete! ' .. current_buf) end end, desc = "Delete Window & Buffer" }, { "ca", vim.lsp.buf.code_action, desc = "Code Action" }, { "cr", vim.lsp.buf.rename, desc = "Rename Variable" }, { "ch", vim.lsp.buf.hover, desc = "Hover Info" }, { "ce", vim.diagnostic.open_float, desc = "Show Diagnostic" }, { "]d", vim.diagnostic.goto_next, desc = "Next Diagnostic" }, { "[d", vim.diagnostic.goto_prev, desc = "Prev Diagnostic" }, { "G", group = "Git"}, { "f", group = "Files"}, { "c", group = "Code"}, { "g", group = "Goto"}, }, }, } }