Skip to content

Commit 18d72e1

Browse files
committed
feat: US-007 - Vim Visual Mode
1 parent b8af678 commit 18d72e1

4 files changed

Lines changed: 870 additions & 1 deletion

File tree

prd.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@
135135
"Typecheck passes"
136136
],
137137
"priority": 6,
138-
"passes": false,
138+
"passes": true,
139139
"notes": ""
140140
},
141141
{

progress.txt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,30 @@ Thread: http://localhost:8317/threads/T-019bbbb7-f910-7378-88d8-49d010166129
135135
- Bracket matching uses depth tracking to handle nested brackets
136136
- Tag matching handles nested tags with same name using depth counter
137137
---
138+
139+
## 2026-01-14 - US-006
140+
Thread: http://localhost:8317/threads/T-019bbbbe-402a-741a-b654-8a534e204449
141+
- Implemented complete vim insert mode in src/lib/simulator/vim/insertMode.ts:
142+
- i enters insert before cursor, a after cursor
143+
- I enters insert at first non-whitespace, A at end of line
144+
- o opens new line below and enters insert, O opens above
145+
- gi goes to last insert position and enters insert
146+
- gI enters insert at column 0
147+
- Escape/Ctrl-[ exits insert mode (cursor moves left one if not at start)
148+
- Backspace deletes character before cursor, joins lines if at start
149+
- Enter creates new line with proper auto-indent and smart-indent
150+
- Tab inserts tab or spaces based on expandtab/tabstop settings
151+
- Ctrl-w deletes word before cursor
152+
- Ctrl-u deletes to start of line
153+
- Ctrl-t/Ctrl-d indent/dedent current line
154+
- Ctrl-n/Ctrl-p trigger completion (shows message in simulator)
155+
- Ctrl-r{register} inserts register contents
156+
- Updated src/lib/simulator/vim/index.ts to export insertMode
157+
- Files changed: 2 files (insertMode.ts new, index.ts updated)
158+
- **Learnings for future iterations:**
159+
- Use local getActiveBuffer wrapper that throws on missing buffer to satisfy TypeScript type narrowing
160+
- Insert mode tracks lastInsertedText for register storage and dot-repeat
161+
- insertModeStartCol tracks where insert mode started for Escape cursor positioning
162+
- handleInsertModeKey() is main entry point for processing keys in insert mode
163+
- executeInsertCommand() handles insert mode entry commands (i, a, I, A, o, O, gi, gI)
164+
---

src/lib/simulator/vim/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ export * from "./motions";
22
export * from "./operators";
33
export * from "./textObjects";
44
export * from "./insertMode";
5+
export * from "./visualMode";

0 commit comments

Comments
 (0)