zee-editor / zee

A modern text editor for the terminal written in Rust
Apache License 2.0
1.48k stars 42 forks source link
async cross-platform emacs ide incremental-parsing rope rust-lang text-editor tree-sitter

Zi logo

Build Status Crates.io

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

Peek 2020-03-09 00-16

features

getting started

The recommended way to install zee is using cargo

cargo install --locked 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.

install options

To enable integration with your system's clipboard, install zee with the system-clipboard feature

cargo install --locked --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

nightly version

To install the latest version directly from the official repository, just run the following command:

cargo install --git https://github.com/zee-editor/zee

Important: please note that the code base state fetched by this instruction could contain work-in-progress features which might need some further maintenance before being included in the release of the next stable version.

configuration

Zee is customised using a config.ron file inside the configuration directory.

To create the default configuration file, use the --init command line argument.

zee --init

If config.ron doesn't already exist, zee --init will create a fresh configuration file with comments, ready to be edited.

The exact location of the configuration directory is system specific, e.g. ~/.config/zee on Linux or macOS and %AppData%/zee on Windows. The location of the configuration directory can be overwritten by setting the environment variable ZEE_CONFIG_DIR.

ZEE_CONFIG_DIR=/home/user/.zee zee --init --build

This command will initialise a configuration directory at /home/user/.zee and immediately download and build the configured tree sitter parsers. See below details on the --build command line argument.

syntax highlighting

Zee uses Tree-sitter parsers for syntax highlighting and on the fly validation of source code. Each tree sitter parser is compiled to a shared object which is linked dynamically. To download and build the parsers, simply run

zee --build

The parsers are downloaded, compiled and placed in a grammars directory inside the config directory. The exact location is system specific, e.g. ~/.config/zee/grammars on Linux or macOS and %AppData%/zee/grammars on Windows.

The parsers are either the ones configured in the config.ron file or the default ones if no configuration file is found.

If you change the parsers in the config.ron file, you'll have to re-run the build command.

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, see configuration. Each tree sitter parser is compiled to a shared object which is linked dynamically.

Running cargo build downloads and builds this parsers just to ensure everything works correctly. You can skip this step by setting ZEE_DISABLE_GRAMMAR_BUILD, e.g.

ZEE_DISABLE_GRAMMAR_BUILD=t cargo run -- zee/src/main.rs

usage

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. Feeling at home with the default Emacs bindings is a goal of the project.

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

movement

editing

file navigation

edit tree viewer

global

license

This project is licensed under either of

at your discretion.

contribution

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.