A modern editor for the terminal (written in Rust). It is highly experimental code.
Here's what it looks like at the moment
The recommended way to install zee using cargo install
$ cargo install zee
- The 100 FPS editor. Cursor movement and edits render under 10ms. Everything else happens asynchronously (syntax parsing and highlighting, IO to/from disk, file pickers).
- Buffers are backed by a fast B-tree implementation of a rope (via cessen's ropey).
- Uses Tree-sitter for generating a parse tree from your code. This AST is used for syntax highlighting and on the fly validation. As it is an incremental parsing library, it scales to files with 1 million lines of code.
- multi-buffer, multi-pane -- shared state beats tmux with multiple editors
- fast recursive file search with fuzzy matching and aware of ignore files (using BurntSushi's ripgrep crates walkdir, ignore)
- local file picker with directory navigation
- a pragmatic editor, not a research endeavour into CRDTs
The editor depends on a bunch of tree sitter parsers, one for each supported language. These are included as git submodules in grammar/languages/tree-sitter-*
.
After cloning the repository, you have to run
git submodule update --init --recursive
then you should be able to build normally with cargo.
To start the editor run zee
. As expected, you can pass in one or multiple files to be opened, e.g. zee file1 file2
.
Zee uses Emacs-y keybindings. Below, C-
means Ctrl
+ the specified key, e.g. C-k
is Ctrl + k
. Similarly A-
means Alt
+ the specified key. Empty spaces denote a sequence of key presses, e.g. C-x C-c
means first pressing C-x
followed by C-c
.
The following keybindings are available:
C-p
,Up
move upC-n
,Down
move downC-b
,Left
move backwardsC-f
,Right
move forwardsC-a
,Home
move to start of lineC-e
,End
move to end of lineC-v
,PageDown
move down one pageA-v
,PageUp
move up one pageA-<
move to the beginning of the bufferA->
move to the end of the bufferC-l
centre the cursor visually
C-d
delete forwardsBackspace
delete backwardsC-k
delete the current lineC-SPC
enter selection mode at the current cursor positionC-w
cut selectionA-w
copy selectionC-x h
select the entire buffer and move the cursor to the beginningC-y
paste selection (yank in Emacs)C-g
clear the current selectionC-z
,C-/
undoC-x C-s
save the current buffer
C-x C-f
choose a file to open using a directory-level pickerC-x C-v
search recursively for a file to open from the selected directoryC-l
while opening a file, go to the parent directoryTab
while opening a file, fills in the currently selected path
C-g
cancel the current operationC-x 0
close the current bufferC-x o
,C-x C-o
switch focus to the next bufferC-x C-c
quitC-t
cycle through the available themes