vorto
A modal terminal text editor written in Rust. Tree-sitter syntax highlighting, Language Server Protocol support, fuzzy pickers, and optional GitHub Copilot — all in a single, dependency-light binary.
Highlights
- Vim-style modal editing with operators, motions, tree-sitter text
objects, multi-cursor, jump labels, and
.-repeat. - Tree-sitter highlighting with on-demand grammar install — no
tree-sitter-cli, no external repos to clone, no Node toolchain. - First-class LSP: diagnostics, hover, completion, signature help, code actions, goto definition / declaration / implementation, references, rename, format-on-save.
- Optional Copilot via
copilot-language-server— ghost-text inline completions when present, silent when not. - Async architecture keeps the UI responsive while language servers index and grammars parse in the background.
- Git-aware out of the box: diff gutter, picker respects
.gitignore, dirty-state indicator. - Single static binary, pure Rust, no runtime dependencies beyond a C compiler for building grammars on demand.
Features
Editing
- Normal / Insert / Visual (char, line, block) / Command modes
- Operators:
dyc>< - Motions:
h j k l,w b e W B E ge gE,f F t T ; ,,gg G H M L,{ },%,<C-f> <C-b> <C-d> <C-u> - Search:
/ ?,n N,* #,gn gN - Text objects:
iw aw,i" a",i( a(,i{ a{,i[ a[,ip ap, plus tree-sitter-awareif af(function),ic ac(class),i, a,(parameter) - Multi-cursor:
+add next match,Shift-Downadd below,-pop,<space>,clear - Jump labels:
gw(easymotion-style 2-char word jumps) - Auto-pair brackets and quotes, language-aware comment toggle
(
<space>c), case toggle, line join, repeat with. - Undo / redo (
u/<C-r>), system clipboard yank/paste viaarboard
Language Server Protocol
| Feature | Binding / Trigger |
|---|---|
| Diagnostics | inline, navigate with ]d / [d |
| Hover | K (scrollable markdown popup) |
| Completion | <C-n> / <C-p> + trigger chars |
| Signature help | auto on ( / , |
| Code actions | <space>a |
| Goto definition | gd |
| Goto declaration | gD |
| Goto implementation | gi |
| References | gr (preview picker) |
| Rename | <space>r |
| Format on save | :w runs configured formatter |
Servers and formatters ship with built-in defaults for the common
languages (rust-analyzer, pyright, gopls, clangd, vtsls, and ~30
more). Override or add to them per-language in config.toml.
Tree-sitter
- Built-in grammar recipes for 37 languages: rust, python, go, javascript, typescript, tsx, toml, kotlin, c, cpp, java, bash, json, yaml, markdown, html, css, lua, ruby, zig, sql, dockerfile, make, hcl, diff, vue, svelte, haskell, elixir, nix, c-sharp, swift, php, dart, ocaml, graphql, fish.
- Install on demand — only the grammars you use are built and cached:
- Uses
highlights.scmfor coloring,indents.scmfor auto-indent, andtextobjects.scmfor tree-sitter text objects. - Falls back to plain text when a grammar is unavailable.
UI
- Fuzzy pickers with live syntax-highlighted preview:
- Files —
:e(git-aware) - Buffers —
:ls/:buffers - Document symbols —
<space><space>(LSP)
- Files —
- File explorer tree on
<space>e— navigate withj k l/ arrows, toggle hidden files with., toggle.gitignored files withh, filter with/, and create / delete / rename / move witha/d/r/m - Splits:
:split/:vsplit,<space>w h/<space>w v, cycle with<C-w w> - Status bar with mode badge, filename, cursor position, dirty flag
- Configurable indentation guides (line / dot, skip levels)
- Mode-specific cursor shapes (block / bar / underline)
- Mouse support: click to move cursor, scroll to scroll
- Non-blocking toast notifications
AI (optional)
If copilot-language-server is on your PATH, vorto enables inline
ghost-text completions: accept with <Tab>, dismiss with <Esc>.
Missing the binary is a no-op — no errors, no prompts.
Git
- Diff gutter:
+added,~modified,⋮deleted marker - File picker honors
.gitignoreand your global excludes file - Status bar surfaces buffer dirty state
Install
From crates.io:
From source:
# or
Requires a Rust toolchain (edition 2024). A C compiler is needed when building tree-sitter grammars.
Usage
|
|
Configuration
Configuration lives under $XDG_CONFIG_HOME/vorto/ (typically
~/.config/vorto/):
config.toml— editor settings, keymap, theme, per-language LSP / formatter / indent overrides, and a[finder]table (hidden_patterns,max_items) controlling what the file picker and explorer treat as hiddengrammars/— installed tree-sitter.solibrariesqueries/<lang>/— installedhighlights.scm,indents.scm,textobjects.scm
See the documentation site for the full configuration reference.
License
Licensed under either of
- MIT License (LICENSE-MIT)
- Apache License, Version 2.0 (LICENSE-APACHE)
at your option.