All checks were successful
Run Test Suite / test (push) Successful in 17s
Also added tons of tests for the actual command mode, since that was all untested...
10 KiB
10 KiB
TextEditor Feature Checklist
Normal Mode Motions
Basic Movement
h- Move leftj- Move downk- Move upl- Move right
Word Movement
w- Forward to start of worde- Forward to end of wordb- Backward to start of wordW- Forward to start of WORD (whitespace-delimited)E- Forward to end of WORDB- Backward to start of WORDge- Backward to end of word
Line Movement
0- Move to start of line$- Move to end of line_- Move to first non-whitespace^- Move to first non-whitespace (alias for_)|- Move to column N
File Movement
G- Move to bottom of file (or line N with count)gg- Move to top of file (or line N with count)H- Move to top of screenM- Move to middle of screenL- Move to bottom of screen
Scroll
ctrl+u- Scroll up half pagectrl+d- Scroll down half pagectrl+b- Scroll up full pagectrl+f- Scroll down full pagectrl+y- Scroll up one linectrl+e- Scroll down one linezz- Center cursor on screenzt- Scroll cursor to topzb- Scroll cursor to bottom
Search Movement
f{char}- Find char forward on lineF{char}- Find char backward on linet{char}- Till char forward on lineT{char}- Till char backward on line;- Repeat last f/F/t/T,- Repeat last f/F/t/T reversed/- Search forward?- Search backwardn- Next search resultN- Previous search result*- Search word under cursor forward#- Search word under cursor backward
Other Movement
%- Jump to matching bracket{- Jump to previous paragraph}- Jump to next paragraph(- Jump to previous sentence)- Jump to next sentence
Operators
Implemented
d- Delete operatory- Yank operatordd- Delete line (double press)yy- Yank line (double press)
Not Implemented
c- Change operatorcc- Change line>- Indent right<- Indent left=- Auto-indentgq- Format textgu- LowercasegU- Uppercaseg~- Swap case!- Filter through external command
Actions
Insert Mode Entry
i- Insert before cursora- Insert after cursorI- Insert at start of lineA- Insert at end of lineo- Open line belowO- Open line aboves- Substitute character (delete + insert)S- Substitute line (delete line + insert)C- Change to end of linegi- Insert at last insert position
Delete Actions
x- Delete character under cursorD- Delete to end of lineX- Delete character before cursorJ- Join linesgJ- Join lines without space
Yank/Paste
p- Paste after cursorP- Paste before cursorgp- Paste after and move cursor to endgP- Paste before and move cursor to end
Registers
- Unnamed register (
") - Numbered registers (
0-9) - Register types (charwise, linewise, blockwise)
"- Register prefix (select register for next operation)- Named registers (
a-z) - Append to named registers (
A-Z) - Black hole register (
_) - System clipboard (
+,*) - Expression register (
=) - Last search register (
/)
Undo/Redo
u- Undoctrl+r- Redo.- Repeat last changeU- Undo all changes on line
Other Normal Mode
r{char}- Replace characterR- Replace mode~- Swap case of characterctrl+a- Increment numberctrl+x- Decrement numberq{reg}- Record macro@{reg}- Play macro@@- Repeat last macroctrl+c- Quit (custom)
Visual Mode
Mode Entry
v- Character-wise visual modeV- Line-wise visual modectrl+v- Block-wise visual modegv- Reselect last visual selection
Visual Mode Operations
- Motions work in visual mode
d/x- Delete selectiony- Yank selectionc- Change selection>- Indent selection<- Unindent selection=- Auto-indent selection~- Swap case of selectionu- Lowercase selectionU- Uppercase selectionJ- Join selected lineso- Go to other end of selectionO- Go to other corner (block mode)
Insert Mode
Text Input
- Character insertion
Enter- Insert newlineTab- Insert tab/spacesBackspace- Delete character before cursorDelete- Delete character under cursorctrl+w- Delete word before cursor
Movement in Insert Mode
- Arrow keys (up/down/left/right)
ctrl+h- Backspace (alias)ctrl+j- Insert newline (alias)ctrl+t- Indent linectrl+d- Unindent line
Exit Insert Mode
Esc- Exit to normal modectrl+c- Exit to normal modectrl+[- Exit to normal mode
Command Mode
Entry/Exit
:- Enter command modeEsc- Exit command modeEnter- Execute command
Editing
- Character input
Backspace- Delete characterDelete- Delete characterctrl+w- Delete wordLeft/Right- Move cursor
Commands Implemented
:set number/:set nonumber- Toggle line numbers:set number!- Toggle line numbers:set tabstop=N- Set tab width:register {name}- Show register contents:w- Write file:q- Quit:wq- Write and quit:q!- Force quit:e {file}- Edit file:bn/:bp- Next/previous buffer:{range}- Go to line:%s/old/new/g- Search and replace:!{cmd}- Run shell command:help- Show help
Text Objects
Implemented
iw/aw- Inner/around wordiW/aW- Inner/around WORDis/as- Inner/around sentenceip/ap- Inner/around paragraphi"/a"- Inner/around double quotesi'/a'- Inner/around single quotesi`/a`- Inner/around backticksi(/a(- Inner/around parenthesesi[/a[- Inner/around bracketsi{/a{- Inner/around bracesi</a<- Inner/around angle brackets
Not Implemented
it/at- Inner/around tag
Marks & Jumps
Not Implemented
m{a-z}- Set local markm{A-Z}- Set global mark`{mark}- Jump to mark (exact position)'{mark}- Jump to mark (line start)``- Jump to previous position''- Jump to previous line`.- Jump to last changectrl+o- Jump back in jump listctrl+i- Jump forward in jump list
Buffers
Buffers are in-memory representations of files. A buffer exists for each open file.
Buffer Model
- Buffer struct (id, filename, lines, modified flag, cursor position)
- Buffer list/manager
- Current buffer tracking
- Buffer-local settings (tabstop, filetype, etc.)
- Modified/dirty state tracking
- Read-only buffer support
Buffer Navigation
:e {file}- Edit file (open in new buffer or switch to existing):bn/:bnext- Next buffer:bp/:bprev- Previous buffer:b {name}- Switch to buffer by name (partial match):b {number}- Switch to buffer by number:bf/:bfirst- First buffer:bl/:blast- Last buffer:buffers/:ls- List all buffersctrl+^/ctrl+6- Switch to alternate (previous) buffer
Buffer Operations
:bd/:bdelete- Delete buffer (close file):bd!- Force delete buffer (discard changes):bw/:bwipeout- Wipe buffer (remove completely):w- Write current buffer to file:w {file}- Write buffer to specific file:wa- Write all modified buffers:sav {file}- Save as (write to new file, switch to it)
Buffer State
- Track cursor position per buffer
- Track undo history per buffer
- Track marks per buffer
- Remember scroll position when switching
- Alternate buffer (
#) tracking
Buffer Indicators
%- Current buffer (in buffer list)#- Alternate buffera- Active (loaded and visible)h- Hidden (loaded but not visible)l- Loaded (active and hidden do not exist yet)+- Modified-- Read-only=- Readonly (cannot be modified) (?)
Hidden Buffers
:set hidden- Allow switching with unsaved changes- Prompt to save when closing modified buffer
:qbehavior with modified buffers
Argument List (Advanced)
:args- Show argument list:next/:prev- Navigate argument list:argadd/:argdelete- Modify argument list
Plugins / Extensions
Harpoon (File Navigation)
- Quick file marks (1-4 files)
- Add file to list
- Navigate to marked file
- Show file list
Telescope / Fuzzy Finder
- File picker
- Buffer picker
- Grep/search
- Command palette
File Explorer
- Tree view
- File operations (create, delete, rename)
- Navigation
LSP Support
- Go to definition
- Find references
- Hover information
- Diagnostics
- Code actions
- Completion
Git Integration
- Git status
- Git diff
- Git blame
- Hunk navigation
Other
- Multiple cursors
- Snippets
- Auto-pairs (brackets, quotes)
- Surround (change surrounding chars)
- Comment toggle
- Indentation guides
- Syntax highlighting
- Statusline customization
- Themes
Editor Features
Display
- Line numbers
- Cursor position tracking
- Viewport/scrolling (Y)
- Viewport/scrolling (X)
- ScrollOff setting
- Relative line numbers
- Cursor line highlight
- Column highlight
- Wrap/nowrap
- Word wrap at window edge
- Show whitespace characters
- Color column (ruler)
Files
- File reading
- File writing
- Auto-save
- Backup files
- Swap files
- File encoding
- Line endings (LF/CRLF)
Search & Replace
- Incremental search
- Search highlighting
- Case sensitivity options
- Regex support
- Search and replace
Misc
- Split windows
- Tabs
- Sessions
- Persistent undo
- Spell check