A big shout out to all the contributors! We had 46 contributors in this release.
Helix has popped up in Scoop, FreeBSD Ports and Gentu GURU!
The following is a quick rundown of the larger changes, there were many more (check the git history for more details).
Breaking changes:
- A couple of keymaps moved to resolve a few conflicting keybinds.
- Documentation popups were moved from
K
tospace+k
K
is nowkeep_selections
which filters selections to only keeps ones matching the regexkeep_primary_selection
moved fromspace+space
to,
Alt-,
is nowremove_primary_selection
which keeps all selections except the primary one- Opening files in a split moved from
C-h
toC-s
- Documentation popups were moved from
- Some configuration options moved from a
[terminal]
section to[editor]
. Consult the documentation for more information.
Features:
- LSP compatibility greatly improved for some implementations (Julia, Python, Typescript)
- Autocompletion! Completion now triggers automatically after a set idle timeout
- Completion documentation is now displayed next to the popup (#691)
- Treesitter textobjects (select a function via
mf
, class viamc
) (#728) - Global search across entire workspace
space+/
(#651) - Relative line number support (#485)
- Prompts now store a history (72cf86e)
:vsplit
and:hsplit
commands (#639)C-w h/j/k/l
can now be used to navigate between splits (#860)C-j
andC-k
are now alternative keybindings toC-n
andC-p
in the UI (#876)- Shell commands (shell-pipe, pipe-to, shell-insert-output, shell-append-output, keep-pipe) (#547)
- Searching now defaults to smart case search (case insensitive unless uppercase is used) (#761)
- The preview pane was improved to highlight and center line ranges
- The user
languages.toml
is now merged into defaults, no longer need to copy the entire file (dc57f8dc) - Show hidden files in completions (#648)
- Grammar injections are now properly handled (dd0b15e)
v
in select mode now switches back to normal mode (#660)- View mode can now be triggered as a "sticky" mode (#719)
f
/t
and object selection motions can now be repeated viaAlt-.
(#891)- Statusline now displays total selection count and diagnostics counts for both errors and warnings (#916)
New grammars:
- Ledger (#572)
- Protobuf (#614)
- Zig (#631)
- YAML (#667)
- Lua (#665)
- OCaml (#666)
- Svelte (#733)
- Vue (#787)
- Tree-sitter queries (#845)
- CMake (#888)
- Elixir (we switched over to the official grammar) (6c0786e)
- Language server definitions for Nix and Elixir (#725)
- Python now uses
pylsp
instead ofpyls
- Python now supports indentation
New themes:
Fixes:
- Fix crash on empty rust file (#592)
- Exit select mode after toggle comment (#598)
- Pin popups with no positioning to the initial position (12ea3888)
- xsel copy should not freeze the editor (6dd7dc4)
*
now only sets the search register and doesn't jump to the next occurrence (3426285)- Goto line start/end commands extend when in select mode (#739)
- Fix documentation popups sometimes not getting fully highlighted (066367c)
- Refactor apply_workspace_edit to remove assert (b02d872)
- Wrap around the top of the picker menu when scrolling (c7d6e44)
- Don't allow closing the last split if there's unsaved changes (3ff5b00)
- Indentation used different default on hx vs hx new_file.txt (c913bad)
A minor release that includes:
- A fix for rendering glitches that would occur after editing with multiple selections.
- CI fix for grammars not being cross-compiled for aarch64
A big shout out to all the contributors! We had 28 contributors in this release.
Two months have passed, so this is another big release. A big thank you to all the contributors and package maintainers!
Helix has popped up in Arch, Manjaro, Nix, MacPorts and Parabola and Termux repositories!
A large scale refactor landed that allows us to support zero width (empty) selections in the future as well as resolves many bugs and edge cases.
- Multi-key remapping! Key binds now support much more complex usecases (#454)
- Pending keys are shown in the statusline (#515)
- Object selection / textobjects.
mi(
to select text inside parentheses (#385) - Autoinfo:
whichkey
-like popups which show available sub-mode shortcuts (#316) - Added WORD movements (W/B/E) (#390)
- Vertical selections (repeat selection above/below) (#462)
- Selection rotation via
(
and)
(66a90130) - Selection contents rotation via
Alt-(
andAlt-)
(02cba2a) - Completion behavior improvements (f917b5a4, 627b899)
- Fixed a language server crash (385a6b5a)
- Case change commands (
`
,~
,<a-`>
) (#441) - File pickers (including goto) now provide a preview! (#534)
- Injection query support. Rust macro calls and embedded languages are now properly highlighted (#430)
- Formatting is now asynchronous, and the async job infrastructure has been improved (#285)
- Grammars are now compiled as separate shared libraries and loaded on-demand at runtime (#432)
- Code action support (#478)
- Mouse support (#509, #548)
- Native Windows clipboard support (#373)
- Themes can now use color palettes (#393)
:reload
command (#374)- Ctrl-z to suspend (#464)
- Language servers can now be configured with a custom JSON config (#460)
- Comment toggling now uses a language specific comment token (#463)
- Julia support (#413)
- Java support (#448)
- Prompts have an (in-memory) history (63e54e30)
A big shout out to all the contributors! We had 24 contributors in this release.
Another big release.
Highlights:
- Indentation is now automatically detected from file heuristics. (#245)
- Support for other line endings (CRLF). Significantly improved Windows support. (#224)
- Encodings other than UTF-8 are now supported! (#228)
- Key bindings can now be configured via a
config.toml
file (#268) - Theme can now be configured and changed at runtime (please feel free to contribute more themes!) (#267)
- System clipboard yank/paste is now supported! (#310)
- Surround commands were implemented (#320)
Features:
- File picker can now be repeatedly filtered (#232)
- LSP progress is now received and rendered as a spinner (#234)
- Current line number can now be themed (#260)
- Arrow keys & home/end now work in insert mode (#305)
- Cursors and selections can now be themed (#325)
- Language servers are now gracefully shut down before
hx
exits (#287) :show-directory
/:change-directory
(#335)- File picker is now sorted by access time (before filtering) (#336)
- Code is being migrated from helix-term to helix-view (prerequisite for alternative frontends) (#366)
x
andX
merged (f41688d9)
Fixes:
- The IME popup is now correctly positioned (#273)
- A bunch of bugs regarding
o
/O
behavior (#281) ~
expansion now works in file completion (#284)- Several UI related overflow crashes (#318)
- Fix a test failure occuring only on
test --release
(4f108ab1) - Prompts now support unicode input (#295)
- Completion documentation no longer overlaps the popup (#322)
- Fix a crash when trying to select
^
(9c534614) - Prompt completions are now paginated (39dc09e6)
- Goto did not work on Windows (503ca112)
Includes a fix where wq/wqa could exit before file saving completed.
A big shout out to all the contributors! We had 18 contributors in this release.
Enough has changed to bump the version. We're skipping 0.1.x because previously the CLI would always report version as 0.1.0, and we'd like to distinguish it in bug reports..
-
The
runtime/
directory is now properly detected on binary releases and on cargo run.~/.config/helix/runtime
can also be used. -
Registers can now be selected via " (for example
"ay
) -
Support for Nix files was added
-
Movement is now fully tested and matches kakoune implementation
-
A per-file LSP symbol picker was added to space+s
-
Selection can be replaced with yanked text via R
-
1g
now correctly goes to line 1 -
ctrl-i
now correctly jumps backwards in history -
A small memory leak was fixed, where we tried to reuse tree-sitter query cursors, but always allocated a new one
-
Auto-formatting is now only on for certain languages
-
The root directory is now provided in LSP initialization, fixing certain language servers (typescript)
-
LSP failing to start no longer panics
-
Elixir language queries were fixed
Keymaps:
-
Add mappings to jump to diagnostics
-
Add gt/gm/gb mappings to jump to top/middle/bottom of screen
-
^ and $ are now gh, gl
-
The runtime/ can now optionally be embedded in the binary
-
Haskell syntax added
-
Window mode (ctrl-w) added
-
Show matching bracket (vim's matchbrackets)
-
Themes now support style modifiers
-
First user contributed theme
-
Create a document if it doesn't exist yet on save
-
Detect language on a new file on save
-
Panic fixes, lots of them