From e1db0d1b5380704b833c2b15c4d36f405a9b5b79 Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 26 Oct 2026 09:53:34 +0100 Subject: tweak(user): remap vi navigation for Colemak-DH Oof, this feels good. Should've done this sooner. --- user/ideavim/ideavimrc | 17 +++++++++++++++++ user/lesskey | 13 +++++++++++++ user/nvim/init.lua | 21 +++++++++++++++++++++ user/readline/inputrc | 12 ++++++++++++ user/zsh/.zshrc | 10 ++++++++++ 5 files changed, 73 insertions(+) create mode 100644 user/lesskey diff --git a/user/ideavim/ideavimrc b/user/ideavim/ideavimrc index 81dc523..66d4442 100644 --- a/user/ideavim/ideavimrc +++ b/user/ideavim/ideavimrc @@ -1,4 +1,21 @@ set clipboard+=unnamed +" Put Vim's directional keys on the Colemak-DH home-row positions. +noremap k h +noremap n j +noremap e k +noremap i l + +" Move the displaced commands onto the old directional keys. Use `o` for +" insert/inner text objects and `l` for open-line/switch-selection-end. +noremap h e +noremap j n +noremap o i +noremap l o + +" Navigate search results. +noremap n +noremap N + " Disable annoying bell sound. Note that visual bell isn't implemented so nothing will be heard or seen. set visualbell diff --git a/user/lesskey b/user/lesskey new file mode 100644 index 0000000..4b01173 --- /dev/null +++ b/user/lesskey @@ -0,0 +1,13 @@ +#command +# Colemak-DH directional keys. +k left-scroll +n forw-line +e back-line +i right-scroll + +# `n` normally repeats the latest search; move that command to the old down key. +j repeat-search + +# Navigate search results. +\40 repeat-search +\kb reverse-search diff --git a/user/nvim/init.lua b/user/nvim/init.lua index 28ca981..56552d1 100644 --- a/user/nvim/init.lua +++ b/user/nvim/init.lua @@ -1,6 +1,27 @@ -- Configure settings that apply to all filetypes. -- Filetype-specific settings live in after/ftplugin/. +-- Put Vim's directional keys on the Colemak-DH home-row positions. Move the +-- displaced commands onto the old directional keys; use `o` for insert/inner +-- text objects and `l` for open-line/switch-selection-end. +local colemak_mappings = { + k = 'h', -- left + n = 'j', -- down + e = 'k', -- up + i = 'l', -- right + h = 'e', -- end of word + j = 'n', -- next search result + o = 'i', -- insert / inner text object + l = 'o', -- open line / switch selection end +} + +for lhs, rhs in pairs(colemak_mappings) do + vim.keymap.set({ 'n', 'x', 'o' }, lhs, rhs) +end +vim.keymap.set('n', 'L', 'O', { desc = 'Open line above' }) +vim.keymap.set('n', '', 'n', { desc = 'Next search result' }) +vim.keymap.set('n', '', 'N', { desc = 'Previous search result' }) + -- Don't break words in the middle. vim.opt.linebreak = true diff --git a/user/readline/inputrc b/user/readline/inputrc index b2cc9d6..2ac8226 100644 --- a/user/readline/inputrc +++ b/user/readline/inputrc @@ -1 +1,13 @@ set editing-mode vi + +set keymap vi-command +# Colemak-DH directional keys. +"k": backward-char +"n": next-history +"e": previous-history +"i": forward-char + +# Commands displaced by the directional keys. +"h": vi-end-word +"j": vi-search-again +"o": vi-insertion-mode diff --git a/user/zsh/.zshrc b/user/zsh/.zshrc index 06f4fb4..21c7780 100644 --- a/user/zsh/.zshrc +++ b/user/zsh/.zshrc @@ -4,6 +4,16 @@ ## Key bindings # vi mode bindkey -v +# Put vi's directional keys on the Colemak-DH home-row positions. +# As in Neovim, `o` enters insert mode and `l` opens a line below. +bindkey -M vicmd 'k' vi-backward-char +bindkey -M vicmd 'n' down-line-or-history +bindkey -M vicmd 'e' up-line-or-history +bindkey -M vicmd 'i' vi-forward-char +bindkey -M vicmd 'h' vi-forward-word-end +bindkey -M vicmd 'j' vi-repeat-search +bindkey -M vicmd 'o' vi-insert +bindkey -M vicmd 'l' vi-open-line-below # default in Bash bindkey "^R" history-incremental-search-backward -- cgit v1.3.1