Skip to content

Commit 543e1bd

Browse files
committed
feat: US-008 - Vim Command Mode
1 parent 18d72e1 commit 543e1bd

4 files changed

Lines changed: 1149 additions & 1 deletion

File tree

prd.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@
160160
"Typecheck passes"
161161
],
162162
"priority": 7,
163-
"passes": false,
163+
"passes": true,
164164
"notes": ""
165165
},
166166
{

progress.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,3 +162,31 @@ Thread: http://localhost:8317/threads/T-019bbbbe-402a-741a-b654-8a534e204449
162162
- handleInsertModeKey() is main entry point for processing keys in insert mode
163163
- executeInsertCommand() handles insert mode entry commands (i, a, I, A, o, O, gi, gI)
164164
---
165+
166+
## 2026-01-14 - US-007
167+
Thread: http://localhost:8317/threads/T-019bbbc5-7313-761b-abcf-d6151d7a76a0
168+
- Implemented complete vim visual mode in src/lib/simulator/vim/visualMode.ts:
169+
- v enters character-wise visual mode
170+
- V enters line-wise visual mode
171+
- Ctrl-v enters block-wise visual mode
172+
- All motions extend selection in visual mode via visualModeExtendSelection()
173+
- o swaps cursor to other end of selection (visualSwapEnds)
174+
- O in block mode moves to other corner (visualBlockSwapCorner)
175+
- gv reselects last visual selection (reselectLastVisual)
176+
- d/y/c delete/yank/change selection with proper register handling
177+
- >/< indent/dedent selected lines
178+
- ~ toggles case of selection
179+
- u/U lowercase/uppercase selection
180+
- J joins selected lines
181+
- Escape cancels visual mode and stores lastVisualSelection
182+
- Helper functions: getVisualRange for computing TextRange from selection
183+
- Block mode operations handle column-based edits across lines
184+
- Updated src/lib/simulator/vim/index.ts to export visualMode
185+
- Files changed: 2 files (visualMode.ts new, index.ts updated)
186+
- **Learnings for future iterations:**
187+
- Visual mode stores selection in state.visualSelection with start/end CursorPosition
188+
- Mode stored in buffer.mode ("visual" | "visual-line" | "visual-block")
189+
- lastVisualSelection preserved for gv reselect functionality
190+
- Block mode operations iterate line-by-line applying column ranges
191+
- handleVisualModeKey() is main entry point for visual mode key processing
192+
---

0 commit comments

Comments
 (0)