initVimMode
vim.js based on https://github.com/codemirror/CodeMirror/commit/793c9e65e09ec7fba3f4f5aaf366b3d36e1a709e (2021-12-04)
Modified from https://github.com/nightwing/cm6-vim-mode-experiment/blob/master/src/vim.js 103a9b5 2021-12-03
CodeMirror, copyright (c) by Marijn Haverbeke and others
Distributed under an MIT license: https://codemirror.net/5/LICENSE
Supported keybindings:
Too many to list. Refer to defaultKeymap below.
Supported Ex commands:
Refer to defaultExCommandMap below.
Registers: unnamed, -, ., :, /, _, a-z, A-Z, 0-9.
(Does not respect the special case for number registers when delete operator is made with these commands: %, (, ), , /, ?, n, N, \{, \}).
TODO: Implement the remaining registers.
Marks: a-z, A-Z, and 0-9.
TODO: Implement the remaining special marks. They have more complex behavior.
Events:
vim-mode-change - raised on the editor anytime the current mode changes.
Event object: \{mode: "visual", subMode: "linewise"\}.
Code structure:
-
Default keymap.
-
Variable declarations and short basic helpers.
-
Instance (External API) implementation.
-
Internal state tracking objects (input state, counter) implementation and instantiation.
-
Key handler (the main command dispatcher) implementation.
-
Motion, operator, and action implementations.
-
Helper functions for the key handler, motions, operators, and actions.
-
Set up Vim to work as a keymap for CodeMirror.
-
Ex command implementations.
Signature:
function initVimMode(CodeMirror: CodeMirrorAdapterEx): VimApiParameters:
| Parameter | Type | Description |
|---|---|---|
CodeMirror | CodeMirrorAdapterEx | The CodeMirror adapter instance. |
Returns: VimApi — The Vim API instance.