ZenNotes 2.32.0: wrapped Vim motions, your way
ZenNotes 2.32.0: wrapped Vim motions, your way
Vim motions under Word Wrap are now explicit instead of surprising. Keep ZenNotes' current display-row behavior, or switch
$,I,A, and the operators built on them back to traditional logical-line semantics. The default is unchanged, andg0,g^, andg$remain the always-display-row forms. Open Buffers now supports selective cleanup without dismissing the picker, and custom-status task moves in server-backed vaults survive the refresh that confirms them.
✨ New
-
Wrapped Vim motions can follow the screen or the source line. (#638, reported by @uNyanda) Settings → Editor → Vim now has a Wrapped line motions choice. Display row preserves the behavior introduced in 2.21:
$,I,A,v$,y$,d$, andc$stop at the visible wrapped row. Logical line restores traditional Vim behavior for those commands across the complete source line, whileg0,g^, andg$still target the display row in either mode. The preference is persisted as[vim].wrapped_line_motionsinconfig.tomland applies in the main editor, Quick Capture, and floating-note windows. How to test locally: enable Word Wrap and Vim mode, open a paragraph that wraps across several rows, comparev$in both settings, then confirmg$still selects only to the current display-row end. -
Open Buffers can close the highlighted buffer in place. (#641, reported by @uNyanda) Open the list with
Space oor:buffers, highlight an entry, and pressCtrl+D. Only that buffer closes; the picker keeps its query and focus, and the highlight advances or clamps to the last row. The footer and Help advertise the shortcut. How to test locally: open four tabs, close two non-adjacent rows from Open Buffers, and confirm the other tabs remain while the picker stays open.
🐛 Fixes
- Custom-status task moves now stick in server-backed vaults. (#643, reported by @mptpro) Moving a whole-note task into a custom Kanban status wrote the right
status:frontmatter and showed the card in its new column immediately, but the server's follow-up task scan omitted custom fields. A few seconds later the board trusted that incomplete scan and put the card back under No status. The server parser now returnsfields.statusand the matchingstatusvalue for whole-note tasks, and mirrors the desktop parser for inline@key:valuefields too, so custom status, sprint, area, and other field boards all survive watcher rescans and manual refreshes. How to test locally: connect to a ZenNotes server, group the Tasks Kanban by Custom status, move a task file from Open into another status, wait for the watcher, then press Refresh; the card stays in its new column and its frontmatter keeps the same status.
🧰 For contributors
- The CodeMirror-Vim boundary adapter reads the current preference at motion time, so changing the setting applies without re-registering Vim commands or reopening the editor. Invalid stored values normalize to the backward-compatible
displaydefault. - Open Buffers uses the existing close action, preserving dirty-note saves. A component test covers repeated closes, picker persistence, and selection clamping.
- The Go server's
TaskJSON now carries the samefieldsmap andstatusconvenience value asVaultTaskin shared-domain. Its inline-field grammar and note-level status fallback intentionally mirror the TypeScript parser so remote and local task scans classify Kanban cards identically.
Local-first and keyboard-first, as always.