local key = require("utils.map") local cmd, opts = key.cmd, key.new_opts local nosilent, expr = opts(key.nosilent), opts(key.expr) local api = vim.api -- normal {{{1 key.nmap({ -- buffers and windows {{{2 { "", cmd("bn") }, { "", cmd("bp") }, { ";", "ls!:buf", nosilent }, { "bd", cmd("bd") }, { "bD", cmd('%bd|e #|norm `"') }, -- 2}}} -- movements {{{2 { "j", "m .+1==" }, { "k", "m .-2==" }, { "gl", "$" }, { "n", "nzzzv" }, { "N", "Nzzzv" }, { "J", "mzJ`z" }, { "]", "gt" }, { "[", "gT" }, -- { "", 'd$o""p==k$' }, -- 2}}} -- misc {{{2 { "gh", ":helpgrep ", nosilent }, { "", cmd("setlocal spell!") }, { "gV", "`[v`]" }, { "s", function() require("utils.tmux_send").send() end, }, -- { -- "d", -- function() -- local start = api.nvim_get_current_buf() -- vim.cmd("vnew | set buftype=nofile | read ++edit # | 0d_ | diffthis") -- local scratch = api.nvim_get_current_buf() -- vim.cmd("wincmd p | diffthis") -- for _, buf in ipairs({ scratch, start }) do -- vim.keymap.set("n", "q", function() -- api.nvim_buf_delete(scratch, { force = true }) -- vim.keymap.del("n", "q", { buffer = start }) -- end, { buffer = buf }) -- end -- end, -- opts("Get relative diff for current file"), -- }, { "w", function() local session = vim.fs.find("Session.vim", { upward = true, stop = os.getenv("HOME"), path = vim.uv.cwd(), }) local mks = true if #session < 1 then vim.ui.input({ prompt = "Create session file? [y/n] ", }, function(input) if not input or input ~= "y" then mks = false end end) end if mks then vim.cmd([[:wall | exe "mksession! " .. v:this_session]]) vim.notify("Session saved", vim.log.levels.INFO) end end, }, }) -- 2}}} -- 1}}} -- visual {{{1 key.xmap({ { "<", "", ">gv" }, { "J", ":m '>+1gv=gv" }, { "K", ":m '<-2gv=gv" }, { "v", "yP" }, }) -- 1}}} -- insert {{{1 -- 1}}} -- command {{{1 key.cmap({ { "", "", nosilent }, { "", "", nosilent }, { "", "", nosilent }, { "", "", nosilent }, { "", "", nosilent }, { "", "", nosilent }, { "%%", function() return vim.fn.getcmdtype() == ":" and string.format("%s/", vim.fn.expand("%:h")) or "%%" end, opts(key.expr, key.nosilent, "Append to relative path"), }, }) -- 1}}} -- terminal {{{1 key.nmap({ "t", cmd("tabnew term://bash") }) key.tmap({ "", "" }) -- 1}}} -- yanking {{{1 -- Retain cursor postion after yanking local get_curpos = function() return api.nvim_win_get_cursor(0) end local curpos key.nxmap({ -- stylua: ignore start { "y", function() curpos = get_curpos() return "y" end, expr }, { "", function() curpos = get_curpos() return '"+y' end, expr }, { "", '"+yy' }, -- stylua: ignore end }) vim.keymap.set("n", "Y", function() curpos = get_curpos() return "y$" end, { expr = true }) api.nvim_create_autocmd("TextYankPost", { group = api.nvim_create_augroup("_core.keymap", { clear = true }), callback = function() if vim.v.event.operator == "y" and curpos then api.nvim_win_set_cursor(0, curpos) end end, }) -- 1}}}