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