implemented better colemak rebinds

This commit is contained in:
Daniel Fichtinger 2024-11-18 22:57:49 -05:00
parent 9b586c91d5
commit 81f7051197
4 changed files with 305 additions and 30 deletions

View file

@ -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" },
{ "<c-w>", group = "window" },
{ "<c-w>+", desc = "Increase height" },
{ "<c-w>-", desc = "Decrease height" },
{ "<c-w><", desc = "Decrease width" },
{ "<c-w>=", desc = "Equally high and wide" },
{ "<c-w>>", desc = "Increase width" },
{ "<c-w>T", desc = "Break out into a new tab" },
{ "<c-w>_", desc = "Max out the height" },
{ "<c-w>m", desc = "Go to the left window" },
{ "<c-w>n", desc = "Go to the down window" },
{ "<c-w>e", desc = "Go to the up window" },
{ "<c-w>i", desc = "Go to the right window" },
{ "<c-w>o", desc = "Close all other windows" },
{ "<c-w>q", desc = "Quit a window" },
{ "<c-w>s", desc = "Split window" },
{ "<c-w>v", desc = "Split window vertically" },
{ "<c-w>w", desc = "Switch windows" },
{ "<c-w>x", desc = "Swap current with next" },
{ "<c-w>|", desc = "Max out the width" },
},
}
M.fix_window_nav = function()
map({ "n", "x" }, "<C-m>", "<C-w>h", { desc = "Switch to left window", remap = false })
map({ "n", "x" }, "<C-n>", "<C-w>j", { desc = "Switch to down window", remap = false })
map({ "n", "x" }, "<C-e>", "<C-w>k", { desc = "Switch to up window", remap = false })
map({ "n", "x" }, "<C-i>", "<C-w>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", "<cmd>bprevious<cr>", { desc = "Previous Buffer", remap = false })
map({ "n", "x", "o" }, "<Down>", "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" }, "<Up>", "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", "<cmd>bprevious<cr>", { 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

View file

@ -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" }, "<C-t>", "<Nop>")
local dirmap = {
up = "w0",
down = "w$",
}
-- Bind arrows to hjkl to my colemak-dh motions work as expected
map({ "n", "x" }, "<Up>", "k", { desc = "Up", remap = true })
map({ "n", "x" }, "<Down>", "j", { desc = "Down", remap = true })
map({ "n", "x" }, "<Left>", "h", { desc = "Left", remap = true })
map({ "n", "x" }, "<Right>", "l", { desc = "Right", remap = true })
map({ "n", "t", "i" }, "<C-Left>", "<cmd> TmuxNavigateLeft<CR>", { desc = "Switch Window Left", remap = true })
map({ "n", "t", "i" }, "<C-Right>", "<cmd> TmuxNavigateRight<CR>", { desc = "Switch Window Right", remap = true })
map({ "n", "t", "i" }, "<C-Up>", "<cmd> TmuxNavigateUp<CR>", { remap = true })
map({ "n", "t", "i" }, "<C-Down>", "<cmd> TmuxNavigateDown<CR>", { desc = "Switch Window Down", remap = true })
map({ "x" }, "<M-Left>", "<M-h>", { remap = true })
map({ "x" }, "<M-Right>", "<M-l>", { remap = true })
map({ "n", "x", "v" }, "<M-Up>", "<M-k>", { remap = true })
map({ "n", "x", "v" }, "<M-Down>", "<M-j>", { remap = true })
map({ "n" }, "<S-Left>", "[b", { desc = "Previous Buffer", remap = true })
map({ "n" }, "<S-Right>", "]b", { desc = "Next Buffer", remap = true })
map({ "n" }, "<S-Down>", "5j", { remap = true })
map({ "n" }, "<S-Up>", "5k", { remap = true })
map({ "i" }, "<M-e>", "<Esc>", { desc = "Escape insert mode", remap = true })
-- better navigation
map({ "n" }, "<C-u>", "<C-u>zz", { remap = false })
map({ "n" }, "<C-d>", "<C-d>zz", { remap = false })
map({ "n" }, "n", "nzz", { remap = false })
map({ "n" }, "N", "Nzz", { remap = false })
map({ "n" }, "<PageDown>", "<Down>zz", { remap = false })
map({ "n" }, "<PageUp>", "<Up>zz", { remap = false })
map({ "n", "x" }, "<M-i>", "$", { remap = false })
map({ "n", "x" }, "<M-m>", "0", { remap = false })
-- easily access null register
map({ "n", "x" }, "<leader>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" }, "<S-h>")
vim.keymap.del({ "n" }, "<S-l>")
map({ "n" }, "<S-h>", "L", { remap = false })
map({ "n" }, "<S-l>", "H", { remap = false })
-- better delete and put
-- better quit
map("n", "<C-q>", "<cmd>qa<cr>", { desc = "Quit All" })
map("n", "<C-x>", function()
Snacks.bufdelete()
end, { remap = true, desc = "Delete Buffer" })
-- yank history
map({ "n", "x" }, "<leader>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" }, "<leader>y", ":w<CR>", { desc = "Save" })
map({ "n", "x" }, "<leader>Y", ":wa<CR>", { desc = "Save All" })
-- Zen Mode
map("n", "<leader>uz", "<CMD>ZenMode<CR>", { desc = "Toggle Zen Mode" })
-- Source Current File
map("n", "<leader><leader>x", "<CMD>source %<CR>", { desc = "Source current file" })
-- Obsidian
-- <leader>o is the prefix for all Obsidian bindings
wk.add({
{ "<leader>o", group = "Obsidian" },
{ "<leader>od", group = "Daily Note" },
{ "<leader>ol", group = "Follow Link" },
})
map("n", "<leader>oo", "<CMD>ObsidianQuickSwitch<CR>", { desc = "Obsidian Quick Switch" })
map("n", "<leader>o/", "<CMD>ObsidianSearch<CR>", { desc = "Obsidian Grep" })
-- This one will open the command line and let the user type the arg
map("n", "<leader>on", function()
require("command-key").command("ObsidianNew")
end, { desc = "Obsidian New Note" })
map("n", "<leader>ob", "<CMD>ObsidianBacklinks<CR>", { desc = "Obsidian Backlinks" })
map("n", "<leader>ot", "<CMD>ObsidianTags<CR>", { desc = "Obsidian Tags" })
map("n", "<leader>olv", "<CMD>ObsidianFollowLink vsplit<CR>", { desc = "Obsidian Follow Link Vsplit" })
map("n", "<leader>olh", "<CMD>ObsidianFollowLink hsplit<CR>", { desc = "Obsidian Follow Link Hsplit" })
map("n", "<leader>odt", "<CMD>ObsidianToday<CR>", { desc = "Obsidian Open Today's Daily" })
map("n", "<leader>ods", "<CMD>ObsidianDailies<CR>", { desc = "Obsidian Search Dailies" })
map("n", "<leader>ols", "<CMD>ObsidianLinks<CR>", { desc = "Obsidian Search Links" })
map("x", "<leader>oll", function()
require("command-key").command("ObsidianLink")
end, { desc = "Obsidian Link Visual To Existing Note" })
map("x", "<leader>oln", function()
require("command-key").command("ObsidianLinkNew")
end, { desc = "Obsidian Link Visual To New Note" })
map("x", "<leader>ole", function()
require("command-key").command("ObsidianExtractNote")
end, { desc = "Obsidian Copy Selection To New Note & Link" })
map("n", "<leader>or", function()
require("command-key").command("ObsidianRename")
end, { desc = "Obsidian Rename" })
map("n", "<leader>oc", "<CMD>ObsidianTOC<CR>", { desc = "Obsidian Table Of Contents" })
-- TODO: Add binds for templates

