-- Set <space> as the leader key -- See `:help mapleader` -- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) vim.g.mapleader = " " vim.g.maplocalleader = " " -- [[ Basic Keymaps ]] -- See `:help vim.keymap.set()` -- Clear highlights on search when pressing <Esc> in normal mode -- See `:help hlsearch` vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR>") -- Delete entire word with Alt+Backspace vim.keymap.set("i", "<A-BS>", "<C-W>") -- Diagnostic keymaps vim.keymap.set("n", "[d", vim.diagnostic.goto_next, { desc = "Go to next [D]iagnostic message" }) vim.keymap.set("n", "]d", vim.diagnostic.goto_prev, { desc = "Go to previous [D]iagnostic message" }) vim.keymap.set("n", "<leader>e", vim.diagnostic.open_float, { desc = "Show diagnostic [E]rror message" }) vim.keymap.set("n", "<leader>q", vim.diagnostic.setloclist, { desc = "Open diagnostic [Q]uickfix list" }) -- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier -- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which -- is not what someone will guess without a bit more experience. -- -- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping -- or just use <C-\><C-n> to exit terminal mode vim.keymap.set("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal mode" }) -- TIP: Disable arrow keys in normal mode vim.keymap.set("n", "<left>", '<cmd>echo "Use h to move!!"<CR>') vim.keymap.set("n", "<right>", '<cmd>echo "Use l to move!!"<CR>') vim.keymap.set("n", "<up>", '<cmd>echo "Use k to move!!"<CR>') vim.keymap.set("n", "<down>", '<cmd>echo "Use j to move!!"<CR>') -- Keybinds to make split navigation easier. -- Use CTRL+<hjkl> to switch between windowsC -- -- See `:help wincmd` for a list of all window commands vim.keymap.set("n", "<C-h>", "<C-w><C-h>", { desc = "Move focus to the left window" }) vim.keymap.set("n", "<C-l>", "<C-w><C-l>", { desc = "Move focus to the right window" }) vim.keymap.set("n", "<C-j>", "<C-w><C-j>", { desc = "Move focus to the lower window" }) vim.keymap.set("n", "<C-k>", "<C-w><C-k>", { desc = "Move focus to the upper window" }) -- Window management vim.keymap.set("n", "<leader>sv", "<C-w>v", { desc = "[S]plit window [V]ertically" }) vim.keymap.set("n", "<leader>sh", "<C-w>s", { desc = "[S]plit window [H]orizontally" }) vim.keymap.set("n", "<leader>se", "<C-w>=", { desc = "Make [S]plit [E]qual size" }) vim.keymap.set("n", "<leader>sx", "<cmd>close<CR>", { desc = "Current [S]plit [X]Close" }) -- Tab management vim.keymap.set("n", "<leader>to", "<cmd>tabnew<CR>", { desc = "Open new tab" }) -- open new tab vim.keymap.set("n", "<leader>tx", "<cmd>tabclose<CR>", { desc = "Close current tab" }) -- close current tab vim.keymap.set("n", "<leader>tn", "<cmd>tabn<CR>", { desc = "Go to next tab" }) -- go to next tab vim.keymap.set("n", "<leader>tp", "<cmd>tabp<CR>", { desc = "Go to previous tab" }) -- go to previous tab vim.keymap.set("n", "<leader>tf", "<cmd>tabnew %<CR>", { desc = "Open current buffer in new tab" }) -- move current buffer to new tab -- Gopher plugin keymaps vim.keymap.set("n", "<leader>if", "<cmd> GoIfErr <CR>", { desc = "Add if err != nil snippet" }) -- Borrowed from my VS Code settings for better Vim navigations vim.keymap.set("n", "<leader>l", "$", { desc = "Move to end of the line with leader + l" }) vim.keymap.set("n", "<leader>h", "_", { desc = "Move to first character of the line with leader + h" }) -- Gitsigns to toggle hunk preview and git line blame vim.keymap.set("n", "<leader>gp", ":Gitsigns preview_hunk<CR>", { desc = "Preview changes made on the current line" }) vim.keymap.set("n", "<leader>gt", ":Gitsigns toggle_current_line_blame<CR>", { desc = "View current line blame" })