hjkl 0.4.4

Vim-modal terminal editor: standalone TUI built on the hjkl engine.
hjkl-0.4.4 is not a library.

hjkl

Vim-modal terminal editor. Standalone TUI built on the hjkl engine.

CI crates.io License: MIT Website

Native vim-modal editor. Single static binary, no plugins, no config files. Built on the hjkl-engine + rope buffer.

Status

0.4.0 — multi-buffer editing, fuzzy file/buffer/grep pickers with syntax-highlighted preview, tree-sitter highlighting + comment-marker overlay, smart indent, .editorconfig, softtabstop, and clipboard via our in-house hjkl-clipboard (sync + async, OSC 52 SSH fallback). See SCOPE.md for the full feature roadmap.

Install

cargo install hjkl

Or grab a pre-built binary from the releases page.

Usage

hjkl                  # empty buffer
hjkl file.txt         # open file
hjkl a.rs b.rs c.rs  # open multiple files
hjkl -R file.txt      # read-only
hjkl +42 file.txt     # jump to line 42
hjkl +/foo file.txt   # search for "foo" on open
hjkl +picker          # open fuzzy file picker immediately

What works (v0)

  • Normal / Insert / Visual / Command modes with full mode-indicator cursor shape
  • All standard motions, operators, and text objects (free from the engine FSM)
  • Status line: filename, mode, cursor position, dirty marker; REC@r badge while recording a macro; pending count + operator; search count [n/m]
  • Cursor-line background (subtle blue-grey; suppressed during : / / prompts)
  • :w save, :q quit, :wq / :x write-quit, :e open file
  • :set options, :%s search-and-replace with confirmation prompt
  • :!cmd shell exec, :r !cmd / :r file read-into-buffer
  • :reg, :marks, :jumps, :changes — output shown as a centered info popup
  • / / ? incremental search with match highlighting
  • Undo / redo, marks, registers (shared across buffer slots)
  • Terminal resize handled mid-frame
  • Read-only guard (-R flag + engine-level mutation block)
  • Jump to line (+N) and search-on-open (+/pattern)
  • Multi-buffer: open many files (hjkl a.rs b.rs c.rs); tab line at top when more than one buffer is open; switch with :bn / :bp / :bd[!] / :bfirst / :blast / :b N / :b name / :ls / :buffers; alt buffer (Ctrl-^ / :b#); cycle with Shift-H / Shift-L and gt / gT / ]b / [b; bulk save/quit with :wa / :qa[!] / :wqa[!]; helix-style :q closes the active slot when more than one buffer is open
  • Fuzzy file picker (<Space><Space> / <Space>f / :picker / hjkl +picker) with syntax-highlighted preview
  • Buffer picker (<Space>b / :bpicker)
  • Grep picker (<Space>/ / :rg <pattern>) — ripgrep-backed content search with grep / findstr fallback; preview jumps to and highlights the match line
  • Tree-sitter syntax highlighting (Rust, Markdown, JSON, TOML, SQL bundled)
  • Comment marker overlayTODO / FIXME / FIX / NOTE / INFO / WARN markers highlighted; consecutive single-line comments inherit the marker
  • Smart indent — Enter / o / O auto-indent after { / ( / [; close brace on a new line auto-dedents
  • .editorconfig supportindent_style, indent_size, tab_width, and max_line_length applied on file open
  • Tab settings: tabstop, softtabstop, expandtab (defaults: 4-space soft tabs); tabs render as visually aligned spaces; Backspace deletes a soft tab as a unit; :set tabstop=N updates rendering end-to-end
  • Per-buffer git diff signs (+ / ~ / _ in the gutter) and tree-sitter diagnostic signs

What's deferred

  • Splits / multiple windows
  • Plugins / config files
  • LSP

Related crates

  • hjkl-buffer — rope-based buffer
  • hjkl-engine — modal-editing FSM
  • hjkl-editor — ex commands, search, shell exec
  • hjkl-tree-sitter — bundled tree-sitter grammars + Neovim-flavoured highlight themes
  • hjkl-clipboard — system clipboard adapter
  • hjkl-form — single-line form input built on the engine (used by pickers, : / / prompts)
  • hjkl-picker — fuzzy picker subsystem (Picker, PickerLogic, FileSource, RgSource, scorer)
  • hjkl-ratatui — ratatui rendering adapters + shared spinner

See docs.rs/hjkl-engine for the engine trait reference.

Links

License

MIT. See LICENSE.