78 lines
2.9 KiB
Lua
78 lines
2.9 KiB
Lua
-- Set leader key
|
|
vim.g.mapleader = " "
|
|
vim.g.maplocalleader = " "
|
|
|
|
-- Disable the spacebar key's default behavior in Normal and Visual modes
|
|
vim.keymap.set({ "n", "v" }, "<Space>", "<Nop>", { silent = true })
|
|
|
|
-- For conciseness
|
|
local opts = { noremap = true, silent = true }
|
|
|
|
-- save file without auto-formatting
|
|
vim.keymap.set("n", "<C-s>", "<cmd>noautocmd w <CR>", opts)
|
|
|
|
-- quit file
|
|
vim.keymap.set("n", "<C-q>", "<cmd> q <CR>", opts)
|
|
|
|
-- delete single character without copying into register
|
|
vim.keymap.set("n", "x", '"_x', opts)
|
|
|
|
-- Vertical scroll and center
|
|
vim.keymap.set("n", "<C-d>", "<C-d>zz", opts)
|
|
vim.keymap.set("n", "<C-u>", "<C-u>zz", opts)
|
|
vim.keymap.set("n", "<S-g>", "<S-g>zz", opts)
|
|
|
|
-- Find and center
|
|
vim.keymap.set("n", "n", "nzzzv", opts)
|
|
vim.keymap.set("n", "N", "Nzzzv", opts)
|
|
|
|
-- Resize with arrows
|
|
vim.keymap.set("n", "k", ":resize -2<CR>", opts)
|
|
vim.keymap.set("n", "j", ":resize +2<CR>", opts)
|
|
vim.keymap.set("n", "h", ":vertical resize -2<CR>", opts)
|
|
vim.keymap.set("n", "l", ":vertical resize +2<CR>", opts)
|
|
|
|
-- Buffers
|
|
vim.keymap.set("n", "<Tab>", ":bnext<CR>", opts)
|
|
vim.keymap.set("n", "<S-Tab>", ":bprevious<CR>", opts)
|
|
vim.keymap.set("n", "<leader>q", ":bdelete!<CR>:bnext<CR>", opts) -- close buffer
|
|
vim.keymap.set("n", "<leader>b", "<cmd> enew <CR>", opts) -- new buffer
|
|
|
|
-- Window management
|
|
vim.keymap.set("n", "<leader>v", "<C-w>v", opts) -- split window vertically
|
|
vim.keymap.set("n", "<leader>h", "<C-w>s", opts) -- split window horizontally
|
|
vim.keymap.set("n", "<leader>se", "<C-w>=", opts) -- make split windows equal width & height
|
|
vim.keymap.set("n", "<leader>xs", ":close<CR>", opts) -- close current split window
|
|
|
|
-- Navigate between splits
|
|
vim.keymap.set("n", "<C-Up>", ":wincmd k<CR>", opts)
|
|
vim.keymap.set("n", "<C-Down>", ":wincmd j<CR>", opts)
|
|
vim.keymap.set("n", "<C-Left>", ":wincmd h<CR>", opts)
|
|
vim.keymap.set("n", "<C-Right>", ":wincmd l<CR>", opts)
|
|
|
|
-- Tabs
|
|
vim.keymap.set("n", "<leader>to", ":tabnew<CR>", opts) -- open new tab
|
|
vim.keymap.set("n", "<leader>tx", ":tabclose<CR>", opts) -- close current tab
|
|
vim.keymap.set("n", "<leader>tn", ":tabn<CR>", opts) -- go to next tab
|
|
vim.keymap.set("n", "<leader>tp", ":tabp<CR>", opts) -- go to previous tab
|
|
|
|
-- Toggle line wrapping
|
|
vim.keymap.set("n", "<leader>lw", "<cmd>set wrap!<CR>", opts)
|
|
|
|
-- Stay in indent mode
|
|
vim.keymap.set("v", "<", "<gv", opts)
|
|
vim.keymap.set("v", ">", ">gv", opts)
|
|
|
|
-- Keep last yanked when pasting
|
|
vim.keymap.set("v", "p", '"_dP', opts)
|
|
|
|
-- Diagnostic keymaps
|
|
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, { desc = "Go to previous diagnostic message" })
|
|
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, { desc = "Go to next diagnostic message" })
|
|
vim.keymap.set("n", "<leader>d", vim.diagnostic.open_float, { desc = "Open floating diagnostic message" })
|
|
vim.keymap.set("n", "<leader>qd", vim.diagnostic.setloclist, { desc = "Open diagnostics list" })
|
|
|
|
-- Move lines
|
|
vim.keymap.set("n", "<C-Up>", ":m -2<CR>", opts)
|
|
vim.keymap.set("n", "<C-Down>", ":m +1<CR>", opts)
|