0.58.0
Fixed
- Table escaped pipes — cells containing escaped pipes (
\|) no longer corrupt cell boundaries during navigation, text object operations, or embedded cell editing write-back. All pipe-boundary detection across 7 files now uses shared escape-aware utilities (findUnescapedPipes()/splitCellsEscapeAware()) intable-utils.ts. Escaped pipes (\|) are treated as cell content;\\|(escaped backslash + real pipe) is correctly treated as a boundary via backslash-parity checking.- Plugin:
src/vim/table-utils.ts(new:findUnescapedPipes(),splitCellsEscapeAware(),countPrecedingBackslashes()),src/vim/table-render-widget.ts,src/vim/table-operations.ts,src/vim/table-auto-format.ts,src/vim/table-nav-controller.ts,src/text-objects/table-cell.ts,src/motions/tables.ts(all updated to use shared utilities)
- Plugin:
- Vimrc file I/O timing —
readVimrcFile()now usesstat()as a readiness probe beforeread(), distinguishing genuinely empty files (stat.size === 0, no retry) from timing-empty reads (stat.size > 0, retry with extended backoff 50/100/200/400ms).fileExists()usesstat()instead of a fullread(). On retry exhaustion, a user-facing Notice is shown. ThevimrcLoadingflag is now wrapped intry/finallyso a failedloadVimrc()call no longer permanently blocks future retry attempts. The samestat()+retry pattern is applied toreadLuaFile()in the Lua config loader.- Plugin:
src/vimrc/loader.ts(readVimrcFile,fileExists),src/lua/loader.ts(readLuaFile),src/main.ts(try/finallyaround vimrc loading)
- Plugin:
- Oil which-key labels not appearing —
getCommandLabels()inOilKeybindingManagerreturned empty when oil bindings were not yet applied (theif (!this.applied) return []guard prevented labels from being registered duringrebuildWhichKey()). Labels are now always returned — they are static metadata fromOIL_MAPPINGS, valid regardless of whether the vim mappings are currently active.- Plugin:
src/oil/keybindings.ts(removedappliedguard fromgetCommandLabels())
- Plugin:
- Live grep UI blocking on large vaults — the live grep picker source now uses chunked async iteration (50 files per chunk) with event loop yields between chunks, preventing UI freezes during searches on vaults with many files. Functionally identical results.
- Plugin:
src/picker/sources/live-grep.ts(chunked iteration withwindow.setTimeout(0)yields)
- Plugin:
Changed
- Oil
g?help usesVimInfoModal—g?in Oil now opens a modal dialog (Key/Action table) instead of a custom DOM overlay. This follows the same pattern used by:marks,:buffers, and:registerswhen the picker is disabled. Dismissible via Escape.- Plugin:
src/oil/keybindings.ts(showOilHelprewritten to useVimInfoModal),styles.css(removed.vim-motions-oil-help*CSS)
- Plugin:
Tests
- 5 e2e tests in
test/specs/table-escaped-pipes.e2e.ts(new):di|with\|content,\\|as real pipe boundary,]|navigation skipping\|,yi|yanking cell with\|,:tablerealignpreserving\|cell content
Documentation
KNOWN_LIMITATIONS.md: Table escaped pipes → Fixed;g?oil help command → Fixed (was listed as "planned but not yet implemented"); oil which-key integration → Fixed; surroundysdot-repeat with tag/function → clarified as working at runtime (test infrastructure limitation only); vimrc timing section updated with improved retry mechanismKNOWN_LIMITATIONS.md: Added two new Oil limitations — which-key/g?not working in non-editor context (no prior editor leaf), and which-key "all" mode intercepting multi-key Oil bindings (g?,g.,gs,gf)
Full Changelog: 0.57.0...0.58.0