local bind = require("keymap.bind") local map_cr = bind.map_cr local map_cu = bind.map_cu local map_cmd = bind.map_cmd local map_callback = bind.map_callback local et = bind.escape_termcode local mappings = { builtins = { -- Builtins: Save & Quit ["n|"] = map_cu("write"):with_noremap():with_silent():with_desc("edit: Save file"), ["n|"] = map_cr("wq"):with_desc("edit: Save file and quit"), ["n|"] = map_cr("q!"):with_desc("edit: Force quit"), -- Builtins: Insert mode ["i|"] = map_cmd("u"):with_noremap():with_desc("edit: Delete previous block"), ["i|"] = map_cmd(""):with_noremap():with_desc("edit: Move cursor to left"), ["i|"] = map_cmd("^i"):with_noremap():with_desc("edit: Move cursor to line start"), ["i|"] = map_cmd(":w"):with_desc("edit: Save file"), ["i|"] = map_cmd(":wq"):with_desc("edit: Save file and quit"), -- Builtins: Command mode ["c|"] = map_cmd(""):with_noremap():with_desc("edit: Left"), ["c|"] = map_cmd(""):with_noremap():with_desc("edit: Right"), ["c|"] = map_cmd(""):with_noremap():with_desc("edit: Home"), ["c|"] = map_cmd(""):with_noremap():with_desc("edit: End"), ["c|"] = map_cmd(""):with_noremap():with_desc("edit: Delete"), ["c|"] = map_cmd(""):with_noremap():with_desc("edit: Backspace"), ["c|"] = map_cmd([[=expand("%:p:h") . "/" ]]) :with_noremap() :with_desc("edit: Complete path of current file"), -- Builtins: Visual mode ["v|J"] = map_cmd(":m '>+1gv=gv"):with_desc("edit: Move this line down"), ["v|K"] = map_cmd(":m '<-2gv=gv"):with_desc("edit: Move this line up"), ["v|<"] = map_cmd(""] = map_cmd(">gv"):with_desc("edit: Increase indent"), -- Builtins: "Suckless" - named after r/suckless ["n|Y"] = map_cmd("y$"):with_desc("edit: Yank text to EOL"), ["n|D"] = map_cmd("d$"):with_desc("edit: Delete text to EOL"), ["n|n"] = map_cmd("nzzzv"):with_noremap():with_desc("edit: Next search result"), ["n|N"] = map_cmd("Nzzzv"):with_noremap():with_desc("edit: Prev search result"), ["n|J"] = map_cmd("mzJ`z"):with_noremap():with_desc("edit: Join next line"), ["n|"] = map_cr("normal za"):with_noremap():with_silent():with_desc("edit: Toggle code fold"), ["n|"] = map_callback(function() _flash_esc_or_noh() end) :with_noremap() :with_silent() :with_desc("edit: Clear search highlight"), ["n|o"] = map_cr("setlocal spell! spelllang=en_us"):with_desc("edit: Toggle spell check"), }, plugins = { -- Plugin: persisted.nvim ["n|ss"] = map_cu("SessionSave"):with_noremap():with_silent():with_desc("session: Save"), ["n|sl"] = map_cu("SessionLoad"):with_noremap():with_silent():with_desc("session: Load current"), ["n|sd"] = map_cu("SessionDelete"):with_noremap():with_silent():with_desc("session: Delete"), -- Plugin: comment.nvim ["n|gcc"] = map_callback(function() return vim.v.count == 0 and et("(comment_toggle_linewise_current)") or et("(comment_toggle_linewise_count)") end) :with_silent() :with_noremap() :with_expr() :with_desc("edit: Toggle comment for line"), ["n|gbc"] = map_callback(function() return vim.v.count == 0 and et("(comment_toggle_blockwise_current)") or et("(comment_toggle_blockwise_count)") end) :with_silent() :with_noremap() :with_expr() :with_desc("edit: Toggle comment for block"), ["n|gc"] = map_cmd("(comment_toggle_linewise)") :with_silent() :with_noremap() :with_desc("edit: Toggle comment for line with operator"), ["n|gb"] = map_cmd("(comment_toggle_blockwise)") :with_silent() :with_noremap() :with_desc("edit: Toggle comment for block with operator"), ["x|gc"] = map_cmd("(comment_toggle_linewise_visual)") :with_silent() :with_noremap() :with_desc("edit: Toggle comment for line with selection"), ["x|gb"] = map_cmd("(comment_toggle_blockwise_visual)") :with_silent() :with_noremap() :with_desc("edit: Toggle comment for block with selection"), -- Plugin: diffview.nvim ["n|gd"] = map_cr("DiffviewOpen"):with_silent():with_noremap():with_desc("git: Show diff"), ["n|gD"] = map_cr("DiffviewClose"):with_silent():with_noremap():with_desc("git: Close diff"), -- Plugin: hop.nvim ["nv|w"] = map_cmd("HopWordMW"):with_noremap():with_desc("jump: Goto word"), ["nv|j"] = map_cmd("HopLineMW"):with_noremap():with_desc("jump: Goto line"), ["nv|k"] = map_cmd("HopLineMW"):with_noremap():with_desc("jump: Goto line"), ["nv|c"] = map_cmd("HopChar1MW"):with_noremap():with_desc("jump: Goto one char"), ["nv|C"] = map_cmd("HopChar2MW"):with_noremap():with_desc("jump: Goto two chars"), -- Plugin: grug-far ["n|Ss"] = map_callback(function() require("grug-far").open() end) :with_silent() :with_noremap() :with_desc("editn: Toggle search & replace panel"), ["n|Sp"] = map_callback(function() require("grug-far").open({ prefills = { search = vim.fn.expand("") } }) end) :with_silent() :with_noremap() :with_desc("editn: search&replace current word (project)"), ["v|Sp"] = map_callback(function() require("grug-far").with_visual_selection() end) :with_silent() :with_noremap() :with_desc("edit: search & replace current word (project)"), ["n|Sf"] = map_callback(function() require("grug-far").open({ prefills = { paths = vim.fn.expand("%") } }) end) :with_silent() :with_noremap() :with_desc("editn: search & replace current word (file)"), -- Plugin: nvim-treehopper ["o|m"] = map_cu("lua require('tsht').nodes()"):with_silent():with_desc("jump: Operate across syntax tree"), -- Plugin: suda.vim ["n|"] = map_cu("SudaWrite"):with_silent():with_noremap():with_desc("editn: Save file using sudo"), }, } bind.nvim_load_mapping(mappings.builtins) bind.nvim_load_mapping(mappings.plugins)