View file

@ -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" }, "<C-t>", "<Nop>")
local dirmap = {
up = "w0",
down = "w$",
}
-- Bind arrows to hjkl to my colemak-dh motions work as expected
map({ "n", "x" }, "<Up>", "k", { desc = "Up", remap = true })
map({ "n", "x" }, "<Down>", "j", { desc = "Down", remap = true })
map({ "n", "x" }, "<Left>", "h", { desc = "Left", remap = true })
map({ "n", "x" }, "<Right>", "l", { desc = "Right", remap = true })
-- map({ "n", "x" }, "<Up>", "k", { desc = "Up", remap = true })
-- map({ "n", "x" }, "<Down>", "j", { desc = "Down", remap = true })
-- map({ "n", "x" }, "<Left>", "h", { desc = "Left", remap = true })
-- map({ "n", "x" }, "<Right>", "l", { desc = "Right", remap = true })
map({ "n", "t", "i" }, "<C-Left>", "<cmd> TmuxNavigateLeft<CR>", { desc = "Switch Window Left", remap = true })
map({ "n", "t", "i" }, "<C-Right>", "<cmd> TmuxNavigateRight<CR>", { desc = "Switch Window Right", remap = true })
map({ "n", "t", "i" }, "<C-Up>", "<cmd> TmuxNavigateUp<CR>", { remap = true })
map({ "n", "t", "i" }, "<C-Down>", "<cmd> TmuxNavigateDown<CR>", { desc = "Switch Window Down", remap = true })
-- map({ "n", "t", "i" }, "<C-Left>", "<cmd> TmuxNavigateLeft<CR>", { desc = "Switch Window Left", remap = true })
-- map({ "n", "t", "i" }, "<C-Right>", "<cmd> TmuxNavigateRight<CR>", { desc = "Switch Window Right", remap = true })
-- map({ "n", "t", "i" }, "<C-Up>", "<cmd> TmuxNavigateUp<CR>", { remap = true })
-- map({ "n", "t", "i" }, "<C-Down>", "<cmd> TmuxNavigateDown<CR>", { desc = "Switch Window Down", remap = true })
map({ "x" }, "<M-Left>", "<M-h>", { remap = true })
map({ "x" }, "<M-Right>", "<M-l>", { remap = true })
map({ "n", "x", "v" }, "<M-Up>", "<M-k>", { remap = true })
map({ "n", "x", "v" }, "<M-Down>", "<M-j>", { remap = true })
map({ "n" }, "<S-Left>", "[b", { desc = "Previous Buffer", remap = true })
map({ "n" }, "<S-Right>", "]b", { desc = "Next Buffer", remap = true })
-- map({ "n" }, "<S-Left>", "[b", { desc = "Previous Buffer", remap = true })
-- map({ "n" }, "<S-Right>", "]b", { desc = "Next Buffer", remap = true })
map({ "n" }, "<S-Down>", "5j", { remap = true })
map({ "n" }, "<S-Up>", "5k", { remap = true })
map({ "i" }, "<M-e>", "<Esc>", { desc = "Escape insert mode", remap = true })
-- map({ "i" }, "<M-e>", "<Esc>", { desc = "Escape insert mode", remap = true })
-- better navigation
map({ "n" }, "<C-u>", "<C-u>zz", { remap = false })
map({ "n" }, "<C-d>", "<C-d>zz", { remap = false })
map({ "n" }, "n", "nzz", { remap = false })
map({ "n" }, "N", "Nzz", { remap = false })
map({ "n" }, "<PageDown>", "<Down>zz", { remap = false })
map({ "n" }, "<PageUp>", "<Up>zz", { remap = false })
map({ "n", "x" }, "<M-i>", "$", { remap = false })
map({ "n", "x" }, "<M-m>", "0", { remap = false })
-- map({ "n" }, "n", "nzz", { remap = false })
-- map({ "n" }, "N", "Nzz", { remap = false })
-- map({ "n" }, "<PageDown>", "<Down>zz", { remap = false })
-- map({ "n" }, "<PageUp>", "<Up>zz", { remap = false })
-- map({ "n", "x" }, "<M-i>", "$", { remap = false })
-- map({ "n", "x" }, "<M-m>", "0", { remap = false })
-- easily access null register
map({ "n", "x" }, "<leader>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" }, "<S-h>")
vim.keymap.del({ "n" }, "<S-l>")
map({ "n" }, "<S-h>", "L", { remap = false })
map({ "n" }, "<S-l>", "H", { remap = false })
-- vim.keymap.del({ "n" }, "<S-h>")
-- vim.keymap.del({ "n" }, "<S-l>")
-- map({ "n" }, "<S-h>", "L", { remap = false })
-- map({ "n" }, "<S-l>", "H", { remap = false })
-- better delete and put
-- better quit
@ -73,7 +69,7 @@ map({ "n", "x" }, "<leader>y", ":w<CR>", { desc = "Save" })
map({ "n", "x" }, "<leader>Y", ":wa<CR>", { desc = "Save All" })
-- Zen Mode
map("n", "<leader>uz", "<CMD>ZenMode<CR>", { desc = "Toggle Zen Mode" })
-- map("n", "<leader>uz", "<CMD>ZenMode<CR>", { desc = "Toggle Zen Mode" })
-- Source Current File
map("n", "<leader><leader>x", "<CMD>source %<CR>", { desc = "Source current file" })
@ -115,3 +111,5 @@ map("n", "<leader>or", function()
end, { desc = "Obsidian Rename" })
map("n", "<leader>oc", "<CMD>ObsidianTOC<CR>", { desc = "Obsidian Table Of Contents" })
-- TODO: Add binds for templates
-- cmdh.fix_hjkl()
cmdh.fix_all()

View file

@ -32,10 +32,19 @@ return {
end,
},
mappings = {
go_in_plus = "<CR>",
go_in_plus = "I",
synchronize = ":w",
-- go_out = "<BS>",
-- reset = "-",
close = "q",
go_in = "i",
go_out = "m",
go_out_plus = "M",
mark_goto = "'",
mark_set = "k",
reset = "<BS>",
reveal_cwd = "@",
show_help = "g?",
trim_left = "<",
trim_right = ">",
},
options = {
permanent_delete = false,