My progamming key bindings

I like the idea of editing of VIM, but I still think this is not the best. Some keys of vscode, emacs and particularly Kakoune ans helix are modern.

General idea

Action follows selection.

Major modes

Minor modes

Keys

Normal mode

Movement

KeyDesc.
h, LeftMove left
j, DownMove down
k, UpMove up
l, RightMove right
wMove next word start
bMove previous word start
eMove next word end
fFind next char
tFind 'till next char
FFind previous char
TFind 'till previous char
Ctrl-b, PageUpMove page up
Ctrl-f, PageDownMove page down
Ctrl-uMove cursor and page half page up
Ctrl-dMove cursor and page half page down
0Jump to the start of the line
^Move to the first non-blank character of the line
$Move cursor line end
GGo to the last line of the document
Ctrl-[, Ctrl--Go previous cursor location
Ctrl-]Go next cursor location

Changes

KeyDesc.
rReplace with a character
RReplace with yanked text
~Switch case of the selected text
iInsert before selection
aInsert after selection (append)
IInsert at the start of the line
AInsert at the end of the line
oOpen new line below selection
OOpen new line above selection
uUndo change
URedo change
yYank selection
pPaste after selection
PPaste before selection
"<reg>Select a register to yank to or paste from
>Indent selection
<Unindent selection
=Format selection (LSP)
dDelete selection
cChange selection (delete and enter insert mode)
QStart/stop macro recording to the selected register
qPlay back a recorded macro from the selected register
Alt-UpMove line upward
Alt-DownMove line downward

Selection

KeyDesc.
sSelect all regex matches inside selections
CCopy selection onto the next line (Add cursor below)
,Keep only the primary selection
%, Cmd-aSelect entire file
xSelect current line, if already selected, extend to next line

Searching

KeyDesc.
/Search for regex pattern
?Search for previous pattern
nSelect next search match
NSelect previous search match
*Use current selection as the search pattern

File

KeyDesc.
Cmd-sSave current file
Cmd-nOpen new buffer

Insert mode

Press i in normal mode

KeyDesc.
EscapeSwitch to normal mode
Ctrl-aGoto line begin
Ctrl-eGoto line end
Ctrl-d, DeleteDelete next char
Ctrl-j, EnterInsert new line
Ctrl-xAutocomplete
Alt-DeleteDelete word backward
Ctrl-uDelete to start of line
Ctrl-kDelete to end of line

Picker mode

KeyDesc.
Shift-Tab, Up, Ctrl-pPrevious entry
Tab, Down, Ctrl-nNext entry
PageUp, Ctrl-uPage up
PageDown, Ctrl-dPage down
HomeGo to first entry
EndGo to last entry
EnterOpen selected
Escape, Ctrl-cClose picker

Prompt mode

KeyDesc.
Escape, Ctrl-cClose prompt
Alt-b, Ctrl-LeftBackward a word
Ctrl-f, RightForward a char
Ctrl-b, LeftBackward a char
Alt-f, Ctrl-RightForward a word
Ctrl-e, EndMove prompt end
Ctrl-a, HomeMove prompt start
Ctrl-w, Alt-Backspace, Ctrl-BackspaceDelete previous word
Alt-d, Alt-Delete, Ctrl-DeleteDelete next word
Ctrl-uDelete to start of line
Ctrl-kDelete to end of line
Backspace, Ctrl-h, Shift-BackspaceDelete previous char
Delete, Ctrl-dDelete next char
Ctrl-p, UpSelect previous history
Ctrl-n, DownSelect next history
TabSelect next completion item
EnterOpen selected
KeyDesc.
Ctrl-uScroll up
Ctrl-dScroll down

View mode

Press z in normal mode

KeyDesc.
z, cVertically center the line
tAlign the line to the top of the screen
bAlign the line to the bottom of the screen
m, zAlign the line to the middle of the screen
j, downScroll the view downwards
k, upScroll the view upwards
Ctrl-f, PageDownMove page down
Ctrl-b, PageUpMove page up
Ctrl-uMove cursor and page half page up
Ctrl-dMove cursor and page half page down

