Helix

Developer Tools

A post-modern modal text editor.

Latest 25.07.1 · by HelixWebsitehelix-editor/helix

Changelog

25.07.1

This is a patch release which lowers the GLIBC requirements of the release artifacts published to GitHub (#13983)

View originalPermalink
How 25.07.1 went

25.07

As always, a big thank you to all of the contributors! This release saw changes from 195 contributors.

Breaking changes:

  • The parsing of the command line has been rewritten and now supports flags and expansions (#12527, #13018, 9574e55, 2d4c2a1, #13192, 67f1fe2, #13466, #13467, #13840)
    • Quoting and spaces are now handled differently. This can break existing keymaps which use typable commands, in particular :sh, :set-option or :toggle-option.
    • The :rsort command has been removed. Use the reverse flag instead: :sort --reverse

Features:

Commands:

  • Add copy_between_registers for interactive copying between two registers (066e938)
  • Add extend_to_file_{start,end}, select-mode variants of goto_file_{start,end} (#11767)
  • Add :! alias for :sh and :| for :pipe (#13263)
  • Add goto_column and extend_to_column (#13440)
  • Add an --insensitive/-i flag to the :sort command (#13560)
  • Add rotate_selections_first and rotate_selections_last (#13615)
  • Add a --no-format flag for all :write commands (2f56091)
  • Add a --skip-visible flag for :buffer-close-others and :buffer-close-others! (#5393)

Usability improvements:

  • Replace current file using A-ret in pickers rather than loading it in the background (#12605)
  • Set multiple selections when passing a file with multiple locations to hx (#12192)
  • Add path completion for multiple cursors (#12550, c9dc940)
  • Truncate long prompt lines with "…" (#12036, 9d6ea77, 0b9701e, d3fb8fc)
  • Allow specifying languages in :lsp-stop and :lsp-restart (#12578, 3d7e273)
  • Add m (nearest matching pair) to infobox popups for md and mr (#12650)
  • Add a hint message in the statusline when using :sort on a single selection (#12585)
  • Avoid wrapping around in goto_{next,prev}_diag (#12704)
  • Support responses from multiple language servers for LSP goto-definition (and declaration, type definition and implementation) and goto-references (f7394d5, 1a821ac, d285a8a)
  • Show formatter errors in :format (47f84d0)
  • Show typable command docs in keybinding infobox popups when the command takes no arguments (e9c16b7)
  • Add per-command titles to register selection infobox popups for select_register, insert_register and copy_between_registers (e0da129)
  • Add container name column to the LSP symbol picker (#12930)
  • Add a theme key for highlighting directories in completions and picker items (#12855, 7bebe0a)
  • Add editor.trim-final-newlines and editor.trim-trailing-whitespace config options (aa20eb8)
  • Warn when the configured theme is unusable because true-color is not available (#13058)
  • Allow configuring [workspace-]diagnostic statusline element severities (#13288, b0528bb)
  • Improve completion for shell commands (#12883, 532f241)
  • Show the primary selection index in the selections statusline element when there are multiple selections (#12326)
  • Use configured language server names when possible in --health output (#13573)
  • Add a statusline element for indentation style (#13632)
  • Set the working directory of language server commands to the workspace root (#13691)
  • Avoid jumpiness in the picker preview for languages with non-default tab widths (#13761)
  • Add a config option for limiting LSP inlay hint length (#13742)
  • Improve heuristics used in the diff gutter (#13722)
  • Allow moving a file with :move when its old path does not exist (#13748)
  • Allow moving a file into a directory with :move (#13922)
  • Show human-readable file sizes in the statusline message for file writes (#13627)
  • Add diagnostic source to the diagnosics pickers (#13758)
  • Show all active scopes under the cursor in :tree-sitter-highlight-name (4a85171)
  • Auto-close the LSP code-actions popup (#13832)
  • Add a configuration option for controlling atomic writes to disk (#13656)

Fixes:

  • Fix panic from using search_selection_detect_word_boundaries (*) at the end of the file (#12611)
  • Discard placeholder text for zero tabstop ${0:placeholder} (#12647)
  • Fix panic in goto_file (gf) on file names with non-ASCII characters (#12673)
  • Only accept unmodified characters in goto_word (gw) (f5f9f49, 0364521)
  • Skip recording keys pressed by macros while recording a macro (#12733)
  • Deny unknown fields in editor.smart-tab config (28047fe)
  • Fix soft-wrap word boundary detection for Unicode combining accent characters (#12483)
  • Fix clearing of infobox popups in select_register and insert_register commands (e882a75)
  • Fix handling of stderr of DAP child processes (d0d1693)
  • Cancel all pending requests when a DAP session terminates (26db541)
  • Properly discard out-of-date diagnostics (313a647)
  • Fix display of multiple language servers in hx --health (#12841)
  • Respect editor.default-yank-register in :yank-joined (#12890)
  • Escape percent character when pasting the history register into the picker (#12886)
  • Render rulers before the cursor (2d3b75a)
  • Avoid inserting final newlines in empty files (67879a1)
  • Gracefully handle partial failure in multi-language-server requests (#13156, 14cab4b)
  • Improve LSP progress message display in the statusline (#13180)
  • Fix behavior of <esc> removing added indentation in documents with CRLF line endings (702a961) …
View originalPermalink
How 25.07 went

25.01.1

25.01.1 is a patch release focusing on fixing bugs and panics from changes in 25.01.

Usability improvements:

  • Run external formatters from the document's directory (#12315)

Fixes:

  • Fix blank buffer picker preview on doc with no views (917174e)
  • Fix join_selections behavior on tabs (#12452)
  • Fix recognition for color LSP completion hex codes for some language servers (#12501)
  • Fix offsets to selections updated by open_below/open_above (o/O) in multi-cursor scenarios (#12465)
  • Fix offsets to selections updated by insert_newline when trimming whitespace in multi-cursor scenarios (4bd17e5)
  • Fix panic in path completion from resolving variables like ${HOME:-$HOME} (#12556)
  • Prevent line comment continuation when using change_selection (c) on a line above a comment (#12575)

Themes:

  • Update onelight (#12399)
  • Add cursorline color to iceberg themes (#12404)
  • Update special, ui.text.directory and ui.virtual.wrap in dark_plus (#12530)

New languages:

Updated languages and queries:

  • Fix Teal LSP name (#12395)
  • Highlight : in Rust as a delimiter (#12408)
  • Update Swift highlights (#12409)
  • Highlight JSX attributes as @attribute (#12416)
  • Improve markdown heading highlights (#12417)
  • Add comment tokens configuration for JSONC (b26903c)
  • Highlight the never type ! as a type in Rust (#12485)
  • Expand builtin function highlights for ECMA languages, Rust and Haskell (#12488)
  • Recognize .clang-tidy as YAML (#12498)
  • Update MATLAB grammar and indent queries (#12518)
  • Recognize rockspec as Lua (#12516)
  • Add /// to Dart comment tokens configuration (99d33c7)
  • Update Solidity grammar and queries (#12457)
  • Update Spade grammar and queries (#12583)
  • Re-enable Hare fetching and building by default (#11507)

Packaging:

  • --version now prints a leading zero for single-digit months, for example 25.01 (03f35af)
  • Pin the Ubuntu GitHub Actions runners used for releases to ubuntu-22.04 (#12464)
  • Produce a Debian package (.deb file) in the release GitHub Actions workflow (#12453)
View originalPermalink
How 25.01.1 went

25.01

As always, a big thank you to all of the contributors! This release saw changes from 171 contributors.

Breaking changes:

  • The editor.lsp.display-messages key now controls messages sent with the LSP window/showMessage notification rather than progress messages. If you want to enable progress messages you should now enable the editor.lsp.display-progress-messages key instead. (#5535)

Features:

  • Big refactor for Pickers (#9647, #11209, #11216, #11211, #11343, #11406)
    • Use a table layout and allow filtering by column
    • Reimplement global_search to allow changing the query dynamically
  • Add an alternative "inline" display for LSP diagnostics (#6417, #11815)
  • Support defining keybindings as macros (#4709)
  • Continue line comments in o/O and on <ret> in insert mode (#10996, #12213, #12215)
  • Allow configuring and switching clipboard providers at runtime (#10839, b855cd0, 467fad5, 191b0f0)
  • Add support for path completion (#2608)
  • Support bindings with the Super (Cmd/Win/Meta) modifier (#6592)
  • Support rendering and jumping between tabstops in snippet completions (#9801)
  • Allow theming directory completions (#12205, #12295)

Commands:

  • Add commands to move within snake_case or camelCase words (#8147)
  • Add search_selection_detect_word_boundaries (#12126)
    • This command takes the * key in normal and select mode, replacing search_selection which was moved to A-*.

Usability improvements:

  • Add :edit and :e aliases for :open (#11186, #11196)
  • Trim trailing newline from pipe command outputs when the input doesn't have a trailing newline (#11183, 4f63a46)
  • Add :mv alias for :move (#11256)
  • Return document display name instead of absolute path from the % special register (#11275)
  • Track view position on a per-view instead of per-document basis (#10559)
  • Improve scrolloff calculation to leave a gap in the middle (#11323)
  • Show a popup for stderr printed by failed :sh commands (#11239)
  • Add statusline errors when nothing is selected with s, K, A-K (#11370)
  • Add .svn as a workspace root marker (#11429)
  • Trim the end of :sh outputs (#11161)
  • Show LSP window/showMessage messages in the statusline (#5535)
  • Support finding workspace directories via .jj directories (#11685)
  • Join single-line comments with join_selections (J) (#11742)
  • Show anonymous syntax tree nodes in :tree-sitter-subtree (#11663, 38e8382)
  • Save an undo checkpoint before paste in insert mode (#8121)
  • Only break on ASCII spaces in :reflow (#12048)
  • Add a default-yank-register config option (#11430)
  • Show a statusline error for :format when a formatter is not available (#12183)
  • Change to the home directory with :cd with no arguments (#12042)
  • Change default comment token to # for unrecognized files (#12080, #12266, bae6a58)
  • Trim all trailing whitespace on insert_newline (#12177)
  • Change to the prior directory with :cd - (#12194)
  • Allow parsing - (with no modifiers) as a keybinding (#12191)
  • Improve opening statusline and error messages when opening duplicate files or directories (#12199)
  • Trim trailing colons in paths passed on the argv (#9963)
  • Show tree-sitter parser availability in hx --health <lang> (#12228)
  • Show a preview block for colors in the LSP completion menu (#12299)
  • Add infobox help for surround_add, surround_replace and surround_delete (#12262)

Fixes:

  • Respect document indentation settings in format_selections (=) (#11169)
  • Avoid switching the current document to normal mode during an LSP workspace/applyEdit operation (#11176)
  • Fix off-by-one in LSP find_completion_range (#11266)
  • Prefer file-system mtime to local system time for detecting external modifications (#11142, #11352, #11358, #11361)
  • Fix writing of hardlinks (#11340)
  • Prevent language servers from being automatically restarted when stopped with :lsp-stop (#11321)
  • Stable-sort LSP text edits (#11357)
  • Fix determination of current language layer in documents with nested language injections (#11365)
  • Fix a panic from :moveing a file to a new extension which starts a language server (#11387)
  • Fix a panic from duplicating the diff gutter (#11092)
  • Keep cursor position when exactly replacing text (#5930)
  • Fix a panic from jump_backward on a newly opened split (#11508)
  • Fix a panic from language servers sending an unknown diagnostic severity (#11569)
  • Fix a panic when drawing at the edge of the screen (#11737)
  • Fix git repo detection on symlinks (#11732)
  • Fix a panic from a language server sending an out-of-range active signature index in textDocument/signatureHelp (#11825)
  • Fix a panic from using C-k in a prompt ending in a multi-byte character (#12237)
  • Expand tildes in paths passed to :read (#12271)
  • Respect per-language workspace-lsp-roots configuration when opening new documents (#12223)
  • Consistently replace line-endings in paste/replace commands (c262fe4)
  • Fix formatting in error statusline messages when inspecting variables in DAP (#12354)
  • Fix invisible printing of headers in --health output on light terminals (#12355)
  • Accept integers serialized as floats in the JSONRPC id field (#12376)

Themes:

  • Bring kanagawa colors better in line with neovim version (#11187, #11270)
  • Add ao (#11063)
  • Update dark_plus (#11415)
  • Add iceberg-light and iceberg-dark (#10674)
  • Update everforest themes (#11459)
  • Update gruvbox themes (#11477)
  • Change primary selection cursor color for naysayer (#11617)
  • Style picker column names in horizon-dark (#11649)
  • Style picker column names in Darcula themes (#11649)
  • Update diagnostics colors in snazzy (#11731)
  • Update bogster themes (#11353)
  • Highlight keyword.storage in onedark (#11802)
  • Add ui.virtual.jump-label to serika-dark (#11911)
  • Add adwaita-light (#10869)
  • Add seoul256 themes (#11466)
  • Add yo themes (#11703)
  • Add eiffel (#11679)
  • Add carbonfox (#11558)
  • Set tags color in monokai themes (#11917)
  • Improve readability of spacebones picker selection (#12064)
  • Update modus themes (#11949)
  • Use bold for statusline mode indicator in onedarker (#11958)
  • Update hex themes, add a new hex theme (#10849)
  • Add sunset (#12093)
  • Add bufferline highlighting for flexoki themes (#12146) …
View originalPermalink
How 25.01 went

24.07

Thanks to all of the contributors! This release has changes from 160 contributors.

Breaking changes:

Features:

  • Add a textobject for entries/elements of list-like things (#8150)
  • Add a picker showing files changed in VCS (#5645)
  • Use a temporary file for writes (#9236, #10339, #10790)
  • Allow cycling through LSP signature-help signatures with A-n/A-p (#9974, #10654, #10655)
  • Use tree-sitter when finding matching brackets and closest pairs (#8294, #10613, #10777)
  • Auto-save all buffers after a delay (#10899, #11047)

Commands:

  • select_all_siblings (A-a) - select all siblings of each selection (87c4161)
  • select_all_children (A-I) - select all children of each selection (fa67c5c)
  • :read - insert the contents of the given file at each selection (#10447)

Usability improvements:

  • Support scrolling popup contents using the mouse (#10053)
  • Sort the jumplist picker so that most recent items come first (#10095)
  • Improve goto_file's (gf) automatic path detection strategy (#9065)
  • Respect language server definition order in code action menu (#9590)
  • Allow using a count with goto_next_buffer (gn) and goto_previous_buffer (gp) (#10463)
  • Improve the positioning of popups (#10257, #10573)
  • Reset all changes overlapped by selections in :reset-diff-change (#10728)
  • Await pending writes in the suspend command (C-z) (#10797)
  • Remove special handling of line ending characters in replace (r) (#10786)
  • Use the selected register as a history register for rename_symbol (<space>r) (#10932)
  • Use the configured insert-mode cursor for prompt entry (#10945)
  • Add tilted quotes to the matching brackets list (#10971)
  • Prevent improper files like /dev/urandom from being used as file arguments (#10733)
  • Allow multiple language servers to provide :lsp-workspace-commands (#10176, #11105)
  • Trim output of commands executed through :pipe (#10952)

Fixes:

  • Use lldb-dap instead of lldb-vscode in default DAP configuration (#10091)
  • Fix creation of uneven splits when closing windows (#10004)
  • Avoid setting a register in delete_selection_noyank, fixing the command's use in command sequences (#10050, #10148)
  • Fix jump alphabet config resetting when using :config-reload (#10156)
  • Overlay LSP unnecessary/deprecated diagnostic tag highlights onto regular diagnostic highlights (#10084)
  • Fix crash on LSP text edits with invalid ranges (#9649)
  • Handle partial failure when sending multiple LSP textDocument/didSave notifications (#10168)
  • Fix off-by-one error for completion-replace option (#10279)
  • Fix mouse right-click selection behavior (#10067)
  • Fix scrolling to the end within a popup (#10181)
  • Fix jump label highlight locations when jumping in non-ascii text (#10317)
  • Fix crashes from tree-sitter query captures that return non-grapheme aligned ranges (#10310)
  • Include VCS change in mi/ma textobject infobox (#10496)
  • Override crossterm's support for NO_COLOR (#10514)
  • Respect mode when starting a search (#10505)
  • Simplify first-in-line computation for indent queries (#10527)
  • Ignore .svn version controlled files in file pickers (#10536)
  • Fix overloading language servers with completionItem/resolve requests (38ee845, #10873)
  • Specify direction for select_next_sibling / select_prev_sibling (#10542)
  • Fix restarting language servers (#10614)
  • Don't stop at the first URL in goto_file (#10622)
  • Fix overflows in window size calculations for small terminals (#10620)
  • Allow missing or empty completion lists in DAP (#10332)
  • Revert statusline refactor that could cause the statusline to blank out on files with long paths (#10642)
  • Synchronize files after writing (#10735)
  • Avoid cnorm for cursor-type detection in certain terminals (#10769)
  • Reset inlay hints when stopping or restarting a language server (#10741)
  • Fix logic for updating --version when development VCS HEAD changes (#10896)
  • Set a max value for the count (#10930)
  • Deserialize number IDs in DAP module types (#10943)
  • Fix the behavior of jump_backwords when the jumplist is at capacity (#10968)
  • Fix injection layer heritage tracking for reused tree-sitter injection layers (#1098)
  • Fix pluralization of "buffers" in the statusline for :q, :q!, :wq (#11018)
  • Declare LSP formatting client capabilities (#11064)
  • Commit uncommitted changes before attempting undo/earlier (#11090)
  • Expand tilde for selected paths in goto_file (#10964)
  • Commit undo checkpoints before :write[-all], fixing the modification indicator (#11062)

Themes:

  • Add jump label styles to nightfox (#10052)
  • Add jump label styles to Solarized themes (#10056)
  • Add jump label styles to cyan_light (#10058)
  • Add jump label styles to onelight (#10061)
  • Add flexoki-dark and flexoki-light (#10002)
  • Add default theme keys for LSP diagnostics tags to existing themes (#10064)
  • Add jump label styles to base16 themes (#10076)
  • Dim primary selection in kanagawa (#10094, #10500)
  • Add jump label styles to tokyonight themes (#10106)
  • Add jump label styles to papercolor themes (#10104)
  • Add jump label styles to Darcula themes (#10116)
  • Add jump label styles to autumn (#10134)
  • Add jump label styles to Ayu themes (#10133)
  • Add jump label styles to dark_high_contrast (#10133)
  • Update material themes (#10290)
  • Add jump label styles to varua (#10299)
  • Add ruler style to adwaita-dark (#10260)
  • Remove ui.highlight effects from solarized_dark (#10261)
  • Fix statusline color in material themes (#10308)
  • Brighten nord selection highlight (#10307)
  • Add inlay-hint styles to monokai themes (#10334)
  • Add bufferline and cursorline colors to vim_dark_high_contrast (#10444)
  • Switch themes with foreground rulers to background (#10309)
  • Fix statusline colors for everblush (#10394)
  • Use yellow1 for gruvbox warning diagnostics (#10506)
  • Add jump label styles to Modus themes (#10538)
  • Refactor dark_plus and switch maintainers (#10543, #10574)
  • Add debug highlights to dark_plus (#10593)
  • Fix per-mode cursor colors in the default theme (#10608)
  • Add tag and attribute highlights to dark_high_contrast (#10705)
  • Improve readability of virtual text with noctis theme (#10910)
  • Sync catppuccin themes with upstream (#10954)
  • Improve jump colors for github_dark themes (#10946) …
View originalPermalink
How 24.07 went

24.03

As always, a big thank you to all of the contributors! This release saw changes from 125 contributors.

Breaking changes:

  • suffix file-types in the file-types key in language configuration have been removed (#8006)
  • The file-types key in language configuration no longer matches full filenames without a glob pattern (#8006)

Features:

  • Open URLs with the goto_file command (#5820)
  • Support drawing a border around popups and menus (#4313, #9508)
  • Track long lived diagnostic sources like Clippy or rustc (#6447, #9280)
    • This improves the handling of diagnostics from sources that only update the diagnostic positions on save.
  • Add support for LSP window/showDocument requests (#8865)
  • Refactor ad-hoc hooks to use a new generic event system (#8021, #9668, #9660)
    • This improves the behavior of autocompletions. For example navigating in insert mode no longer automatically triggers completions.
  • Allow using globs in the language configuration file-types key (#8006)
  • Allow specifying required roots for situational LSP activation (#8696)
  • Extend selections using mouse clicks in select mode (#5436)
  • Toggle block comments (#4718, #9894)
  • Support LSP diagnostic tags (#9780)
  • Add a file-absolute-path statusline element (#4535)
  • Cross injection layers in tree-sitter motions (A-p/A-o/A-i/A-n) (#5176)
  • Add a Amp-editor-like jumping command (#8875)

Commands:

  • :move - move buffers with LSP support (#8584)
    • Also see #8949 which made path changes conform to the LSP spec and fixed the behavior of this command.
  • page_cursor_up, page_cursor_down, page_cursor_half_up, page_cursor_half_down - commands for scrolling the cursor and page together (#8015)
  • :yank-diagnostic - yank the diagnostic(s) under the primary cursor (#9640)
  • select_line_above / select_line_below - extend or shrink a selection based on the direction and anchor (#9080)

Usability improvements:

  • Make roots key of [[language]] entries in languages.toml configuration optional (#8803)
  • Exit select mode in commands that modify the buffer (#8689)
  • Use crossterm cursor when out of focus (#6858, #8934)
  • Join empty lines with only one space in join_selections (#8989)
  • Introduce a hybrid tree-sitter and contextual indentation heuristic (#8307)
  • Allow configuring the indentation heuristic (#8307)
  • Check for LSP rename support before showing rename prompt (#9277)
  • Normalize S-<lower-ascii> keymaps to uppercase ascii (#9213)
  • Add formatter status to --health output (#7986)
  • Change path normalization strategy to not resolve symlinks (#9330)
  • Select subtree within injections in :tree-sitter-subtree (#9309)
  • Use tilde expansion and normalization for $HELIX_RUNTIME paths (1bc7aac)
  • Improve failure message for LSP goto references (#9382)
  • Use injection syntax trees for bracket matching (5e0b3cc)
  • Respect injections in :tree-sitter-highlight-name (8b6565c)
  • Respect injections in move_parent_node_end (035b8ea)
  • Use gix pipeline filter instead of manual CRLF implementation (#9503)
  • Follow Neovim's truecolor detection (#9577)
  • Reload language configuration with :reload, SIGHUP (#9415)
  • Allow numbers as bindings (#8471, #9887)
  • Respect undercurl config when terminfo is not available (#9897)
  • Ignore .pijul, .hg, .jj in addition to .git in file pickers configured to show hidden files (#9935)
  • Add completion for registers to :clear-register and :yank-diagnostic (#9936)
  • Repeat last motion for goto next/prev diagnostic (#9966)
  • Allow configuring a character to use when rendering narrow no-breaking space (#9604)
  • Switch to a streaming regex engine (regex-cursor crate) to significantly speed up regex-based commands and features (#9422, #9756, #9891)

Fixes:

  • Swap * and + registers (#8703, #8708)
  • Use terminfo to reset terminal cursor style (#8591)
  • Fix precedence of @align captures in indentat computation (#8659)
  • Only render the preview if a Picker has a preview function (#8667)
  • Fix the precedence of ui.virtual.whitespace (#8750, #8879)
  • Fix crash in :indent-style (#9087)
  • Fix didSave text inclusion when sync capability is a kind variant (#9101)
  • Update the history of newly focused views (#9271)
  • Initialize diagnostics when opening a document (#8873)
  • Sync views when applying edits to unfocused views (#9173)
    • This fixes crashes that could occur from LSP workspace edits or :write-all.
  • Treat non-numeric +args passed in the CLI args as filenames (#9333)
  • Fix crash when using mm on an empty plaintext file (2fb7e50)
  • Ignore empty tree-sitter nodes in match bracket (445f7a2)
  • Exit a language server if it sends a message with invalid JSON (#9332)
  • Handle failures to enable bracketed paste (#9353)
  • Gate all captures in a pattern behind #is-not? local predicates (#9390)
  • Make path changes LSP spec conformant (#8949)
  • Use range positions to determine insert_newline motion (#9448)
  • Fix division by zero when prompt completion area is too small (#9524)
  • Add changes to history in clipboard replacement typable commands (#9625)
  • Fix a crash in DAP with an unspecified line in breakpoints (#9632)
  • Fix space handling for filenames in bash completion (#9702, #9708)
  • Key diagnostics off of paths instead of LSP URIs (#7367)
  • Fix panic when using join_selections_space (#9783)
  • Fix panic when using surround_replace, surround_delete (#9796)
  • Fix panic in surround_replace, surround_delete with nested surrounds and multiple cursors (#9815)
  • Fix panic in select_textobject_around (#9832)
  • Don't stop reloading documents when reloading fails in :reload-all (#9870)
  • Prevent shell_keep_pipe from stopping on nonzero exit status codes (#9817)

Themes:

View originalPermalink
How 24.03 went

23.10

A big shout out to all the contributors! We had 118 contributors in this release.

Breaking changes:

  • Support multiple language servers per language (#2507)
    • This is a breaking change to language configuration

Features:

  • Support multiple language servers per language (#2507, #7082, #7286, #8374)
  • Add a statusline element for the selected register (#7222)
  • Add %, #, ., * and + special registers (#6985)
  • Add initial support for LSP DidChangeWatchedFiles notifications (#7665)
  • Search buffer contents in global_search (#5652)
  • Add a "smart tab" command that intelligently jumps the cursor on tab (#4443)
  • Add a statusline element for whether a file is read-only (#7222, #7875)
  • Syntax highlight regex prompts (#7738)
  • Allow defining alignment in indent queries (#5355)
  • Show visual feedback in surround_replace (#7588)
  • Switch to Nucleo for fuzzy matching (#7814, #8148, #8192, #8194)
  • Insert a trailing newline on write (#8157)
  • Add a -w/--working-dir CLI flag for specifying a working directory on startup (#8223, #8498, #8520)
  • Accept a +N CLI argument to set the first file's line number (#8521)
  • Accept Helix-specific ignore files in .helix/ignore and ~/.config/helix/ignore (#8099)

Commands:

  • merge_selections (A-minus) - merge all selections into one selection that covers all ranges (#7053)
  • move_prev_long_word_end and extend_prev_long_word_end - move/extend to the end of the previous WORD (#6905)
  • reverse_selection_contents - swaps the values of each selection so they are reversed (#7329)
  • Add :rl and :rla aliases for :reload and :reload-all (#7158)
  • yank_joined - join the selections and yank to the selected register (#7195)
  • :write-all! (:wa!) - forcibly write all buffers to disk and create any necessary subdirectories (#7577)
  • :redraw - clear re-render the UI (#6949)
  • :tree-sitter-highlight-name - show the theme scope name of the highlight under the cursor (#8170)

Usability improvements:

  • Allow cycling option values at runtime (#4411, #7240, #7877)
  • Exit gracefully on termination signals (#7236)
  • Add plaintext matching fallback to tree-sitter pair matching (#4288)
  • Persist register selection in pending keymaps (0e08349)
  • Propagate the count and register to command palette commands (b394997)
  • Auto indent on insert_at_line_start (#5837)
  • Add a config option to control whether LSP completions are automatically inserted on preview (#7189)
  • Add a config option for default line endings (#5621, #7357)
  • Allow ANSI colors in themes (#5119)
  • Match pairs that don't form a standalone tree-sitter node (#7242)
  • Allow indent sizes of up to 16 columns (#7429)
  • Improve performance of mapping positions through changes (#7408, 8d39a81, #7471)
  • Mark buffers created from stdin as modified (#7431)
  • Forcibly shut down uninitialized language servers (#7449)
  • Add filename completer for shell prompts (#7569)
  • Allow binding F13-F24 (#7672)
  • Resolve LSP code actions (#7677, #8421)
  • Save an undo checkpoint before accepting completions (#7747)
  • Include gitignored files in debugger completions (#7936)
  • Make editor remember the last search register (#5244)
  • Open directories with goto_file (#7909)
  • Use relative path to open buffer in goto_file (gf) (#7965)
  • Support default color in themes (#8083, #8114)
  • Toggle between relative and absolute line numbers when the terminal loses focus (#7955)
  • Lower default idle-timeout to 250ms (060e73a)
  • Allow theming diff gutters separately from other diff colors (#8343)
  • Style bold/italic/strikethrough in markdown doc popups (#8385)
  • Maintain the cursor position and view when splitting with :hsplit/:vsplit (#8109)
  • Accept - in macros outside of </> (#8475)
  • Show all language servers for each language in --health (#7315)
  • Don't break on hyphens in :reflow (#8569)

Fixes:

  • Update diagnostics correctly on language server exit (#7111)
  • Fix off-by-one in select_references_to_symbol_under_cursor (#7132)
  • Extend selection with repeat-last-motion only if the original motion extended the selection (#7159)
  • Fix undefined behavior in the diff gutter (#7227)
  • Check that tab width is non-zero (#7178)
  • Fix styles being overwritten in table rows with multiple cells (#7281)
  • Add file for --log CLI arg in help text (#7307)
  • Fix underflow when repeating a completion that has a negative shift position (#7322)
  • Prefer longer matches in select_next_sibling and select_prev_sibling (#7332)
  • Preview scratch buffers in the jumplist picker (#7331)
  • Fix chunking by bytes in tree-sitter parsing (#7417)
  • Discard LSP publishDiagnostic from uninitialized servers (#7467)
  • Use negotiated position encoding for LSP workspace edits (#7469)
  • Fix error message for unknown gutter types in config (#7534)
  • Fix :log-open when --log CLI arg is specified (#7573, #7585)
  • Fix debouncing of LSP messages to fix the last message sticking around (#7538, #8023)
  • Fix crash when the current working directory is deleted (#7185)
  • Fix piping to Helix on macOS (#5468)
  • Fix crash when parsing overlapping injections (#7621)
  • Clear the statusline when the prompt is visible (#7646)
  • Fix range formatting error message typo (#7823)
  • Skip rendering gutters when gutter width exceeds view width (#7821)
  • Center the picker preview using visual lines (#7837)
  • Align view correctly for background buffers opened with A-ret (#7691)
  • Fix cursor resetting to block when quitting via a keybind (#7931)
  • Remove path completions for the :new command (#8010)
  • Use binary path resolved by which for formatter commands (#8064)
  • Handle crossterm's hidden modifier (#8120)
  • Clear completion when switching between windows with the mouse (#8118)
  • Eagerly remove the last picker (<space>') when the picker has many items (#8127)
  • Fix find commands for buffers with non-LF line-endings (#8111)
  • Detect the tmux clipboard provider on macOS (#8182)
  • Fix syntax highlighting in dynamic picker preview pane (#8206)
  • Recognize HTML code tags with attributes as code in markdown previews (#8397)
  • Fix multicursor snippet placeholder directions (#8423)
  • Only show diagnostic highlights when diagnostics are enabled for a language server (#8551)

Themes:

  • Improve the selection color in ferra (#7138) …
View originalPermalink
How 23.10 went

23.05

23.05 is a smaller release focusing on fixes. There were 88 contributors in this release. Thank you all!

Features:

  • Add a config option to exclude declaration from LSP references request (#6886)
  • Enable injecting languages based on their file extension and shebang (#3970)
  • Sort the buffer picker by most recent access (#2980)
  • Perform syntax highlighting in the picker asynchronously (#7028)

Commands:

  • :update is now aliased as :u (#6835)
  • Add extend_to_first_nonwhitespace which acts the same as goto_first_nonwhitespace but always extends (#6837)
  • Add :clear-register for clearing the given register or all registers (#5695)
  • Add :write-buffer-close and :write-buffer-close! (#6947)

Fixes:

  • Normalize LSP workspace paths (#6517)
  • Robustly handle invalid LSP ranges (#6512)
  • Fix line number display for LSP goto pickers (#6559)
  • Fix toggling of soft-wrap.enable option (#6656, 58e457a, #6742)
  • Handle workspace/configuration requests from stopped language servers (#6693)
  • Fix possible crash from opening the jumplist picker (#6672)
  • Fix theme preview returning to current theme on line and word deletions (#6694)
  • Re-run crate build scripts on changes to revision and grammar repositories (#6743)
  • Fix crash on opening from suspended state (#6764)
  • Fix unwrap bug in DAP (#6786)
  • Always build tree-sitter parsers with C++14 and C11 (#6792, #6834, #6845)
  • Exit with a non-zero statuscode when tree-sitter parser builds fail (#6795)
  • Flip symbol range in LSP goto commands (#6794)
  • Fix runtime toggling of the mouse option (#6675)
  • Fix panic in inlay hint computation when view anchor is out of bounds (#6883)
  • Significantly improve performance of git discovery on slow file systems (#6890)
  • Downgrade gix log level to info (#6915)
  • Conserve BOM and properly support saving UTF16 files (#6497)
  • Correctly handle completion re-request (#6594)
  • Fix offset encoding in LSP didChange notifications (#6921)
  • Change gix logging level to info (#6915)
  • Improve error message when writes fail because parent directories do not exist (#7014)
  • Replace DAP variables popup instead of pushing more popups (#7034)
  • Disable tree-sitter for files after parsing for 500ms (#7028)
  • Fix crash when deleting with multiple cursors (#6024)
  • Fix selection sliding when deleting forwards in append mode (#6024)
  • Fix completion on paths containing spaces (#6779)

Themes:

  • Style inlay hints in dracula theme (#6515)
  • Style inlay hints in onedark theme (#6503)
  • Style inlay hints and the soft-wrap indicator in varua (#6568, #6589)
  • Style inlay hints in emacs theme (#6569)
  • Update base16_transparent and dark_high_contrast themes (#6577)
  • Style inlay hints for mellow and rasmus themes (#6583)
  • Dim pane divider for base16_transparent theme (#6534)
  • Style inlay hints in zenburn theme (#6593)
  • Style inlay hints in boo_berry theme (#6625)
  • Add ferra theme (#6619, #6776)
  • Style inlay hints in nightfox theme (#6655)
  • Fix ayu theme family markup code block background (#6538)
  • Improve whitespace and search match colors in rose_pine theme (#6679)
  • Highlight selected items in base16_transparent theme (#6716)
  • Adjust everforest to resemble original more closely (#5866)
  • Refactor dracula theme (#6552, #6767, #6855, #6987)
  • Style inlay hints in darcula theme (#6732)
  • Style inlay hints in kanagawa theme (#6773)
  • Improve ayu_dark theme (#6622)
  • Refactor noctis theme multiple cursor highlighting (96720e7)
  • Refactor noctis theme whitespace rendering and indent guides (f2ccc03)
  • Add amberwood theme (#6924)
  • Update nightfox theme (#7061)

Language support:

  • R language server: use the --no-echo flag to silence output (#6570)
  • Recognize CUDA files as C++ (#6521)
  • Add support for Hurl (#6450)
  • Add textobject queries for Julia (#6588)
  • Update Ruby highlight queries (#6587)
  • Add xsd to XML file-types (#6631)
  • Support Robot Framework (#6611)
  • Update Gleam tree-sitter parser (#6641)
  • Update git-commit tree-sitter parser (#6692)
  • Update Haskell tree-sitter parser (#6317)
  • Add injection queries for Haskell quasiquotes (#6474)
  • Highlight C/C++ escape sequences (#6724)
  • Support Markdoc (#6432)
  • Support OpenCL (#6473)
  • Support DTD (#6644)
  • Fix constant highlighting in Python queries (#6751)
  • Support Just (#6453)
  • Fix Go locals query for var_spec identifiers (#6763)
  • Update Markdown tree-sitter parser (#6785)
  • Fix Haskell workspace root for cabal projects (#6828)
  • Avoid extra indentation in Go switches (#6817)
  • Fix Go workspace roots (#6884)
  • Set PerlNavigator as the default Perl language server (#6860)
  • Highlight more sqlx macros in Rust (#6793)
  • Switch Odin tree-sitter grammar (#6766)
  • Recognize poetry.lock as TOML (#6928)
  • Recognize Jupyter notebooks as JSON (#6927)
  • Add language server configuration for Crystal (#6948)
  • Add build.gradle.kts to Java and Scala roots (#6970)
  • Recognize sty and cls files as latex (#6986)
  • Update Dockerfile tree-sitter grammar (#6895)
  • Add comment injections for Odin (#7027)
  • Recognize gml as XML (#7055)
  • Recognize geojson as JSON (#7054)

Packaging:

  • Update the Nix flake dependencies, remove a deprecated option (#6546)
  • Fix and re-enable aarch64-macos release binary builds (#6504)
  • The git dependency on tree-sitter has been replaced with a regular crates.io dependency (#6608)
View originalPermalink
How 23.05 went

23.03

23.03 brings some long-awaited and exciting features. Thank you to everyone involved! This release saw changes from 102 contributors.

For the full log, check out the git log. Also check out the release notes for more commentary on larger features.

Breaking changes:

  • Select diagnostic range in goto_*_diag commands (#4713, #5164, #6193)
  • Remove jump behavior from increment/decrement (#4123, #5929)
  • Select change range in goto_*_change commands (#5206)
  • Split file modification indicator from filename statusline elements (#4731, #6036)
  • Jump to symbol ranges in LSP goto commands (#5986)
  • Workspace detection now stops at the first .helix/ directory (merging multiple .helix/languages.toml configurations is no longer supported) (#5748)

Features:

  • Dynamic workspace symbol picker (#5055)
  • Soft-wrap (#5420, #5786, #5893, #6142, #6440)
  • Initial support for LSP snippet completions (#5864, b1f7528, #6263, bbf4800, 90348b8, f87299f, #6371, 9fe3adc)
  • Add a statusline element for showing the current version control HEAD (#5682)
  • Display LSP type hints (#5420, #5934, #6312)
  • Enable the Kitty keyboard protocol on terminals with support (#4939, #6170, #6194, #6438)
  • Add a statusline element for the basename of the current file (#5318)
  • Add substring matching syntax for the picker (#5658)
  • Support LSP textDocument/prepareRename (#6103)
  • Allow multiple runtime directories with priorities (#5411)
  • Allow configuring whether to insert or replace completions (#5728)
  • Allow per-workspace config file .helix/config.toml (#5748)
  • Add workspace-lsp-roots config option to support multiple LSP roots for use with monorepos (#5748)

Commands:

  • :pipe-to which pipes selections into a shell command and ignores output (#4931)
  • merge_consecutive_selections (A-_) combines all consecutive selections (#5047)
  • rotate_view_reverse which focuses the previous view (#5356)
  • goto_declaration (gD, requires LSP) which jumps to a symbol's declaration (#5646)
  • file_picker_in_current_buffer_directory (#4666)
  • :character-info which shows information about the character under the cursor (#4000)
  • :toggle-option for toggling config options at runtime (#4085)
  • dap_restart for restarting a debug session in DAP (#5651)
  • :lsp-stop to stop the language server of the current buffer (#5964)
  • :reset-diff-change for resetting a diff hunk to its original text (#4974)
  • :config-open-workspace for opening the config file local to the current workspace (#5748)

Usability improvements:

  • Remove empty detail section in completion menu when LSP doesn't send details (#4902)
  • Pass client information on LSP initialization (#4904)
  • Allow specifying environment variables for language servers in language config (#4004)
  • Allow detached git worktrees to be recognized as root paths (#5097)
  • Improve error message handling for theme loading failures (#5073)
  • Print the names of binaries required for LSP/DAP in health-check (#5195)
  • Improve sorting in the picker in cases of ties (#5169)
  • Add theming for prompt suggestions (#5104)
  • Open a file picker when using :open on directories (#2707, #5278)
  • Reload language config with :config-reload (#5239, #5381, #5431)
  • Improve indent queries for python when the tree is errored (#5332)
  • Picker: Open files without closing the picker with A-ret (#4435)
  • Allow theming cursors by primary/secondary and by mode (#5130)
  • Allow configuration of the minimum width for the line-numbers gutter (#4724, #5696)
  • Use filename completer for :run-shell-command command (#5729)
  • Surround with line-endings with ms<ret> (#4571)
  • Hide duplicate symlinks in file pickers (#5658)
  • Tabulate buffer picker contents (#5777)
  • Add an option to disable LSP (#4425)
  • Short-circuit tree-sitter and word object motions (#5851)
  • Add exit code to failed command message (#5898)
  • Make m textobject look for pairs enclosing selections (#3344)
  • Negotiate LSP position encoding (#5894, a48d1a4)
  • Display deprecated LSP completions with strikethrough (#5932)
  • Add JSONRPC request ID to failed LSP/DAP request log messages (#6010, #6018)
  • Ignore case when filtering LSP completions (#6008)
  • Show current language when no arguments are passed to :set-language (#5895)
  • Refactor and rewrite all book documentation (#5534)
  • Separate diagnostic picker message and code (#6095)
  • Add a config option to bypass undercurl detection (#6253)
  • Only complete appropriate arguments for typed commands (#5966)
  • Discard outdated LSP diagnostics (3c9d5d0)
  • Discard outdated LSP workspace edits (b6a4927)
  • Run shell commands asynchronously (#6373)
  • Show diagnostic codes in LSP diagnostic messages (#6378)
  • Highlight the current line in a DAP debug session (#5957)
  • Hide signature help if it overlaps with the completion menu (#5523, 7a69c40)

Fixes:

  • Fix behavior of auto-completion flag for completion-on-trigger (#5042)
  • Reset editor mode when changing buffers (#5072)
  • Respect scrolloff settings in mouse movements (#5255)
  • Avoid trailing s when only one file is opened (#5189)
  • Fix erroneous indent between closers of auto-pairs (#5330)
  • Expand ~ when parsing file paths in :open (#5329)
  • Fix theme inheritance for default themes (#5218)
  • Fix extend_line with a count when the current line(s) are selected (#5288)
  • Prompt: Fix autocompletion for paths containing periods (#5175)
  • Skip serializing JSONRPC params if params is null (#5471)
  • Fix interaction with the xclip clipboard provider (#5426)
  • Fix undo/redo execution from the command palette (#5294)
  • Fix highlighting of non-block cursors (#5575)
  • Fix panic when nooping in join_selections and join_selections_space (#5423)
  • Fix selecting a changed file in global search (#5639)
  • Fix initial syntax highlight layer sort order (#5196)
  • Fix UTF-8 length handling for shellwords (#5738)
  • Remove C-j and C-k bindings from the completion menu (#5070)
  • Always commit to history when pasting (#5790) …
View originalPermalink
How 23.03 went
View all

Discussion