Gim/FEATURES.md
2026-02-24 12:07:49 -07:00

11 KiB

TextEditor Feature Checklist

Normal Mode Motions

Basic Movement

  • h - Move left
  • j - Move down
  • k - Move up
  • l - Move right

Word Movement

  • w - Forward to start of word
  • e - Forward to end of word
  • b - Backward to start of word
  • W - Forward to start of WORD (whitespace-delimited)
  • E - Forward to end of WORD
  • B - Backward to start of WORD
  • ge - 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 screen
  • M - Move to middle of screen
  • L - Move to bottom of screen

Scroll

  • ctrl+u - Scroll up half page
  • ctrl+d - Scroll down half page
  • ctrl+b - Scroll up full page
  • ctrl+f - Scroll down full page
  • ctrl+y - Scroll up one line
  • ctrl+e - Scroll down one line
  • zz - Center cursor on screen
  • zt - Scroll cursor to top
  • zb - Scroll cursor to bottom

Search Movement

  • f{char} - Find char forward on line
  • F{char} - Find char backward on line
  • t{char} - Till char forward on line
  • T{char} - Till char backward on line
  • ; - Repeat last f/F/t/T
  • , - Repeat last f/F/t/T reversed
  • / - Search forward
  • ? - Search backward
  • n - Next search result
  • N - 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 operator
  • y - Yank operator
  • dd - Delete line (double press)
  • yy - Yank line (double press)

Not Implemented

  • c - Change operator
  • cc - Change line
  • > - Indent right
  • < - Indent left
  • = - Auto-indent
  • gq - Format text
  • gu - Lowercase
  • gU - Uppercase
  • g~ - Swap case
  • ! - Filter through external command

Actions

Insert Mode Entry

  • i - Insert before cursor
  • a - Insert after cursor
  • I - Insert at start of line
  • A - Insert at end of line
  • o - Open line below
  • O - Open line above
  • s - Substitute character (delete + insert)
  • S - Substitute line (delete line + insert)
  • C - Change to end of line
  • gi - Insert at last insert position

Delete Actions

  • x - Delete character under cursor
  • D - Delete to end of line
  • X - Delete character before cursor
  • J - Join lines
  • gJ - Join lines without space

Yank/Paste

  • p - Paste after cursor
  • P - Paste before cursor
  • gp - Paste after and move cursor to end
  • gP - 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 - Undo
  • ctrl+r - Redo
  • . - Repeat last change
  • U - Undo all changes on line

Other Normal Mode

  • r{char} - Replace character
  • R - Replace mode
  • ~ - Swap case of character
  • ctrl+a - Increment number
  • ctrl+x - Decrement number
  • q{reg} - Record macro
  • @{reg} - Play macro
  • @@ - Repeat last macro
  • ctrl+c - Quit (custom)

Visual Mode

Mode Entry

  • v - Character-wise visual mode
  • V - Line-wise visual mode
  • ctrl+v - Block-wise visual mode
  • gv - Reselect last visual selection

Visual Mode Operations

  • Motions work in visual mode
  • d / x - Delete selection
  • y - Yank selection
  • c - Change selection
  • > - Indent selection
  • < - Unindent selection
  • = - Auto-indent selection
  • ~ - Swap case of selection
  • u - Lowercase selection
  • U - Uppercase selection
  • J - Join selected lines
  • o - Go to other end of selection
  • O - Go to other corner (block mode)

Insert Mode

Text Input

  • Character insertion
  • Enter - Insert newline
  • Tab - Insert tab/spaces
  • Backspace - Delete character before cursor
  • Delete - Delete character under cursor
  • ctrl+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 line
  • ctrl+d - Unindent line

Exit Insert Mode

  • Esc - Exit to normal mode
  • ctrl+c - Exit to normal mode
  • ctrl+[ - Exit to normal mode

Command Mode

Entry/Exit

  • : - Enter command mode
  • Esc - Exit command mode
  • Enter - Execute command

Editing

  • Character input
  • Backspace - Delete character
  • Delete - Delete character
  • ctrl+w - Delete word
  • Left / 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

Not Implemented

  • iw / aw - Inner/around word
  • iW / aW - Inner/around WORD
  • is / as - Inner/around sentence
  • ip / ap - Inner/around paragraph
  • i" / a" - Inner/around double quotes
  • i' / a' - Inner/around single quotes
  • i` / a` - Inner/around backticks
  • i( / a( - Inner/around parentheses
  • i[ / a[ - Inner/around brackets
  • i{ / a{ - Inner/around braces
  • i< / a< - Inner/around angle brackets
  • it / at - Inner/around tag

Marks & Jumps

Not Implemented

  • m{a-z} - Set local mark
  • m{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 change
  • ctrl+o - Jump back in jump list
  • ctrl+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 buffers
  • ctrl+^ / 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 buffer
  • a - Active (loaded and visible)
  • h - Hidden (loaded but not visible)
  • + - Modified
  • - - Read-only
  • = - Readonly (cannot be modified)

Hidden Buffers

  • :set hidden - Allow switching with unsaved changes
  • Prompt to save when closing modified buffer
  • :q behavior 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
  • 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

Testing Coverage

Well Tested

  • Basic motions (h, j, k, l)
  • Word motions (w, e, b)
  • Jump motions (G, gg, 0, $, _, ^, |)
  • Scroll actions (ctrl+u, ctrl+d)
  • Delete operator (d, dd)
  • Yank operator (y, yy)
  • Paste actions (p, P)
  • Change operator (c, cc, C)
  • Substitute action (s, S)
  • Insert mode entry (i, a, I, A, o, O)
  • Insert mode editing (enter, backspace, delete, tab, ctrl+w)
  • Visual modes (v, V, ctrl+v)
  • Visual mode with motions
  • Delete actions (x, D)
  • Command mode basics
  • Register behavior