local function smart_quit() local bufnr = vim.api.nvim_get_current_buf() local modified = vim.api.nvim_buf_get_option(bufnr, "modified") if modified then vim.ui.input({ prompt = "You have unsaved changes. Quit anyway? (y/n) ", }, function(input) if input == "y" then vim.cmd "q!" end end) else vim.cmd "q!" end end local function find_project_files() local _, builtin = pcall(require, "telescope.builtin") local ok = pcall(builtin.git_files) if not ok then builtin.find_files() end end local wk = require("which-key") wk.setup({ preset = "classic", delay = 0, triggers = { { "", mode = "nxso" }, { " ", mode = "n" }, -- literal space character }, }) wk.add({ -- Single key mappings { ";", "Alpha", desc = "Dashboard" }, { "w", "w!", desc = "Save" }, { "q", smart_quit, desc = "Quit" }, { "/", "(comment_toggle_linewise_current)", desc = "Comment toggle current line" }, { "c", "BufferKill", desc = "Close Buffer" }, { "f", find_project_files, desc = "Find File" }, { "h", "nohlsearch", desc = "No Highlight" }, { "t", "TodoTelescope keywords=TODO,FIX", desc = "Find TODO,FIX" }, -- Buffers group { "b", group = "Buffers" }, { "bj", "BufferLinePick", desc = "Jump" }, { "bf", "Telescope buffers", desc = "Find" }, { "bb", "BufferLineCyclePrev", desc = "Previous" }, { "bn", "BufferLineCycleNext", desc = "Next" }, { "be", "BufferLinePickClose", desc = "Pick which buffer to close" }, { "bh", "BufferLineCloseLeft", desc = "Close all to the left" }, { "bl", "BufferLineCloseRight", desc = "Close all to the right" }, { "bD", "BufferLineSortByDirectory", desc = "Sort by directory" }, { "bL", "BufferLineSortByExtension", desc = "Sort by language" }, -- Git group { "g", group = "Git" }, { "gg", Lazygit_toggle, desc = "Lazygit" }, { "gj", "lua require 'gitsigns'.next_hunk({navigation_message = false})", desc = "Next Hunk" }, { "gk", "lua require 'gitsigns'.prev_hunk({navigation_message = false})", desc = "Prev Hunk" }, { "gl", "lua require 'gitsigns'.blame_line()", desc = "Blame" }, { "gp", "lua require 'gitsigns'.preview_hunk()", desc = "Preview Hunk" }, { "gr", "lua require 'gitsigns'.reset_hunk()", desc = "Reset Hunk" }, { "gR", "lua require 'gitsigns'.reset_buffer()", desc = "Reset Buffer" }, { "gs", "lua require 'gitsigns'.stage_hunk()", desc = "Stage Hunk" }, { "gu", "lua require 'gitsigns'.undo_stage_hunk()", desc = "Undo Stage Hunk" }, { "go", "Telescope git_status", desc = "Open changed file" }, { "gb", "Telescope git_branches", desc = "Checkout branch" }, { "gc", "Telescope git_commits", desc = "Checkout commit" }, { "gC", "Telescope git_bcommits", desc = "Checkout commit(for current file)" }, { "gd", "Gitsigns diffthis HEAD", desc = "Git Diff" }, -- LSP group { "l", group = "LSP" }, { "la", "lua vim.lsp.buf.code_action()", desc = "Code Action" }, { "ld", "Telescope diagnostics bufnr=0 theme=get_ivy", desc = "Buffer Diagnostics" }, { "lw", "Telescope diagnostics", desc = "Diagnostics" }, { "li", "LspInfo", desc = "Info" }, { "lI", "Mason", desc = "Mason Info" }, { "lj", vim.diagnostic.goto_next, desc = "Next Diagnostic" }, { "lk", vim.diagnostic.goto_prev, desc = "Prev Diagnostic" }, { "ll", vim.lsp.codelens.run, desc = "CodeLens Action" }, { "lq", vim.diagnostic.setloclist, desc = "Quickfix" }, { "lr", vim.lsp.buf.rename, desc = "Rename" }, { "ls", "Telescope lsp_document_symbols", desc = "Document Symbols" }, { "lS", "Telescope lsp_dynamic_workspace_symbols", desc = "Workspace Symbols" }, { "le", "Telescope quickfix", desc = "Telescope Quickfix" }, -- Direct LSP shortcuts { "a", "lua require('telescope.builtin').lsp_code_actions()", desc = "Code Actions" }, { "d", "lua require('telescope.builtin').lsp_document_diagnostics()", desc = "LSP Diagnostics" }, { "k", "lua vim.lsp.buf.signature_help()", desc = "Signature Help" }, { "P", "lua require'telescope'.extensions.projects.projects{}", desc = "Projects" }, -- Visual mode mappings { "/", "(comment_toggle_linewise_visual)", desc = "Comment toggle linewise (visual)", mode = "v" }, })