Select mode

Press v in normal mode

KeyDesc.
;Cancel selected region

Goto mode

Press g in normal mode

KeyDesc.
gGo to line number else start of file
eGo to the end of the file
fGo to files in the selections
hGo to the start of the line
lGo to the end of the line
sGo to first non-whitespace character of the line
tGo to the top of the screen
cGo to the middle of the screen
bGo to the bottom of the screen
dGo to definition (LSP)
yGo to type definition (LSP)
rGo to references (LSP)
iGo to implementation (LSP)
aGo to the last accessed/alternate file
mGo to the last modified/alternate file
nGo to next buffer
pGo to previous buffer
wShow labels at each word and select the word that belongs to the entered labels

Match mode

Press m in normal mode

KeyDesc.
mGoto matching bracket
s <char>Surround current selection with
r <from><to>Replace surround character with
d <char>Delete surround character
a <object>Select around textobject
i <object>Select inside textobject

Window mode

Press Ctrl-w in normal mode

KeyDesc.
w, Ctrl-wSwitch to next window
v, Ctrl-vVertical right split
s, Ctrl-sHorizontal bottom split
fGo to files in the selections in horizontal splits
FGo to files in the selections in vertical splits
h, Ctrl-h, LeftMove to left split
j, Ctrl-j, DownMove to split below
k, Ctrl-k, UpMove to split above
l, Ctrl-l, RightMove to right split
q, Ctrl-qClose current window
o, Ctrl-oOnly keep the current window, closing all the others
HSwap window to the left
JSwap window downwards
KSwap window upwards
LSwap window to the right

Space mode

Press Space in normal mode

KeyDesc.
fOpen file picker
FOpen file picker at current working directory
bOpen buffer picker
jOpen jumplist picker
kShow documentation for item under cursor in a popup (LSP)
sOpen document symbol picker (LSP)
SOpen workspace symbol picker (LSP)
dOpen document diagnostics picker (LSP)
DOpen workspace diagnostics picker (LSP)
rRename symbol (LSP)
aApply code action (LSP)
hSelect symbol references (LSP)
cComment/uncomment selections
/Global search in workspace folder
?Open command palette

Unimpaired

KeyDesc.
]dGo to next diagnostic (LSP)
[dGo to previous diagnostic (LSP)
]DGo to last diagnostic in document (LSP)
[DGo to first diagnostic in document (LSP)
]fGo to next function (TS)
[fGo to previous function (TS)
]tGo to next type definition (TS)
[tGo to previous type definition (TS)
]aGo to next argument/parameter (TS)
[aGo to previous argument/parameter (TS)
]cGo to next comment (TS)
[cGo to previous comment (TS)
]TGo to next test (TS)
[TGo to previous test (TS)
]pGo to next paragraph
[pGo to previous paragraph

Editors

I current use vscode for its light-weight and extensions. I use the extension Dance - Helix Alpha and EasyMotion to simulate Helix's key bindings.

Also, I add some key bindings:

// Place your key bindings in this file to override the defaultsauto[]
[
    {
        "key": "Escape",
        "command": "dance.modes.set.normal",
        "when": "editorTextFocus"
    },
    {
        "key": "ctrl+w",
        "command": "vscode-easymotion.jumpToWord",
        "when": "editorTextFocus && dance.mode == 'insert'"
    },
    {
        "key": "=",
        "command": "editor.action.formatDocument",
        "when": "editorTextFocus && dance.mode == 'normal'"    
    },
    {
        "key": "Ctrl+[",
        "command": "workbench.action.navigateBack",
        "when": "editorTextFocus && dance.mode == 'normal'"
    },
    {
        "key": "Ctrl+]",
        "command": "workbench.action.navigateForward",
        "when": "editorTextFocus && dance.mode == 'normal'"
    }
]