57 lines
1.9 KiB
Lua
57 lines
1.9 KiB
Lua
-- Remap leader key to comma
|
|
vim.g.mapleader = " "
|
|
|
|
local keymap = vim.keymap.set
|
|
|
|
-- General keymaps
|
|
keymap('n', '<leader>w', ':w<CR>', { desc = 'Save file' })
|
|
keymap('n', '<leader>q', ':q<CR>', { desc = 'Quit' })
|
|
keymap('n', '<leader>qq', ':q!<CR>', { desc = 'Force quit' })
|
|
|
|
-- Split navigation
|
|
keymap('n', '<leader>vs', ':vsplit<CR>', { desc = 'Vertical Split' })
|
|
keymap('n', '<leader>hs', ':split<CR>', { desc = 'Horizontal Split' })
|
|
|
|
-- File searching
|
|
keymap('n', '<leader>ff', ':Telescope find_files<CR>', { desc = 'Find Files' })
|
|
keymap('n', '<leader>fg', ':Telescope live_grep<CR>', { desc = 'Live Grep' })
|
|
keymap('n', '<leader>fb', ':Telescope buffers<CR>', { desc = 'Buffers' })
|
|
|
|
-- Buffer management
|
|
keymap('n', '<leader>bd', ':bd<CR>', { desc = 'Delete Buffer' })
|
|
|
|
-- ╭───────────────────────────────╮
|
|
-- │ LSP Keymaps (Attach Hook) │
|
|
-- ╰───────────────────────────────╯
|
|
local M = {}
|
|
|
|
function M.on_attach(_, bufnr)
|
|
local opts = { noremap = true, silent = true, buffer = bufnr }
|
|
local keymap = vim.keymap.set
|
|
|
|
-- LSP: Go to
|
|
keymap('n', 'gd', vim.lsp.buf.definition, opts)
|
|
keymap('n', 'gD', vim.lsp.buf.declaration, opts)
|
|
keymap('n', 'gi', vim.lsp.buf.implementation, opts)
|
|
keymap('n', 'gr', vim.lsp.buf.references, opts)
|
|
keymap('n', 'K', vim.lsp.buf.hover, opts)
|
|
|
|
-- LSP: Actions
|
|
keymap('n', '<leader>rn', vim.lsp.buf.rename, opts)
|
|
keymap({ 'n', 'v' }, '<leader>ca', vim.lsp.buf.code_action, opts)
|
|
|
|
-- LSP: Diagnostics
|
|
keymap('n', '[d', vim.diagnostic.goto_prev, opts)
|
|
keymap('n', ']d', vim.diagnostic.goto_next, opts)
|
|
keymap('n', '<leader>e', vim.diagnostic.open_float, opts)
|
|
keymap('n', '<leader>q', vim.diagnostic.setloclist, opts)
|
|
|
|
-- LSP: Formatting
|
|
keymap('n', '<leader>f', function()
|
|
vim.lsp.buf.format({ async = true })
|
|
end, opts)
|
|
end
|
|
|
|
return M
|
|
|