Release 23.03 Highlights
Helix is a modal text editor with built-in support for multiple selections, Language Server Protocol (LSP), tree-sitter, and experimental support for Debug Adapter Protocol (DAP).
Today marks the 23.03 release. First, a big thank you to everyone involved! This release includes changes from 102 contributors. Today's release brings some especially useful and exciting features, so let's jump right in.
Soft-wrap
Soft-wrap breaks up lines to fit in view without inserting actual line break
characters into the text (so called "hard-wrapping"). This can be useful for
reading and editing documentation or code with especially long lines. Enable
soft-wrap in your config with the editor.soft-wrap.enable
key:
# ~/.config/helix/config.toml
[editor.soft-wrap]
enable = true
Heuristics for where to break lines and the wrap indicator may also be configured.
Soft-wrap is the first feature implemented on top of a new "virtual text" API within the Helix codebase. The virtual text API allows us to decorate and manipulate the actual text in a document without disturbing positioning and modifications. The virtual text API opens the door for many new exciting features like the inlay hints we'll see next.
Inlay hints
Inlay hints are a new feature in the latest LSP specification. Language servers can provide editors with hints to show in a document. In the example above, rust-analyzer provides type hints for variables and intermediary expressions as well as parameter names in function calls.
Inlay hints can be enabled in your config with the lsp.display-inlay-hints
key.
Initial support for snippets
LSP snippets are a way for language servers to provide more complex completions for an editor. Language servers can specify where to place cursors within a completion (tabstops), placeholder values and more. Helix now has initial support for LSP completions, leaving more advanced snippet features like virtual placeholders, multiple tabstops, and variable substitutions for future work.
Dynamic workspace symbol picker
The workspace symbol picker (<space>S
) is an LSP-driven feature for looking
up a symbol in a project. Large projects might have many symbols, though, so
this symbol picker typically wouldn't load them all at once. The workspace
symbol picker has been reworked in this release though to dynamically
re-request symbols with a new query as you type in the picker. This lets the
language server narrow down the number of symbols and only tell Helix about the
ones relevant to the search. This rework fixes compatibility with some language
servers which returned empty symbols with no query (gopls
, pyright
,
clangd
) or limited results (rust-analyzer
).
The "dynamic picker" introduced in this refactor may benefit other pickers in
the future, for example allowing the global search picker (<space>/
) to
update on-the-fly as you change the query.
Version control HEAD statusline element
A new statusline element has been added which displays the version control
HEAD. Add this to your statusline by introducing the "version-control"
element in the
editor.statusline
section of your config for the left
, center
or right
sides.
Enhanced keyboard protocol
Support for the enhanced keyboard protocol is now enabled. Terminals that
support the protocol (Kitty, WezTerm) can now send unambiguous keycodes to
Helix, enabling key combinations that weren't possible to bind before like
C-/
, C-h
or S-backspace
. This functionality works out-of-the-box for
terminals that support the protocol.
Runtime directory refactor
Helix keeps files like tree-sitter parsers and queries, themes and the tutor
file in a special "runtime" directory. This directory is typically installed
by your package manager and shouldn't be modified by hand. Multiple runtime
directories are now supported, so you can keep the runtime files installed by
your package manager unchanged while adding new tree-sitter parsers and
queries to a local runtime directory. On Unix systems you can add files to the
~/.config/helix/runtime
directory which take precedence over the runtime
directory installed by a package manager.
Wrapping up
These flashy features are just the tip of the iceberg though. Check out the 23.03 changelog for the full details on all of the changes in this release.
Come chat about usage and development questions in the Matrix space and follow along with Helix's development in the GitHub repository.