Vim Mode 

    Kimün ships a built-in vim emulation: vim's modal editing layered directly over the built-in editor — no external process, no plugins to load. Insert mode keeps every editor feature (autocomplete, auto-surround, smart-Enter, the styled markdown view); Normal, Visual, and Replace modes run the vim engine.

    Enable it in config.toml:

    editor_backend = "vim"

    or from the Preferences window (Editor section). The change applies the next time you open a note. If you want the real thing instead — your own init.lua, plugins and all — use editor_backend = "nvim".

    Modes 

    The footer shows the active mode, plus the pending keys of an in-progress command (e.g. 2d, gu, di).

    ModeEnterLeave
    NORMALEsc from any mode
    INSERTi a I A o O, or any change operator (c, s, S, …)Esc
    REPLACER — overwrite chars in placeEsc
    VISUALv (charwise)Esc, or any operator
    V-LINEV (linewise)Esc, or any operator

    Cursor movement 

    All motions take a count (3w, 5j). Counts compose with operators: 2d3w deletes six words.

    KeysMotion
    h j k l, arrowsleft / down / up / right
    w b enext word start / previous word start / word end
    W B Esame over WORDS (any non-blank run — foo.bar is one WORD)
    ge gEbackward to previous word / WORD end
    0 ^line start / first non-blank
    $ g_line end / last non-blank
    gg Gfirst / last line
    5gg 5Ggo to line 5 (the count is a line number)
    { }previous / next paragraph
    %matching bracket — () [] {} <>, across lines
    f x F xto next / previous occurrence of x on the line
    t x T xtill just before / after x
    ; ,repeat last find, same / opposite direction

    Count-finds are atomic like vim: 2fx with only one x on the line fails and the cursor stays put.

    Operators 

    Operators combine with any motion or text object; doubling one operates on whole lines.

    KeysOperatorLinewise form
    ddelete (fills the register)dd
    cchange — delete and enter Insertcc
    yyankyy
    > <indent / outdent>> <<
    gu gU g~lowercase / uppercase / toggle caseguu / gUU / g~~ (also gugu-style)
    D C Ydelete / change / yank to line end

    Examples: dw, ce (and vim's cw = ce rule), d$, dj (linewise, two lines), dG, d2G, dfx, dtx, d;, gUiw, g~e.

    A failed motion fails the whole command, exactly like vim: dfz with no z on the line, dj on the last line, or d% with no bracket under the cursor delete nothing — and never disturb the register or the . command.

    Text objects 

    Work with any operator (diw, ci", ya() and in Visual mode (vi(, va"). i = inner, a = around (delimiters included; aw takes trailing space).

    KeysObject
    iw / awword
    i( i) ib / a((…) block
    i{ i} iB / a{{…} block
    i[ i] / a[[…] block
    i< i> / a<<…> block
    i" i' i` / a"quoted string

    Text objects are single-line for now.

    Editing 

    KeysAction
    x Xdelete char under / before cursor (never joins lines; xp swaps chars)
    r xreplace one char with x
    RReplace mode: overwrite until Esc; Backspace restores the original char; arrows reposition
    s Ssubstitute char / line (delete and enter Insert)
    Jjoin next line with one space, indent stripped
    gJjoin verbatim, no space handling
    ~toggle case of the char under the cursor
    u / Ctrl+rundo / redo
    .repeat the last change — works for operators, x, r, paste, indents, inserts (ihello<Esc>), cw+typed text, cc, s, R, …
    p Ppaste after / before (linewise yanks paste as lines)

    Visual mode 

    v selects charwise, V linewise. Motions, counts, finds (vf,), gg/5G, and text objects (vi(, va") all extend or re-aim the selection; o jumps to the other end.

    KeysAction on the selection
    d xdelete
    c schange (delete and enter Insert)
    yyank
    p Preplace the selection with the register (the replaced text enters the register — vim's swap)
    u U g~lowercase / uppercase / toggle case
    > <indent / outdent the selected lines
    J gJjoin the selected lines
    ( [ { < " ' ` * _ ~kimün twist: wraps the selection (auto-surround) instead of vim's behavior — so * bolds, [ [ builds a wikilink, and ~ wraps for strikethrough (use g~ for vim's toggle-case)

    Registers, search, command line 

    • Every yank and every delete/change fills the unnamed register, like vim — xp transposes, ddp moves a line down. The register is kept separate from the OS clipboard (Ctrl+C/X/V keep working independently).
    • / and ? open the find bar; Enter confirms, then n / N jump between matches with the bar closed.
    • : opens the command palette.
    • A bare Space in Normal mode starts a leader sequence (with the which-key panel), so the whole command tree is reachable without leaving the home row. Space only leads from a clean Normal state — mid-command (d Space, f Space, a pending count) it still acts as the motion/target character.

    Not (yet) supported 

    Macros (q) and named registers ("a) are planned — the engine is built for them. Visual block mode (Ctrl+v), scroll motions (zz, H/M/L, gj/gk), tag objects (it/at), gd, and gwip are not available; gd and code-centric commands are unlikely to come to a notes app.