141 lines
5.8 KiB
Lua
141 lines
5.8 KiB
Lua
local kmGroup = vim.api.nvim_create_augroup("KeymappingsGroup", { clear = true })
|
|
local kmgAutocmd = vim.api.nvim_create_autocmd
|
|
|
|
------------------------------------------------------------------------------------------
|
|
-- core
|
|
|
|
-- explore the directory of the current file (using netrw)
|
|
vim.keymap.set("n", "<leader>n", vim.cmd.Ex)
|
|
|
|
-- move selected lines up or down
|
|
vim.keymap.set("v", "J", ":m '>+1<CR>gv")
|
|
vim.keymap.set("v", "K", ":m '<-2<CR>gv")
|
|
|
|
-- vertically center cursor with half-page jumps
|
|
vim.keymap.set("n", "<C-d>", "<C-d>zz")
|
|
vim.keymap.set("n", "<C-u>", "<C-u>zz")
|
|
|
|
-- open folds when iterating search results
|
|
vim.keymap.set("n", "n", "nzv")
|
|
vim.keymap.set("n", "N", "Nzv")
|
|
|
|
-- maintain cursor position after paragraph formatting
|
|
vim.keymap.set("n", "=ap", "ma=ap'a")
|
|
|
|
-- shortcuts for deleting into the void register
|
|
vim.keymap.set({ "n", "v" }, "<leader>d", "\"_d")
|
|
vim.keymap.set("x", "<leader>P", [["_dP]]) -- replace selected text, keep main register
|
|
|
|
-- shortcuts for using + register (system clipboard)
|
|
vim.keymap.set({ "n", "v" }, "<leader>y", [["+y]])
|
|
vim.keymap.set("n", "<leader>Y", [["+Y]])
|
|
vim.keymap.set("n", "<leader>D", [["+D]])
|
|
vim.keymap.set("n", "<leader>p", [["+p]])
|
|
|
|
-- search-and-replace shortcuts
|
|
vim.keymap.set("n", "<leader>rw", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]])
|
|
vim.keymap.set("n", "<leader>ra", [[:%s//g<Left><Left>]])
|
|
|
|
-- toggle expandtab and show message
|
|
vim.keymap.set("n", "<leader>tab", function()
|
|
if vim.opt.expandtab:get() then
|
|
vim.opt.expandtab = false
|
|
print("using actual tabs")
|
|
else
|
|
vim.opt.expandtab = true
|
|
print("using spaces in place of tabs")
|
|
end
|
|
end)
|
|
|
|
-- quicker switching between panes/splits
|
|
vim.keymap.set("n", "<C-h>", [[<C-w>h]])
|
|
vim.keymap.set("n", "<C-j>", [[<C-w>j]])
|
|
vim.keymap.set("n", "<C-k>", [[<C-w>k]])
|
|
vim.keymap.set("n", "<C-l>", [[<C-w>l]])
|
|
|
|
------------------------------------------------------------------------------------------
|
|
-- quickfix TODO: learn about quickfix (:help quickfix), then maybe use these
|
|
|
|
-- vim.keymap.set("n", "<C-k>", "<cmd>cnext<CR>zz")
|
|
-- vim.keymap.set("n", "<C-j>", "<cmd>cprev<CR>zz")
|
|
-- vim.keymap.set("n", "<leader>k", "<cmd>lnext<CR>zz")
|
|
-- vim.keymap.set("n", "<leader>j", "<cmd>lprev<CR>zz")
|
|
|
|
------------------------------------------------------------------------------------------
|
|
-- lsp
|
|
|
|
kmgAutocmd('LspAttach', {
|
|
group = kmGroup,
|
|
callback = function(e)
|
|
local opts = { buffer = e.buf }
|
|
vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts)
|
|
vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts)
|
|
vim.keymap.set("i", "<C-h>", function() vim.lsp.buf.signature_help() end, opts)
|
|
vim.keymap.set("n", "<leader>vdv", function() vim.diagnostic.open_float() end, opts)
|
|
vim.keymap.set("n", "<leader>vdn", function() vim.diagnostic.goto_next() end, opts)
|
|
vim.keymap.set("n", "<leader>vdp", function() vim.diagnostic.goto_prev() end, opts)
|
|
vim.keymap.set("n", "<leader>vws", function() vim.lsp.buf.workspace_symbol() end, opts)
|
|
vim.keymap.set("n", "<leader>vca", function() vim.lsp.buf.code_action() end, opts)
|
|
vim.keymap.set("n", "<leader>vrl", function() vim.lsp.buf.references() end, opts)
|
|
vim.keymap.set("n", "<leader>vrn", function() vim.lsp.buf.rename() end, opts)
|
|
end
|
|
})
|
|
|
|
------------------------------------------------------------------------------------------
|
|
-- plugins
|
|
|
|
-- telescope
|
|
local builtin = require('telescope.builtin')
|
|
local custom_tscope_grep = function()
|
|
builtin.grep_string({ search = vim.fn.input("grep > ")})
|
|
end
|
|
vim.keymap.set('n', '<leader>ft', builtin.live_grep, {
|
|
desc = 'Telescope find text (live_grep)'
|
|
})
|
|
vim.keymap.set('n', '<leader>fT', custom_tscope_grep, {
|
|
desc = 'Telescope find text (grep_string)'
|
|
})
|
|
vim.keymap.set('n', '<leader>fg', builtin.git_files, {
|
|
desc = 'Telescope find git-tracked files'
|
|
})
|
|
vim.keymap.set('n', '<leader>ff', builtin.find_files, { desc = 'Telescope find files' })
|
|
vim.keymap.set('n', '<leader>fb', builtin.buffers, { desc = 'Telescope buffers' })
|
|
vim.keymap.set('n', '<leader>fh', builtin.help_tags, { desc = 'Telescope help tags' })
|
|
|
|
-- harpoon
|
|
local harpoon = require("harpoon")
|
|
vim.keymap.set("n", "<leader>hl", function()
|
|
harpoon.ui:toggle_quick_menu(harpoon:list())
|
|
end)
|
|
vim.keymap.set("n", "<leader>ha", function() harpoon:list():add() end)
|
|
vim.keymap.set("n", "<leader>hA", function() harpoon:list():prepend() end)
|
|
vim.keymap.set("n", "<leader>hn", function() harpoon:list():next() end)
|
|
vim.keymap.set("n", "<leader>hp", function() harpoon:list():prev() end)
|
|
vim.keymap.set("n", "<leader>hz", function() harpoon:list():select(1) end)
|
|
vim.keymap.set("n", "<leader>hx", function() harpoon:list():select(2) end)
|
|
vim.keymap.set("n", "<leader>hc", function() harpoon:list():select(3) end)
|
|
vim.keymap.set("n", "<leader>hv", function() harpoon:list():select(4) end)
|
|
vim.keymap.set("n", "<leader>hZ", function() harpoon:list():replace_at(1) end)
|
|
vim.keymap.set("n", "<leader>hX", function() harpoon:list():replace_at(2) end)
|
|
vim.keymap.set("n", "<leader>hC", function() harpoon:list():replace_at(3) end)
|
|
vim.keymap.set("n", "<leader>hV", function() harpoon:list():replace_at(4) end)
|
|
|
|
-- undotree
|
|
vim.keymap.set("n", "<leader>u", vim.cmd.UndotreeToggle)
|
|
|
|
-- treesitter and treesitter-context
|
|
vim.keymap.set("n", "<leader>tc", function() vim.cmd.TSContext({ "toggle" }) end)
|
|
|
|
-- fugitive (git integration)
|
|
vim.keymap.set("n", "<leader>gG", vim.cmd.Git)
|
|
vim.keymap.set("n", "<leader>gg", ":Git ") -- shortcut, arbitrary git commands
|
|
vim.keymap.set("n", "<leader>ga", function() vim.cmd.Git({ "add %"}) end)
|
|
vim.keymap.set("n", "<leader>gs", function() vim.cmd.Git({ "-p status" }) end)
|
|
vim.keymap.set("n", "<leader>gc", function() vim.cmd.Git({ "commit -a" }) end)
|
|
|
|
-- conform (formatter)
|
|
vim.keymap.set("n", "<leader>fmt", function()
|
|
require("conform").format({ bufnr = 0 })
|
|
end)
|
|
|