-- n, v, i, t = mode names local M = {} M.general = { i = { -- go to beginning and end [""] = { "^i", "Beginning of line" }, [""] = { "", "End of line" }, -- navigate within insert mode [""] = { "", "Move left" }, [""] = { "", "Move right" }, [""] = { "", "Move down" }, [""] = { "", "Move up" }, }, n = { ["n"] = { ":noh ", "Clear highlights" }, ["rr"] = { ":source $MYVIMRC", "Reload config file" }, [""] = { " noh ", "Clear highlights" }, -- switch between windows [""] = { "h", "Window left" }, [""] = { "l", "Window right" }, [""] = { "j", "Window down" }, [""] = { "k", "Window up" }, -- [""] = { " tab Git diff %", "Git diff this file" }, [""] = { " DiffviewOpen -- %", "Git diff this file" }, [""] = { " DiffviewFileHistory %", "Git history diff this file" }, [""] = { " DiffviewClose", "Close git diff" }, -- [""] = { " tab Git diff", "Git diff global" }, [""] = { " DiffviewOpen", "Git diff global" }, [""] = { ":DiffviewOpen HEAD~", "Show last N commits" }, ["gd"] = { " DiffviewClose", "Git diff close" }, -- save [""] = { " w ", "Save file" }, -- Copy all -- [""] = { " %y+ ", "Copy whole file" }, -- Quit [""] = { " q! ", "Force quit window" }, -- line numbers -- ["n"] = { " set nu! ", "Toggle line number" }, -- ["rn"] = { " set rnu! ", "Toggle relative number" }, -- allow moving the cursor through wrapped lines with j, k, and -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/ -- empty mode is same as using :map -- also don't use g[j|k] when in operator pending mode, so it doesn't alter d, y or c behaviour -- ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, -- ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, -- [""] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, -- [""] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, ["y"] = {" :w! /tmp/vimtmp", "Save into a global tmp file"}, ["p"] = {" :r! cat /tmp/vimtmp", "Restore from the global tmp file"}, -- new buffer -- ["b"] = { " enew ", "New buffer" }, -- ["ch"] = { " NvCheatsheet ", "Mapping cheatsheet" }, ["fm"] = { function() vim.lsp.buf.format { async = true } end, "LSP formatting", }, }, t = { [""] = { vim.api.nvim_replace_termcodes("", true, true, true), "Escape terminal mode" }, }, v = { -- [""] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, -- [""] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, ["<"] = { ""] = { ">gv", "Indent line" }, }, x = { -- ["j"] = { 'v:count || mode(1)[0:1] == "no" ? "j" : "gj"', "Move down", opts = { expr = true } }, -- ["k"] = { 'v:count || mode(1)[0:1] == "no" ? "k" : "gk"', "Move up", opts = { expr = true } }, -- Don't copy the replaced text after pasting in visual mode -- https://vim.fandom.com/wiki/Replace_a_word_with_yanked_text#alternative_mapping_for_paste ["p"] = { 'p:let @+=@0:let @"=@0', "Dont copy replaced text", opts = { silent = true } }, }, } M.customstuffs = { n = { [""] = { "o", "Insert new line below" }, [""] = { "O", "Insert new line above" }, [""] = { " vertical topleft Git vertical resize 50", "Show Git status on a left pane" }, [""] = { " tabprevious", "Previous tab" }, [""] = { " tabnext", "Next tab" }, [""] = { " Flog -all", "Show git tree" }, [""] = { " tab Git show -", "Git show N last commits" }, [""] = { " TagbarToggle", "Show tagbar" }, ["ra"] = { " call VrcQuery()", "Call REST endpoint" }, ["dl"] = { "0d$", "Delete line from start" }, ["gpu"] = { " Git pull", "Git pull" }, ["gpf"] = { ":Git push ", "Git push with option" }, ["gmm"] = { " Git merge master", "Git merge master" }, ["gmi"] = { ":Git merge ", "Git merge ..." }, ["ga"] = { ":Git commit -a --amend --no-edit --no-verify", "Git commit -a --amend --no-edit --no-verify" }, ["gnb"] = { ":Git checkout -b ", "Checkout to a new branch" }, ["gri"] = { ":Git rebase -i HEAD~", "Git rebase interactive from HEAD" }, ["grm"] = { ":Git rebase -i master", "Git rebase interactive from master" }, ["grr"] = { ":Git rebase -i ", "Git rebase interactive from