Zee is a modern editor for the terminal, written in Rust. It is highly experimental code.
In the old tradition of text editor demos, here's what it currently looks like editing its own source code
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
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.