kickstart.nvim/lua/core/keymaps/init.lua

120 lines
3.3 KiB
Lua

---@diagnostic disable: undefined-global
-- Keymaps init - loads all keymap modules
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
local M = {}
-- Import keymap modules
local core = require('core.keymaps.core')
local lsp = require('core.keymaps.lsp')
local telescope = require('core.keymaps.telescope')
local diagnostic = require('core.keymaps.diagnostic')
local git = require('core.keymaps.git')
local plugins = require('core.keymaps.plugins')
-- Export for external use
M.setup_lsp_keymaps = lsp.setup
M.telescope_keymaps = telescope
M.diagnostic_keymaps = diagnostic
M.gitsigns_keymaps = git.keymaps
M.dadbod_keymaps = plugins.dadbod
M.session_keymaps = plugins.session
M.scratch_keymaps = plugins.scratch
M.snacks_keymaps = plugins.snacks
M.leap_keymaps = plugins.leap
M.mini_surround_keymaps = plugins.mini_surround
-- Setup functions
M.setup_gitsigns_keymaps = git.setup
M.setup_dadbod_keymaps = plugins.setup_dadbod
M.setup_session_keymaps = plugins.setup_session
M.setup_leap_keymaps = plugins.setup_leap
-- Default on_attach for LSP (used by lsp/setup.lua)
M.default_on_attach = nil
local explorer_keymaps_set = false
local function setup_explorer_keymaps()
if explorer_keymaps_set then return end
explorer_keymaps_set = true
for _, key in ipairs({ '<leader>e', '<leader>E' }) do
pcall(vim.keymap.del, 'n', key)
end
for _, mapping in ipairs(plugins.snacks) do
if mapping.lhs == '<leader>e' or mapping.lhs == '<leader>E' then
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, vim.tbl_extend('force', mapping.opts, {
replace_keycodes = false,
nowait = true,
silent = true,
}))
end
end
end
local function init_keymaps()
local keymap_group = vim.api.nvim_create_augroup('custom_keymaps', { clear = true })
-- Handle snacks explorer during buffer writes
vim.api.nvim_create_autocmd({ 'BufWritePre' }, {
group = keymap_group,
callback = function()
pcall(function()
local picker = require('plugins.snacks.picker')
if picker.is_open() then
picker.pause_updates()
vim.schedule(function() picker.resume_updates() end)
end
end)
end,
})
-- Set up autocmds to maintain explorer keymaps
vim.api.nvim_create_autocmd({ 'VimEnter', 'BufEnter' }, {
group = keymap_group,
callback = setup_explorer_keymaps,
})
-- Set up LSP keymaps on attach
vim.api.nvim_create_autocmd('LspAttach', {
group = keymap_group,
callback = function(args) M.setup_lsp_keymaps(args.buf) end,
})
-- Core keymaps
for _, mapping in ipairs(core) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Telescope keymaps
for _, mapping in ipairs(telescope) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Diagnostic keymaps
for _, mapping in ipairs(diagnostic) do
vim.keymap.set(mapping.mode, mapping.lhs, mapping.rhs, mapping.opts)
end
-- Plugin keymaps
plugins.setup_snacks()
plugins.setup_scratch()
plugins.setup_dadbod()
plugins.setup_session()
plugins.setup_leap()
git.setup()
-- Tab navigation
vim.keymap.set('n', 'gt', ':tabnext<CR>', { silent = true, desc = 'Next tab' })
vim.keymap.set('n', 'gT', ':tabprevious<CR>', { silent = true, desc = 'Previous tab' })
end
init_keymaps()
M.setup = init_keymaps
return M