diff --git a/.config/nvim/lua/colemak-dh.lua b/.config/nvim/lua/colemak-dh.lua new file mode 100644 index 00000000..0592c536 --- /dev/null +++ b/.config/nvim/lua/colemak-dh.lua @@ -0,0 +1,151 @@ +local M = {} + +local map = vim.keymap.set +local wk = require("which-key") + +local wk_presets = { + text_objects = { + mode = { "o", "x" }, + { "a", group = "around" }, + { 'a"', desc = '" string' }, + { "a'", desc = "' string" }, + { "a(", desc = "[(]) block" }, + { "a)", desc = "[(]) block" }, + { "a<", desc = "<> block" }, + { "a>", desc = "<> block" }, + { "aB", desc = "[{]} block" }, + { "aW", desc = "WORD with ws" }, + { "a[", desc = "[] block" }, + { "a]", desc = "[] block" }, + { "a`", desc = "` string" }, + { "ab", desc = "[(]) block" }, + { "ap", desc = "paragraph" }, + { "as", desc = "sentence" }, + { "at", desc = "tag block" }, + { "aw", desc = "word with ws" }, + { "a{", desc = "[{]} block" }, + { "a}", desc = "[{]} block" }, + { "l", group = "inside" }, + { 'l"', desc = 'inner " string' }, + { "l'", desc = "inner ' string" }, + { "l(", desc = "inner [(])" }, + { "l)", desc = "inner [(])" }, + { "l<", desc = "inner <>" }, + { "l>", desc = "inner <>" }, + { "lB", desc = "inner [{]}" }, + { "lW", desc = "inner WORD" }, + { "l[", desc = "inner []" }, + { "l]", desc = "inner []" }, + { "l`", desc = "inner ` string" }, + { "lb", desc = "inner [(])" }, + { "lp", desc = "inner paragraph" }, + { "ls", desc = "inner sentence" }, + { "lt", desc = "inner tag block" }, + { "lw", desc = "inner word" }, + { "l{", desc = "inner [{]}" }, + { "l}", desc = "inner [{]}" }, + }, + motions = { + mode = { "o", "x", "n" }, + { "$", desc = "End of line" }, + { "%", desc = "Matching (){}[]" }, + { "0", desc = "Start of line" }, + { "F", desc = "Move to prev char" }, + { "G", desc = "Last line" }, + { "T", desc = "Move before prev char" }, + { "^", desc = "Start of line (non ws)" }, + { "b", desc = "Prev word" }, + { "k", desc = "Next end of word" }, + { "f", desc = "Move to next char" }, + { "gh", desc = "Prev end of word" }, + { "gg", desc = "First line" }, + { "m", desc = "Left" }, + { "n", desc = "Down" }, + { "e", desc = "Up" }, + { "i", desc = "Right" }, + { "t", desc = "Move before next char" }, + { "w", desc = "Next word" }, + { "{", desc = "Prev empty line" }, + { "}", desc = "Next empty line" }, + { ";", desc = "Next ftFT" }, + { ",", desc = "Prev ftFT" }, + { "/", desc = "Search forward" }, + { "?", desc = "Search backward" }, + { "B", desc = "Prev WORD" }, + { "H", desc = "Next end of WORD" }, + { "W", desc = "Next WORD" }, + }, + windows = { + mode = { "n", "x" }, + { "", group = "window" }, + { "+", desc = "Increase height" }, + { "-", desc = "Decrease height" }, + { "<", desc = "Decrease width" }, + { "=", desc = "Equally high and wide" }, + { ">", desc = "Increase width" }, + { "T", desc = "Break out into a new tab" }, + { "_", desc = "Max out the height" }, + { "m", desc = "Go to the left window" }, + { "n", desc = "Go to the down window" }, + { "e", desc = "Go to the up window" }, + { "i", desc = "Go to the right window" }, + { "o", desc = "Close all other windows" }, + { "q", desc = "Quit a window" }, + { "s", desc = "Split window" }, + { "v", desc = "Split window vertically" }, + { "w", desc = "Switch windows" }, + { "x", desc = "Swap current with next" }, + { "|", desc = "Max out the width" }, + }, +} + +M.fix_window_nav = function() + map({ "n", "x" }, "", "h", { desc = "Switch to left window", remap = false }) + map({ "n", "x" }, "", "j", { desc = "Switch to down window", remap = false }) + map({ "n", "x" }, "", "k", { desc = "Switch to up window", remap = false }) + map({ "n", "x" }, "", "l", { desc = "Switch to right window", remap = false }) +end + +M.fix_whichkey_presets = function() + -- print(vim.inspect(wk_presets)) + for _, tbl in pairs(wk_presets) do + wk.add(tbl) + end +end + +M.fix_hjkl = function() + map({ "n" }, "M", "bprevious", { desc = "Previous Buffer", remap = false }) + map({ "n", "x", "o" }, "", "v:count == 0 ? 'gj' : 'j'", { expr = true, desc = "Down", remap = false }) + map({ "n", "x", "o" }, "m", "h", { desc = "Left", remap = false }) + map({ "n", "x", "o" }, "n", "v:count == 0 ? 'gj' : 'j'", { expr = true, desc = "Down", remap = false }) + map({ "n", "x", "o" }, "N", "J", { desc = "Down", remap = false }) + map({ "n", "x", "o" }, "e", "v:count == 0 ? 'gk' : 'k'", { expr = true, desc = "Up", remap = false }) + map({ "n", "x", "o" }, "", "v:count == 0 ? 'gk' : 'k'", { expr = true, desc = "Up", remap = false }) + map({ "n", "x", "o" }, "E", "K", { desc = "Up", remap = false }) + map({ "n", "x", "o" }, "i", "l", { desc = "Right", remap = false }) + map({ "n" }, "I", "bprevious", { desc = "Next Buffer", remap = false }) + + map({ "n", "x", "o" }, "l", "i", { desc = "Insert", remap = false }) + map({ "n", "x", "o" }, "L", "I", { desc = "Insert Start Of Line", remap = false }) + map({ "n", "x", "o" }, "k", "m", { desc = "Marker", remap = false }) + map({ "n", "x", "o" }, "K", "M", { desc = "Marker", remap = false }) + map({ "n", "x", "o" }, "h", "e", { desc = "End of word", remap = false }) + map({ "n", "x", "o" }, "H", "E", { desc = "End of WORD", remap = false }) + + map("n", "j", "'Nn'[v:searchforward].'zv'", { expr = true, desc = "Next Search Result" }) + map("x", "j", "'Nn'[v:searchforward]", { expr = true, desc = "Next Search Result" }) + map("o", "j", "'Nn'[v:searchforward]", { expr = true, desc = "Next Search Result" }) + map("n", "J", "'nN'[v:searchforward].'zv'", { expr = true, desc = "Prev Search Result" }) + map("x", "J", "'nN'[v:searchforward]", { expr = true, desc = "Prev Search Result" }) + map("o", "J", "'nN'[v:searchforward]", { expr = true, desc = "Prev Search Result" }) + -- map({ "n", "x", "o" }, "j", "n", { desc = "Repeat search", remap = false }) + -- map({ "n", "x", "o" }, "J", "N", { desc = "Repeat search backwards", remap = false }) +end + +M.fix_all = function() + M.fix_whichkey_presets() + M.fix_hjkl() + M.fix_window_nav() +end + +return M diff --git a/.config/nvim/lua/config/keymaps-pre-colemak.bak b/.config/nvim/lua/config/keymaps-pre-colemak.bak new file mode 100644 index 00000000..859c7adc --- /dev/null +++ b/.config/nvim/lua/config/keymaps-pre-colemak.bak @@ -0,0 +1,117 @@ +-- Keymaps are automatically loaded on the VeryLazy event +-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua +-- Add any additional keymaps here +local map = vim.keymap.set +local wk = require("which-key") + +vim.keymap.set({ "i", "n" }, "", "") + +local dirmap = { + up = "w0", + down = "w$", +} + +-- Bind arrows to hjkl to my colemak-dh motions work as expected +map({ "n", "x" }, "", "k", { desc = "Up", remap = true }) +map({ "n", "x" }, "", "j", { desc = "Down", remap = true }) +map({ "n", "x" }, "", "h", { desc = "Left", remap = true }) +map({ "n", "x" }, "", "l", { desc = "Right", remap = true }) + +map({ "n", "t", "i" }, "", " TmuxNavigateLeft", { desc = "Switch Window Left", remap = true }) +map({ "n", "t", "i" }, "", " TmuxNavigateRight", { desc = "Switch Window Right", remap = true }) +map({ "n", "t", "i" }, "", " TmuxNavigateUp", { remap = true }) +map({ "n", "t", "i" }, "", " TmuxNavigateDown", { desc = "Switch Window Down", remap = true }) + +map({ "x" }, "", "", { remap = true }) +map({ "x" }, "", "", { remap = true }) +map({ "n", "x", "v" }, "", "", { remap = true }) +map({ "n", "x", "v" }, "", "", { remap = true }) +map({ "n" }, "", "[b", { desc = "Previous Buffer", remap = true }) +map({ "n" }, "", "]b", { desc = "Next Buffer", remap = true }) +map({ "n" }, "", "5j", { remap = true }) +map({ "n" }, "", "5k", { remap = true }) +map({ "i" }, "", "", { desc = "Escape insert mode", remap = true }) + +-- better navigation +map({ "n" }, "", "zz", { remap = false }) +map({ "n" }, "", "zz", { remap = false }) +map({ "n" }, "n", "nzz", { remap = false }) +map({ "n" }, "N", "Nzz", { remap = false }) +map({ "n" }, "", "zz", { remap = false }) +map({ "n" }, "", "zz", { remap = false }) +map({ "n", "x" }, "", "$", { remap = false }) +map({ "n", "x" }, "", "0", { remap = false }) + +-- easily access null register +map({ "n", "x" }, "n", '"_', { remap = false, silent = true, desc = "Null Register" }) + +-- remove the default lazyvim, and also swap H and L (for move cursor) to make more sense on colemak +vim.keymap.del({ "n" }, "") +vim.keymap.del({ "n" }, "") +map({ "n" }, "", "L", { remap = false }) +map({ "n" }, "", "H", { remap = false }) +-- better delete and put + +-- better quit +map("n", "", "qa", { desc = "Quit All" }) + +map("n", "", function() + Snacks.bufdelete() +end, { remap = true, desc = "Delete Buffer" }) + +-- yank history +map({ "n", "x" }, "fp", function() + if LazyVim.pick.picker.name == "telescope" then + require("telescope").extensions.yank_history.yank_history({}) + else + vim.cmd([[YankyRingHistory]]) + end +end, { desc = "Open Yank History", remap = false }) + +-- TODO: add leader + y for save current buf, leader + Y to write all +map({ "n", "x" }, "y", ":w", { desc = "Save" }) +map({ "n", "x" }, "Y", ":wa", { desc = "Save All" }) + +-- Zen Mode +map("n", "uz", "ZenMode", { desc = "Toggle Zen Mode" }) + +-- Source Current File +map("n", "x", "source %", { desc = "Source current file" }) + +-- Obsidian +-- o is the prefix for all Obsidian bindings + +wk.add({ + { "o", group = "Obsidian" }, + { "od", group = "Daily Note" }, + { "ol", group = "Follow Link" }, +}) + +map("n", "oo", "ObsidianQuickSwitch", { desc = "Obsidian Quick Switch" }) +map("n", "o/", "ObsidianSearch", { desc = "Obsidian Grep" }) +-- This one will open the command line and let the user type the arg +map("n", "on", function() + require("command-key").command("ObsidianNew") +end, { desc = "Obsidian New Note" }) +map("n", "ob", "ObsidianBacklinks", { desc = "Obsidian Backlinks" }) +map("n", "ot", "ObsidianTags", { desc = "Obsidian Tags" }) +map("n", "olv", "ObsidianFollowLink vsplit", { desc = "Obsidian Follow Link Vsplit" }) +map("n", "olh", "ObsidianFollowLink hsplit", { desc = "Obsidian Follow Link Hsplit" }) +map("n", "odt", "ObsidianToday", { desc = "Obsidian Open Today's Daily" }) +map("n", "ods", "ObsidianDailies", { desc = "Obsidian Search Dailies" }) +map("n", "ols", "ObsidianLinks", { desc = "Obsidian Search Links" }) +map("x", "oll", function() + require("command-key").command("ObsidianLink") +end, { desc = "Obsidian Link Visual To Existing Note" }) +map("x", "oln", function() + require("command-key").command("ObsidianLinkNew") +end, { desc = "Obsidian Link Visual To New Note" }) +map("x", "ole", function() + require("command-key").command("ObsidianExtractNote") +end, { desc = "Obsidian Copy Selection To New Note & Link" }) + +map("n", "or", function() + require("command-key").command("ObsidianRename") +end, { desc = "Obsidian Rename" }) +map("n", "oc", "ObsidianTOC", { desc = "Obsidian Table Of Contents" }) +-- TODO: Add binds for templates diff --git a/.config/nvim/lua/config/keymaps.lua b/.config/nvim/lua/config/keymaps.lua index 859c7adc..dd06293a 100644 --- a/.config/nvim/lua/config/keymaps.lua +++ b/.config/nvim/lua/config/keymaps.lua @@ -3,53 +3,49 @@ -- Add any additional keymaps here local map = vim.keymap.set local wk = require("which-key") +local cmdh = require("colemak-dh") vim.keymap.set({ "i", "n" }, "", "") -local dirmap = { - up = "w0", - down = "w$", -} - -- Bind arrows to hjkl to my colemak-dh motions work as expected -map({ "n", "x" }, "", "k", { desc = "Up", remap = true }) -map({ "n", "x" }, "", "j", { desc = "Down", remap = true }) -map({ "n", "x" }, "", "h", { desc = "Left", remap = true }) -map({ "n", "x" }, "", "l", { desc = "Right", remap = true }) +-- map({ "n", "x" }, "", "k", { desc = "Up", remap = true }) +-- map({ "n", "x" }, "", "j", { desc = "Down", remap = true }) +-- map({ "n", "x" }, "", "h", { desc = "Left", remap = true }) +-- map({ "n", "x" }, "", "l", { desc = "Right", remap = true }) -map({ "n", "t", "i" }, "", " TmuxNavigateLeft", { desc = "Switch Window Left", remap = true }) -map({ "n", "t", "i" }, "", " TmuxNavigateRight", { desc = "Switch Window Right", remap = true }) -map({ "n", "t", "i" }, "", " TmuxNavigateUp", { remap = true }) -map({ "n", "t", "i" }, "", " TmuxNavigateDown", { desc = "Switch Window Down", remap = true }) +-- map({ "n", "t", "i" }, "", " TmuxNavigateLeft", { desc = "Switch Window Left", remap = true }) +-- map({ "n", "t", "i" }, "", " TmuxNavigateRight", { desc = "Switch Window Right", remap = true }) +-- map({ "n", "t", "i" }, "", " TmuxNavigateUp", { remap = true }) +-- map({ "n", "t", "i" }, "", " TmuxNavigateDown", { desc = "Switch Window Down", remap = true }) map({ "x" }, "", "", { remap = true }) map({ "x" }, "", "", { remap = true }) map({ "n", "x", "v" }, "", "", { remap = true }) map({ "n", "x", "v" }, "", "", { remap = true }) -map({ "n" }, "", "[b", { desc = "Previous Buffer", remap = true }) -map({ "n" }, "", "]b", { desc = "Next Buffer", remap = true }) +-- map({ "n" }, "", "[b", { desc = "Previous Buffer", remap = true }) +-- map({ "n" }, "", "]b", { desc = "Next Buffer", remap = true }) map({ "n" }, "", "5j", { remap = true }) map({ "n" }, "", "5k", { remap = true }) -map({ "i" }, "", "", { desc = "Escape insert mode", remap = true }) +-- map({ "i" }, "", "", { desc = "Escape insert mode", remap = true }) -- better navigation map({ "n" }, "", "zz", { remap = false }) map({ "n" }, "", "zz", { remap = false }) -map({ "n" }, "n", "nzz", { remap = false }) -map({ "n" }, "N", "Nzz", { remap = false }) -map({ "n" }, "", "zz", { remap = false }) -map({ "n" }, "", "zz", { remap = false }) -map({ "n", "x" }, "", "$", { remap = false }) -map({ "n", "x" }, "", "0", { remap = false }) +-- map({ "n" }, "n", "nzz", { remap = false }) +-- map({ "n" }, "N", "Nzz", { remap = false }) +-- map({ "n" }, "", "zz", { remap = false }) +-- map({ "n" }, "", "zz", { remap = false }) +-- map({ "n", "x" }, "", "$", { remap = false }) +-- map({ "n", "x" }, "", "0", { remap = false }) -- easily access null register map({ "n", "x" }, "n", '"_', { remap = false, silent = true, desc = "Null Register" }) -- remove the default lazyvim, and also swap H and L (for move cursor) to make more sense on colemak -vim.keymap.del({ "n" }, "") -vim.keymap.del({ "n" }, "") -map({ "n" }, "", "L", { remap = false }) -map({ "n" }, "", "H", { remap = false }) +-- vim.keymap.del({ "n" }, "") +-- vim.keymap.del({ "n" }, "") +-- map({ "n" }, "", "L", { remap = false }) +-- map({ "n" }, "", "H", { remap = false }) -- better delete and put -- better quit @@ -73,7 +69,7 @@ map({ "n", "x" }, "y", ":w", { desc = "Save" }) map({ "n", "x" }, "Y", ":wa", { desc = "Save All" }) -- Zen Mode -map("n", "uz", "ZenMode", { desc = "Toggle Zen Mode" }) +-- map("n", "uz", "ZenMode", { desc = "Toggle Zen Mode" }) -- Source Current File map("n", "x", "source %", { desc = "Source current file" }) @@ -115,3 +111,5 @@ map("n", "or", function() end, { desc = "Obsidian Rename" }) map("n", "oc", "ObsidianTOC", { desc = "Obsidian Table Of Contents" }) -- TODO: Add binds for templates +-- cmdh.fix_hjkl() +cmdh.fix_all() diff --git a/.config/nvim/lua/plugins/extend-mini-files.lua b/.config/nvim/lua/plugins/extend-mini-files.lua index 9bf6af89..e4dcf994 100644 --- a/.config/nvim/lua/plugins/extend-mini-files.lua +++ b/.config/nvim/lua/plugins/extend-mini-files.lua @@ -32,10 +32,19 @@ return { end, }, mappings = { - go_in_plus = "", + go_in_plus = "I", synchronize = ":w", - -- go_out = "", - -- reset = "-", + close = "q", + go_in = "i", + go_out = "m", + go_out_plus = "M", + mark_goto = "'", + mark_set = "k", + reset = "", + reveal_cwd = "@", + show_help = "g?", + trim_left = "<", + trim_right = ">", }, options = { permanent_delete = false,