Changelog
Release notes for VimSheet.
Unreleased
Features
Unified cell editor: every entry key (
\,=,<,>,|,A,I,C,S,r,cw,cc,e,E) now opens the same editor, which has insert and normal sub-modes.Escapeleaves the insert sub-mode so a mistyped formula can be fixed with vi motions;Entercommits.The command line (
:) and search prompts (/,?) use the same unified editor.Escapeopens a normal sub-mode for vi motions (h/l/w/x/dw…),Enterruns the command or search, andEscapefrom normal cancels. History is browsable withUp/Downin insert sub-mode andk/jin normal sub-mode.:sl/:sheet listand:historyopen modal screens instead of writing a cramped summary to the status bar.
Changes
Retired the separate INSERT mode. The formula and status bars show
INSERTwhile typing andEDITin the editor’s normal sub-mode. The insert sub-mode caret underlines the character at the cursor, so the character stays visible and the line does not shift while editing. The formula bar caret now uses the mode-insert colour (default yellow,formula_cursor_bg) with contrasting text for the normal-sub-mode block, replacing the low-contrast blue block.Cell entry now validates on every commit, and
\is a strict string entry (numeric text is not coerced).Editing a stored pure-literal formula (e.g.
=42) re-valueizes it on commit.
Fixes
r{char}in the editor’s normal sub-mode now waits for the replacement character instead of replacing the cell content withrimmediately.rfollowed by a non-printable key cancels the pending replace..(dot-repeat) now repeats cell edits entered through the editor (r,=,\,C…) instead of clearing the cell.Sheet commands accept quoted names containing spaces, e.g.
:sheet rename "Q1 Sales".:sdup/:sc/:sheet copy: one argument renames the current sheet, two arguments duplicate the source sheet into a new named sheet; no argument duplicates the current sheet with a" (copy)"suffix.
0.2.0 — 2026-05-14
Features
Multi-line cell content:
Alt+Enterinserts newlines, grid rows expand vertically to show all linesRow collapse/expand:
z_collapses current row,z+expands itVisual mode row collapse:
z_/z+collapses/expands all selected rowsLive cell preview: uncommitted content shown in grid during insert/edit mode
Message history:
:messagesopens a colored, timestamped log of status messagesHelp screen now covers all commands, keybindings, and built-in functions
Range-prefix support for
:format,:condformat,:comment,:hide, and:showcommandsElement-wise function apply via
:<range> <FUNC> [args](e.g.,:A1:B10 UPPERuppercases every cell). Aggregate functions (SUM, AVG, etc.) continue to yank total to register.Bold/normal/italic/underline formatting visual feedback in grid
Range-prefix support for
:colwidth,:autofit,:validate,:history, and:clearfiltercommandsValidationCommandundo class for per-cell validation undoHistoryScreenmodal for browsing cell change history by range:colfit/:colfand:rowfit/:rowfcommands for column-only or row-only fit:<range> autofitnow acceptscol/row/bothargument (defaultboth) to fit columns and/or rows in range:formatnow supportsprop=valsyntax to set multiple properties (e.g.bg=red fg=white bold) and exposesalign,num_decimals,num_format, andthousands_sepXLSX: import now restores cell font, alignment, fill colors (ARGB→RGB) and defaults to left-align on import. Invalid
#00000000colors no longer crash the grid rendering.CSV/TSV: imported cells now default to left alignment
Plain JSON: imported cells now default to left alignment
0.1.0 — 2026-01-15
Initial release.
Features
Modal spreadsheet editing (NORMAL, INSERT, EDIT, VISUAL, COMMAND modes)
Formula engine with 80+ built-in functions
Multi-sheet workbook support
File I/O: CSV, TSV, XLSX, XLS, JSON, HTML, Markdown, LaTeX
Terminal charting (bar, line, scatter, pie, area)
Dependency graph with topological recalculation
Undo/redo stack
Named ranges
Conditional formatting
Data validation
Search and replace with regex
Sort and filter
Macro recording and playback
Pipeline (non-interactive) mode
HTTP data fetching
JSON scripting protocol
Configurable keybindings and themes
Frozen panes