|0.3.2||Apr 23, 2022|
|0.3.1||Apr 16, 2022|
|0.2.1||Apr 10, 2022|
|0.1.2||Mar 30, 2020|
#30 in Text editors
86 downloads per month
Zee is a modern editor for the terminal, in the spirit of Emacs. It is written in Rust and it is somewhat experimental.
In the old tradition of text editor demos, here's what it currently looks like editing its own source code
- 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).
- Edit tree history, aka. undo/redo tree
- 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 recommended way to install zee is using cargo
cargo install zee
To start the editor run
zee. As expected, you can pass in one or multiple files to be opened, e.g.
zee file1 file2.
To enable integration with your system's clipboard, install zee with the
cargo install --features system-clipboard zee
To build with clipboard support, you'll additionally need x11 bindings on Linux. On a Debian-y distribution, you can install them like this
sudo apt install xorg-dev libxcb-shape0-dev libxcb-xfixes0-dev
Zee uses Tree-sitter parsers for syntax highlighting and on the fly validation of source code. To download and build the parsers, simply run
The parsers are downloaded, compiled and placed in a
runtime/ directory inside the config
directory. The exact location is system specific, e.g.
~/.config/zee/runtime on Linux or macOS
%AppData%/zee/runtime on Windows.
building from source
Zee is written in Rust and it requires the latest stable compiler to build. You can use cargo to build it as you'd expect
git clone https://github.com/zee-editor/zee.git && cd zee cargo run -- zee/src/main.rs
The editor also depends on tree sitter parsers, one for each supported language.
For now, those are configured statically using the
zee/modes.ron file. Each
tree sitter parser is compiled to a shared object which is linked dynamically.
cargo build downloads and builds this parsers just to ensure
everything works correctly. You can skip this step by setting
ZEE_DISABLE_GRAMMAR_BUILD=t cargo run -- zee/src/main.rs
To start the editor run
zee. As expected, you can pass in one or multiple files to be opened,
zee file1 file2.
Zee uses Emacs-y keybindings. Feeling at home with the default Emacs bindings is a goal of the project.
Ctrl + the specified key, e.g.
Ctrl + k. Similarly
Alt + the specified key. Empty spaces denote a sequence of key presses, e.g.
C-x C-c means
C-x followed by
The following keybindings are available:
A-fmove forward by one word
A-bmove backward by one word
A-nmove forward by one paragraph
A-pmove backward by one paragraph
Homemove to start of line
Endmove to end of line
PageDownmove down one page
PageUpmove up one page
A-<move to the beginning of the buffer
A->move to the end of the buffer
C-lcentre the cursor visually
C-kdelete the current line
C-SPCenter selection mode at the current cursor position
C-x hselect the entire buffer and move the cursor to the beginning
C-ypaste selection (yank in Emacs)
C-gclear the current selection
C-/undo previous command
C-qredo previous command
C-x uopen the edit tree viewer
Enterinsert a new line, moving the cursor
C-oinsert a new line after the cursor, without moving it
C-x C-ssave the current buffer
C-x C-fchoose a file to open using a directory-level picker
C-x C-vsearch recursively for a file to open from the selected directory
C-lwhile opening a file, go to the parent directory
Tabwhile opening a file, fills in the currently selected path
edit tree viewer
Upmove up the tree to an older revision, undoing the command
Downmove down the tree to a newer revision, redoing the command
Leftselect the left child of current revision
Rightselect the right child of current revision
C-gcancel the current operation
C-x kchoose a buffer to close
C-x bswitch the current window to another buffer
C-x C-0close the focused window
C-x C-1make the focused window fullscreen
C-x C-2split the focused window below
C-x C-3split the focused window to the right
C-x C-oswitch focus to the next buffer
C-x C-tcycle 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.