/helix

A post-modern modal text editor.

Primary LanguageRustMozilla Public License 2.0MPL-2.0

Helix

A kakoune / neovim inspired editor, written in Rust.

Build status Matrix License

The editing model is very heavily based on kakoune; during development I found myself agreeing with most of kakoune's design decisions. If you want to learn more about the design of helix; see our vision.

For more information, see the website or documentation.

All shortcuts/keymaps can be found on the website.

✨ Features

  • Vim-like modal editing
  • Multiple selections
  • Built-in language server support
  • Smart, incremental syntax highlighting and code editing via tree-sitter

It's a terminal-based editor first, but I'd like to explore a custom renderer (similar to emacs) in wgpu or skulpin. See #39 for more info.

📦 Installation

Note: Installing from source requires extra configuration for syntax highlighting and themes to work. See runtime.

Having trouble? Check out the troubleshooting section.

Binary

Pre-build binaries are available in the releases page.

Packages are also available:

Packaging status

macOS

Helix can be installed on macOS through homebrew:

brew tap helix-editor/helix
brew install helix

From source

git clone --recurse-submodules --shallow-submodules -j8 https://github.com/helix-editor/helix
cd helix
cargo install --path helix-term

This will install the hx binary to $HOME/.cargo/bin.

Runtime

Note: Installing runtime is not required for linux packages or binaries.

Helix requires extra files for syntax highlighting and themes. To install, symlink the runtime/ folder to the directory below.

OS Path
Linux & MacOS ~/.config/helix/
Windows Appdata/Roaming/Helix

For example: ~/.config/helix/runtime

Notes

The runtime directory can be overridden via the HELIX_RUNTIME environment variable.

Running via cargo also doesn't require setting explicit HELIX_RUNTIME path, it will automatically detect the runtime directory in the project root.

Setting up runtime is not required for linux. Packages wrap the hx binary with a wrapper that sets HELIX_RUNTIME to the install directory.

📚 Documentation

❤️ Contributing ️

Contributors are very welcome! No contribution is too small and all contributions are valued!

Some suggestions to get started:

  • You can look at the good first issue label on the issue tracker.
  • Help with packaging on various distributions needed!
  • To use print debugging to the ~/.cache/helix/helix.log file, you must:
    • Print using log::info!, warn!, or error!. (log::info!("helix!"))
    • Use the parameter (hx -v <file>) to increase log verbosity. Increase the v's for more info, hx -vvv being most verbose.
  • If your preferred language is missing, integrating a tree-sitter grammar for it and defining syntax highlight queries for it is straight forward and doesn't require much knowledge of the internals.

We provide an architecture.md that should give you a good overview of the internals.

🙋 Getting help

Discuss the project on the community Matrix Space (make sure to join #helix-editor:matrix.org if you're on a client that doesn't support Matrix Spaces yet).