local utils = require("utils") local g = vim.g g.mapleader = " " g.maplocalleader = " " local move_up = { "v:count || mode(1)[0:1] == \"no\" ? \"k\" : \"gk\"", { expr = true } } local move_down = { "v:count || mode(1)[0:1] == \"no\" ? \"j\" : \"gj\"", { expr = true } } utils.foreach({ { "n", { { "K", "", }, { "grn", "", }, { "gra", "", }, { "grr", "", }, { "gri", "", }, { "gO", "", }, -- Navigation { "", "h", }, { "", "j", }, { "", "k", }, { "", "l", }, { "", "h", }, { "", "j", }, { "", "k", }, { "", "l", }, -- Window { "", "q", }, -- Disable current highlights { "", " noh ", }, -- Copies the entire file { "", ":%y+", { silent = true } }, -- Allow moving the cursor through wrapped lines with 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 { "", move_up[1], move_up[2], }, { "", move_down[1], move_down[2], }, { "j", move_down[1], move_down[2], }, { "k", move_up[1], move_up[2], }, -- Maps to remove { "", "", }, -- Marks are less frequently used than leaping, also, less relevant with arrow and fzf navigation. -- Prioritize regular m for leaping, and m for setting marks. { "m", "m", }, { "[d", function() vim.diagnostic.jump({ count = -1, float = false }) end }, { "]d", function() vim.diagnostic.jump({ count = 1, float = false }) end }, { "gcp", function() for _, cmd in ipairs({ "\"zyy", "gcc", "\"zp", }) do vim.cmd.normal({ cmd }) end end }, { "", ":$tabnew %", { silent = true }, }, { "1", ":1tabn", { silent = true }, }, { "2", ":2tabn", { silent = true }, }, { "3", ":3tabn", { silent = true }, }, { "4", ":4tabn", { silent = true }, }, { "5", ":5tabn", { silent = true }, }, { "6", ":6tabn", { silent = true }, }, { "7", ":7tabn", { silent = true }, }, { "8", ":8tabn", { silent = true }, }, { "9", ":9tabn", { silent = true }, }, } }, { "v", { { "", move_up[1], move_up[2], }, { "", move_down[1], move_down[2], }, { "j", move_down[1], move_down[2], }, { "k", move_up[1], move_up[2], }, { "", ">gv", }, { "", "m for setting marks. { "m", "m", }, }, }, { "x", { { "", move_up[1], move_up[2], }, { "", move_down[1], move_down[2], }, { "j", move_down[1], move_down[2], }, { "k", move_up[1], move_up[2], }, { "p", "p:let @+=@0:let @\"=@0", { silent = true }, }, } }, { "t", { { "", "", }, } }, }, function(mode_mapping) local mode = mode_mapping[1] local mappings = mode_mapping[2] utils.set_keymap_list(mappings, mode) end)