125 lines
5.4 KiB
Lua
125 lines
5.4 KiB
Lua
local map = vim.keymap.set
|
|
|
|
-- -- better up/down
|
|
-- map({ "n", "x" }, "j", "v:count == 0 ? 'gj' : 'j'", { desc = "Down", expr = true, silent = true })
|
|
-- map({ "n", "x" }, "<Down>", "v:count == 0 ? 'gj' : 'j'", { desc = "Down", expr = true, silent = true })
|
|
-- map({ "n", "x" }, "k", "v:count == 0 ? 'gk' : 'k'", { desc = "Up", expr = true, silent = true })
|
|
-- map({ "n", "x" }, "<Up>", "v:count == 0 ? 'gk' : 'k'", { desc = "Up", expr = true, silent = true })
|
|
|
|
-- Move to window using the <ctrl> hjkl keys
|
|
map("n", "<C-h>", "<C-w>h", { desc = "Go to Left Window", remap = true })
|
|
map("n", "<C-j>", "<C-w>j", { desc = "Go to Lower Window", remap = true })
|
|
map("n", "<C-k>", "<C-w>k", { desc = "Go to Upper Window", remap = true })
|
|
map("n", "<C-l>", "<C-w>l", { desc = "Go to Right Window", remap = true })
|
|
|
|
-- buffers
|
|
map("n", "<leader>bd", function()
|
|
Snacks.bufdelete()
|
|
end, { desc = "Delete Buffer" })
|
|
map("n", "<leader>bD", "<cmd>:bd<cr>", { desc = "Delete Buffer and Window" })
|
|
|
|
-- Clear search and stop snippet on escape
|
|
-- map({ "i", "n", "s" }, "<esc>", function()
|
|
-- vim.cmd("noh")
|
|
-- LazyVim.cmp.actions.snippet_stop()
|
|
-- return "<esc>"
|
|
-- end, { expr = true, desc = "Escape and Clear hlsearch" })
|
|
|
|
-- Clear search, diff update and redraw
|
|
-- taken from runtime/lua/_editor.lua
|
|
map(
|
|
"n",
|
|
"<leader>ur",
|
|
"<Cmd>nohlsearch<Bar>diffupdate<Bar>normal! <C-L><CR>",
|
|
{ desc = "Redraw / Clear hlsearch / Diff Update" }
|
|
)
|
|
|
|
-- https://github.com/mhinz/vim-galore#saner-behavior-of-n-and-n
|
|
map("n", "n", "'Nn'[v:searchforward].'zv'", { expr = true, desc = "Next Search Result" })
|
|
map("x", "n", "'Nn'[v:searchforward]", { expr = true, desc = "Next Search Result" })
|
|
map("o", "n", "'Nn'[v:searchforward]", { expr = true, desc = "Next Search Result" })
|
|
map("n", "N", "'nN'[v:searchforward].'zv'", { expr = true, desc = "Prev Search Result" })
|
|
map("x", "N", "'nN'[v:searchforward]", { expr = true, desc = "Prev Search Result" })
|
|
map("o", "N", "'nN'[v:searchforward]", { expr = true, desc = "Prev Search Result" })
|
|
|
|
-- Add undo break-points
|
|
map("i", ",", ",<c-g>u")
|
|
map("i", ".", ".<c-g>u")
|
|
map("i", ";", ";<c-g>u")
|
|
|
|
--keywordprg
|
|
map("n", "<leader>K", "<cmd>norm! K<cr>", { desc = "Keywordprg" })
|
|
|
|
-- better indenting
|
|
map("v", "<", "<gv")
|
|
map("v", ">", ">gv")
|
|
|
|
-- commenting
|
|
map("n", "gco", "o<esc>Vcx<esc><cmd>normal gcc<cr>fxa<bs>", { desc = "Add Comment Below" })
|
|
map("n", "gcO", "O<esc>Vcx<esc><cmd>normal gcc<cr>fxa<bs>", { desc = "Add Comment Above" })
|
|
|
|
-- lazy
|
|
map("n", "<leader>l", "<cmd>Lazy<cr>", { desc = "Lazy" })
|
|
|
|
map("n", "<leader>xl", "<cmd>lopen<cr>", { desc = "Location List" })
|
|
map("n", "<leader>xq", "<cmd>copen<cr>", { desc = "Quickfix List" })
|
|
|
|
map("n", "[q", vim.cmd.cprev, { desc = "Previous Quickfix" })
|
|
map("n", "]q", vim.cmd.cnext, { desc = "Next Quickfix" })
|
|
|
|
-- diagnostic
|
|
local diagnostic_goto = function(next, severity)
|
|
local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev
|
|
severity = severity and vim.diagnostic.severity[severity] or nil
|
|
return function()
|
|
go({ severity = severity })
|
|
end
|
|
end
|
|
map("n", "<leader>cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" })
|
|
map("n", "]d", diagnostic_goto(true), { desc = "Next Diagnostic" })
|
|
map("n", "[d", diagnostic_goto(false), { desc = "Prev Diagnostic" })
|
|
map("n", "]e", diagnostic_goto(true, "ERROR"), { desc = "Next Error" })
|
|
map("n", "[e", diagnostic_goto(false, "ERROR"), { desc = "Prev Error" })
|
|
map("n", "]w", diagnostic_goto(true, "WARN"), { desc = "Next Warning" })
|
|
map("n", "[w", diagnostic_goto(false, "WARN"), { desc = "Prev Warning" })
|
|
|
|
-- stylua: ignore start
|
|
|
|
if vim.lsp.inlay_hint then
|
|
Snacks.toggle.inlay_hints():map("<leader>uh")
|
|
end
|
|
|
|
map("n", "<leader>gb", function() Snacks.git.blame_line() end, { desc = "Git Blame Line" })
|
|
map({ "n", "x" }, "<leader>gB", function() Snacks.gitbrowse() end, { desc = "Git Browse (open)" })
|
|
-- map({ "n", "x" }, "<leader>gY", function()
|
|
-- Snacks.gitbrowse({ open = function(url) vim.fn.setreg("+", url) end, notify = false })
|
|
-- end, { desc = "Git Browse (copy)" })
|
|
|
|
-- highlights under cursor
|
|
map("n", "<leader>ui", vim.show_pos, { desc = "Inspect Pos" })
|
|
map("n", "<leader>uI", "<cmd>InspectTree<cr>", { desc = "Inspect Tree" })
|
|
|
|
-- floating terminal
|
|
map("n", "<leader>fT", function() Snacks.terminal() end, { desc = "Terminal (cwd)" })
|
|
-- map("n", "<leader>ft", function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" })
|
|
-- map("n", "<c-/>", function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" })
|
|
|
|
-- Terminal Mappings
|
|
map("t", "<C-/>", "<cmd>close<cr>", { desc = "Hide Terminal" })
|
|
map("t", "<c-_>", "<cmd>close<cr>", { desc = "which_key_ignore" })
|
|
|
|
-- windows
|
|
map("n", "<leader>w", "<c-w>", { desc = "Windows", remap = true })
|
|
map("n", "<leader>-", "<C-W>s", { desc = "Split Window Below", remap = true })
|
|
map("n", "<leader>|", "<C-W>v", { desc = "Split Window Right", remap = true })
|
|
map("n", "<leader>wd", "<C-W>c", { desc = "Delete Window", remap = true })
|
|
|
|
-- native snippets. only needed on < 0.11, as 0.11 creates these by default
|
|
if vim.fn.has("nvim-0.11") == 0 then
|
|
map("s", "<Tab>", function()
|
|
return vim.snippet.active({ direction = 1 }) and "<cmd>lua vim.snippet.jump(1)<cr>" or "<Tab>"
|
|
end, { expr = true, desc = "Jump Next" })
|
|
map({ "i", "s" }, "<S-Tab>", function()
|
|
return vim.snippet.active({ direction = -1 }) and "<cmd>lua vim.snippet.jump(-1)<cr>" or "<S-Tab>"
|
|
end, { expr = true, desc = "Jump Previous" })
|
|
end
|