This is a patch release which lowers the GLIBC requirements of the release artifacts published to GitHub (#13983)
Helix
Developer ToolsA post-modern modal text editor.
Changelog
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-optionor:toggle-option. - The
:rsortcommand has been removed. Use the reverse flag instead::sort --reverse
- Quoting and spaces are now handled differently. This can break existing keymaps which use typable commands, in particular
Features:
- Add a picker which explores directories (#11285, d4aed40)
- Allow cycling through multiple LSP Hover responses with
A-n/A-p(#10122, 2367b20) - Add support for incomplete LSP completions (5c1f3f8)
- Add support for EditorConfig (#13056, #13443)
- Add support for LSP document colors (#12308, d43de14, 47cdd23, ba54b6a, #13188)
- Support expansions in external formatter arguments (#13429)
- Switch out the highlighter for the
tree-housecrate (#12972, 09bc67a, a7c3a43, 3ceae88, 05ae617, 5a1dcc2, ebf96bd, #13644, b1f4717, 7410fe3, 633c5fb, 362e97e, #13828, 6fd1efd)- This fixes a number of highlighter bugs.
- Locals like parameter highlights are now highlighted even when the definition is not in view.
- Markdown is now injected into rust doc comments (
///and//!).
- Add support for the DAP
startDebuggingreverse request (#13403)
Commands:
- Add
copy_between_registersfor interactive copying between two registers (066e938) - Add
extend_to_file_{start,end}, select-mode variants ofgoto_file_{start,end}(#11767) - Add
:!alias for:shand:|for:pipe(#13263) - Add
goto_columnandextend_to_column(#13440) - Add an
--insensitive/-iflag to the:sortcommand (#13560) - Add
rotate_selections_firstandrotate_selections_last(#13615) - Add a
--no-formatflag for all:writecommands (2f56091) - Add a
--skip-visibleflag for:buffer-close-othersand:buffer-close-others!(#5393)
Usability improvements:
- Replace current file using
A-retin 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-stopand:lsp-restart(#12578, 3d7e273) - Add
m(nearest matching pair) to infobox popups formdandmr(#12650) - Add a hint message in the statusline when using
:sorton 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_registerandcopy_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-newlinesandeditor.trim-trailing-whitespaceconfig options (aa20eb8) - Warn when the configured theme is unusable because true-color is not available (#13058)
- Allow configuring
[workspace-]diagnosticstatusline element severities (#13288, b0528bb) - Improve completion for shell commands (#12883, 532f241)
- Show the primary selection index in the
selectionsstatusline element when there are multiple selections (#12326) - Use configured language server names when possible in
--healthoutput (#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
:movewhen 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-tabconfig (28047fe) - Fix soft-wrap word boundary detection for Unicode combining accent characters (#12483)
- Fix clearing of infobox popups in
select_registerandinsert_registercommands (e882a75) - Fix handling of
stderrof 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-registerin: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) …
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_selectionsbehavior 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_newlinewhen 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.directoryandui.virtual.wrapindark_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-tidyas YAML (#12498) - Update MATLAB grammar and indent queries (#12518)
- Recognize
rockspecas 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:
As always, a big thank you to all of the contributors! This release saw changes from 171 contributors.
Breaking changes:
- The
editor.lsp.display-messageskey now controls messages sent with the LSPwindow/showMessagenotification rather than progress messages. If you want to enable progress messages you should now enable theeditor.lsp.display-progress-messageskey instead. (#5535)
Features:
- Big refactor for
Pickers (#9647, #11209, #11216, #11211, #11343, #11406)- Use a table layout and allow filtering by column
- Reimplement
global_searchto 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/Oand 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, replacingsearch_selectionwhich was moved toA-*.
- This command takes the
Usability improvements:
- Add
:editand:ealiases for:open(#11186, #11196) - Trim trailing newline from pipe command outputs when the input doesn't have a trailing newline (#11183, 4f63a46)
- Add
:mvalias 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
:shcommands (#11239) - Add statusline errors when nothing is selected with
s,K,A-K(#11370) - Add
.svnas a workspace root marker (#11429) - Trim the end of
:shoutputs (#11161) - Show LSP
window/showMessagemessages in the statusline (#5535) - Support finding workspace directories via
.jjdirectories (#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-registerconfig option (#11430) - Show a statusline error for
:formatwhen a formatter is not available (#12183) - Change to the home directory with
:cdwith 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_replaceandsurround_delete(#12262)
Fixes:
- Respect document indentation settings in
format_selections(=) (#11169) - Avoid switching the current document to normal mode during an LSP
workspace/applyEditoperation (#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_backwardon 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-kin a prompt ending in a multi-byte character (#12237) - Expand tildes in paths passed to
:read(#12271) - Respect per-language
workspace-lsp-rootsconfiguration 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
--healthoutput on light terminals (#12355) - Accept integers serialized as floats in the JSONRPC
idfield (#12376)
Themes:
- Bring
kanagawacolors better in line with neovim version (#11187, #11270) - Add
ao(#11063) - Update
dark_plus(#11415) - Add
iceberg-lightandiceberg-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.storageinonedark(#11802) - Add
ui.virtual.jump-labeltoserika-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) …
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) andgoto_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
suspendcommand (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/urandomfrom 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-dapinstead oflldb-vscodein 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/didSavenotifications (#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/matextobject 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/resolverequests (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
cnormfor cursor-type detection in certain terminals (#10769) - Reset inlay hints when stopping or restarting a language server (#10741)
- Fix logic for updating
--versionwhen 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_backwordswhen 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-darkandflexoki-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.highlighteffects fromsolarized_dark(#10261) - Fix statusline color in material themes (#10308)
- Brighten
nordselection 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
yellow1forgruvboxwarning diagnostics (#10506) - Add jump label styles to Modus themes (#10538)
- Refactor
dark_plusand switch maintainers (#10543, #10574) - Add debug highlights to
dark_plus(#10593) - Fix per-mode cursor colors in the default theme (#10608)
- Add
tagandattributehighlights todark_high_contrast(#10705) - Improve readability of virtual text with
noctistheme (#10910) - Sync
catppuccinthemes with upstream (#10954) - Improve jump colors for
github_darkthemes (#10946) …
As always, a big thank you to all of the contributors! This release saw changes from 125 contributors.
Breaking changes:
suffixfile-types in thefile-typeskey in language configuration have been removed (#8006)- The
file-typeskey in language configuration no longer matches full filenames without a glob pattern (#8006)
Features:
- Open URLs with the
goto_filecommand (#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/showDocumentrequests (#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-typeskey (#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-pathstatusline 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
rootskey of[[language]]entries inlanguages.tomlconfiguration 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
--healthoutput (#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_RUNTIMEpaths (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
gixpipeline 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,.jjin addition to.gitin file pickers configured to show hidden files (#9935) - Add completion for registers to
:clear-registerand: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
@aligncaptures 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
didSavetext 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.
- This fixes crashes that could occur from LSP workspace edits or
- Treat non-numeric
+args passed in the CLI args as filenames (#9333) - Fix crash when using
mmon 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? localpredicates (#9390) - Make path changes LSP spec conformant (#8949)
- Use range positions to determine
insert_newlinemotion (#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
linein 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_deletewith 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_pipefrom stopping on nonzero exit status codes (#9817)
Themes:
- Add
gruber-dark(#8598) - Update
everblush(#8705) - Update
papercolor(#8718, #8827) - Add
polmandres(#8759) - Add
starlight(#8787) - Update
naysayer(#8838) - Add modus operandi themes (#8728, #9912)
- Update
rose_pine(#8946) - Update
darcula(#8738, #9002, #9449, #9588) - Add modus vivendi themes (#8894, #9912)
- Add
horizon-dark(#9008, #9493) - Update
noctis(#9123) - Update
nord(#9135) - Update monokai pro themes (#9148)
- Update tokyonight themes (#9099, #9724, #9789) …
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-dirCLI flag for specifying a working directory on startup (#8223, #8498, #8520) - Accept a
+NCLI argument to set the first file's line number (#8521) - Accept Helix-specific ignore files in
.helix/ignoreand~/.config/helix/ignore(#8099)
Commands:
merge_selections(A-minus) - merge all selections into one selection that covers all ranges (#7053)move_prev_long_word_endandextend_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
:rland:rlaaliases for:reloadand: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
defaultcolor 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
--logCLI arg in help text (#7307) - Fix underflow when repeating a completion that has a negative shift position (#7322)
- Prefer longer matches in
select_next_siblingandselect_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-openwhen--logCLI 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
:newcommand (#8010) - Use binary path resolved by
whichfor formatter commands (#8064) - Handle crossterm's
hiddenmodifier (#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) …
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:
:updateis now aliased as:u(#6835)- Add
extend_to_first_nonwhitespacewhich acts the same asgoto_first_nonwhitespacebut always extends (#6837) - Add
:clear-registerfor clearing the given register or all registers (#5695) - Add
:write-buffer-closeand: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.enableoption (#6656, 58e457a, #6742) - Handle
workspace/configurationrequests 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
mouseoption (#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
didChangenotifications (#6921) - Change
gixlogging 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
draculatheme (#6515) - Style inlay hints in
onedarktheme (#6503) - Style inlay hints and the soft-wrap indicator in
varua(#6568, #6589) - Style inlay hints in
emacstheme (#6569) - Update
base16_transparentanddark_high_contrastthemes (#6577) - Style inlay hints for
mellowandrasmusthemes (#6583) - Dim pane divider for
base16_transparenttheme (#6534) - Style inlay hints in
zenburntheme (#6593) - Style inlay hints in
boo_berrytheme (#6625) - Add
ferratheme (#6619, #6776) - Style inlay hints in
nightfoxtheme (#6655) - Fix
ayutheme family markup code block background (#6538) - Improve whitespace and search match colors in
rose_pinetheme (#6679) - Highlight selected items in
base16_transparenttheme (#6716) - Adjust everforest to resemble original more closely (#5866)
- Refactor
draculatheme (#6552, #6767, #6855, #6987) - Style inlay hints in
darculatheme (#6732) - Style inlay hints in
kanagawatheme (#6773) - Improve
ayu_darktheme (#6622) - Refactor
noctistheme multiple cursor highlighting (96720e7) - Refactor
noctistheme whitespace rendering and indent guides (f2ccc03) - Add
amberwoodtheme (#6924) - Update
nightfoxtheme (#7061)
Language support:
- R language server: use the
--no-echoflag 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_specidentifiers (#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.lockas TOML (#6928) - Recognize Jupyter notebooks as JSON (#6927)
- Add language server configuration for Crystal (#6948)
- Add
build.gradle.ktsto Java and Scala roots (#6970) - Recognize
styandclsfiles as latex (#6986) - Update Dockerfile tree-sitter grammar (#6895)
- Add comment injections for Odin (#7027)
- Recognize
gmlas XML (#7055) - Recognize
geojsonas JSON (#7054)
Packaging:
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_*_diagcommands (#4713, #5164, #6193) - Remove jump behavior from
increment/decrement(#4123, #5929) - Select change range in
goto_*_changecommands (#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.tomlconfigurations 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-rootsconfig option to support multiple LSP roots for use with monorepos (#5748)
Commands:
:pipe-towhich pipes selections into a shell command and ignores output (#4931)merge_consecutive_selections(A-_) combines all consecutive selections (#5047)rotate_view_reversewhich 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-infowhich shows information about the character under the cursor (#4000):toggle-optionfor toggling config options at runtime (#4085)dap_restartfor restarting a debug session in DAP (#5651):lsp-stopto stop the language server of the current buffer (#5964):reset-diff-changefor resetting a diff hunk to its original text (#4974):config-open-workspacefor 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
:openon 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-commandcommand (#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
mtextobject 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-completionflag for completion-on-trigger (#5042) - Reset editor mode when changing buffers (#5072)
- Respect scrolloff settings in mouse movements (#5255)
- Avoid trailing
swhen 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_linewith 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
xclipclipboard provider (#5426) - Fix undo/redo execution from the command palette (#5294)
- Fix highlighting of non-block cursors (#5575)
- Fix panic when nooping in
join_selectionsandjoin_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) …
More in Developer Tools
View allA feature-rich command-line audio/video downloader
tmux release notes.
Anthropic's agentic coding tool for the terminal, IDE and web.
Rule based proxy utility client for iPhone/iPad.
One tool to manage every AWS service from the command line, and script them.
Open-source Windows and Office activator featuring HWID, Ohook, TSforge, and Online KMS activation methods, along with advanced troubleshooting.