Helix Changelog

What's new in Helix 24.03

Apr 1, 2024
  • 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- 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:
  • 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)
  • Add ttox (#8524)
  • Add voxed (#9164)
  • Update sonokai (#9370, #9376, #5379)
  • Update onedark, onedarker (#9397)
  • Update cyan_light (#9375, #9688)
  • Add gruvbox_light_soft, gruvbox_light_hard (#9266)
  • Update GitHub themes (#9487)
  • Add term16_dark, term16_light (#9477)
  • Update Zed themes (#9544, #9549)
  • Add curzon (#9553)
  • Add monokai_soda (#9651)
  • Update catppuccin themes (#9859)
  • Update rasmus (#9939)
  • Update dark_plus (#9949, 628dcd5)
  • Update gruvbox themes (#9960)
  • Add jump label theming to dracula (#9973)
  • Add jump label theming to horizon-dark (#9984)
  • Add jump label theming to catppuccin themes (2178adf, #9983)
  • Add jump label theming to onedark themes (da2dec1)
  • Add jump label theming to rose-pine themes (#9981)
  • Add jump label theming to Nord themes (#10008)
  • Add jump label theming to Monokai themes (#10009)
  • Add jump label theming to gruvbox themes (#10012)
  • Add jump label theming to kanagawa (#10030)
  • Update material themes (#10043)
  • Add jetbrains_dark (#9967)
  • NEW LANGUAGES:
  • Typst (#7474)
  • LPF (#8536)
  • GN (#6969)
  • DBML (#8860)
  • log (#8916)
  • Janet (#9081, #9247)
  • Agda (#8285)
  • Avro (#9113)
  • Smali (#9089)
  • HOCON (#9203)
  • Tact (#9512)
  • PKL (#9515)
  • CEL (#9296)
  • SpiceDB (#9296)
  • Hoon (#9190)
  • DockerCompose (#9661, #9916)
  • Groovy (#9350, #9681, #9677)
  • FIDL (#9713)
  • Powershell (#9827)
  • ld (#9835)
  • Hyperland config (#9899)
  • JSONC (#9906)
  • PHP Blade (#9513)
  • SuperCollider (#9329)
  • Koka (#8727)
  • PKGBUILD (#9909, #9943)
  • Ada (#9908)
  • Helm charts (#9900)
  • Ember.js templates (#9902)
  • Ohm (#9991)
  • UPDATED LANGUAGES AND QUERIES:
  • Add HTML injection queries for Rust (#8603)
  • Switch to tree-sitter-ron for RON (#8624)
  • Update and improve comment highlighting (#8564, #9253, #9800, #10014)
  • Highlight type parameters in Rust (#8660)
  • Change KDL tree-sitter parsers (#8652)
  • Update tree-sitter-markdown (#8721, #10039)
  • Update tree-sitter-purescript (#8712)
  • Add type parameter highlighting to TypeScript, Go, Haskell, OCaml and Kotlin (#8718)
  • Add indentation queries for Scheme and lisps using tree-sitter-scheme (#8720)
  • Recognize meson_options.txt as Meson (#8794)
  • Add language server configuration for Nushell (#8878)
  • Recognize musicxml as XML (#8935)
  • Update tree-sitter-rescript (#8962)
  • Update tree-sitter-python (#8976)
  • Recognize .envrc.local and .envrc.private as env (#8988)
  • Update tree-sitter-gleam (#9003, 9ceeea5)
  • Update tree-sitter-d (#9021)
  • Fix R-markdown language name for LSP detection (#9012)
  • Add haskell-language-server LSP configuration (#9111)
  • Recognize glif as XML (#9130)
  • Recognize .prettierrc as JSON (#9214)
  • Add auto-pairs configuration for scheme (#9232)
  • Add textobject queries for Scala (#9191)
  • Add textobject queries for Protobuf (#9184)
  • Update tree-sitter-wren (#8544)
  • Add spago.yaml as an LSP root for PureScript (#9362)
  • Improve highlight and indent queries for Bash, Make and CSS (#9393)
  • Update tree-sitter-scala (#9348, #9340, #9475)
  • Recognize .bash_history as Bash (#9401)
  • Recognize Helix ignore files as ignore (#9447)
  • Inject SQL into Scala SQL strings (#9428)
  • Update gdscript textobjects (#9288)
  • Update Go queries (#9510, #9525)
  • Update tree-sitter-nushell (#9502)
  • Update tree-sitter-unison, add indent queries (#9505)
  • Update tree-sitter-slint (#9551, #9698)
  • Update tree-sitter-swift (#9586)
  • Add fish_indent as formatter for fish (78ed3ad)
  • Recognize zon as Zig (#9582)
  • Add a formatter for Odin (#9537)
  • Update tree-sitter-erlang (#9627, fdcd461)
  • Capture Rust fields as argument textobjects (#9637)
  • Improve Dart textobjects (#9644)
  • Recognize tmux.conf as a bash file-type (#9653)
  • Add textobjects queries for Nix (#9659)
  • Add textobjects queries for HCL (#9658)
  • Recognize osm and osc extensions as XML (#9697)
  • Update tree-sitter-sql (#9634)
  • Recognize pde Processing files as Java (#9741)
  • Update tree-sitter-lua (#9727)
  • Switch tree-sitter-nim parsers (#9722)
  • Recognize GTK builder ui files as XML (#9754)
  • Add configuration for markdown-oxide language server (#9758)
  • Add a shebang for elvish (#9779)
  • Fix precedence of Svelte TypeScript injection (#9777)
  • Recognize common Dockerfile file types (#9772)
  • Recognize NUON files as Nu (#9839)
  • Add textobjects for Java native functions and constructors (#9806)
  • Fix "braket" typeo in JSX highlights (#9910)
  • Update tree-sitter-hurl (#9775)
  • Add textobjects queries for Vala (#8541)
  • Update tree-sitter-git-config (9610254)
  • Recognize 'mmd' as Mermaid (459eb9a)
  • Highlight Rust extern crate aliases (c099dde)
  • Improve parameter highlighting in C++ (f5d95de)
  • Recognize 'rclone.conf' as INI (#9959)
  • Add injections for GraphQL and ERB in Ruby heredocs (#10036)
  • Add main.odin to Odin LSP roots (#9968)
  • PACKAGING:
  • Allow user overlays in Nix grammars build (#8749)
  • Set Cargo feature resolver to v2 (#8917)
  • Use workspace inheritance for common Cargo metadata (#8925)
  • Remove sourcehut-based tree-sitter grammars from default build (#9316, #9326)
  • Add icon to Windows executable (#9104)

New in Helix 23.10 (Oct 26, 2023)

  • 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 (') 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)
  • Add variable.other.member theming to spacebones_light (#7125)
  • Update autumn and theme the soft-wrap indicator (#7229)
  • Add gruvbox_dark_soft (#7139)
  • Add merionette (#7186)
  • Add zed_onedark and zed_onelight (#7250)
  • Use light-gray for onedarker inlay hint theming (#7433)
  • Update the Nord theme to follow the style guidelines (#7490)
  • Tune dark_plus inlay hint colors (#7611)
  • Add naysayer (#7570)
  • Add kaolin-dark, kaolin-light and kaolin-valley-dark (#7151)
  • Fix selection highlighting in gruvbox variants (#7717)
  • Add soft-wrap indicator to gruvbox (#7736)
  • Add missing palette definitions in everforest_dark (#7739)
  • Increase diagnostics clarity in pop-dark (#7702)
  • Add vim_dark_high_contrast (#7785)
  • Add new_moon (#7834)
  • Add yellowed (#7849)
  • Improve comment readability for autumn (#7939)
  • Distinguish active bufferline buffer in monokai (#7983)
  • Update ruler colors in nord (#7995)
  • Update Catppuccin themes (#8102)
  • Add text focus scope and diagnostics undercurls for nord (#8165)
  • Add material theme collection (#8211)
  • Improve indent line color in dracula (#8266)
  • Clean up and refactor papercolor to use inheritance (#8276)
  • Fix zenburn inlay hint color (#8278a)
  • Fix picker crash when previewing an invalid range (e9d0bd7)
  • Correctly center items in the picker preview (13d4463)
  • Add cyan_light (#8293, #8587)
  • Theme HTML tags in onedark (#8409)
  • Refine darcula and darcula-solid themes (#8412)
  • Improve nord highlights (#8414)
  • Add nord-night (#8549)
  • New languages:
  • Blueprint (#7213, #8161)
  • Forth (#7256, #7334)
  • t32 (#7140, #7811)
  • WebC (#7290)
  • Persistent DSL for Haskell (#7261)
  • F# (#7619, #8024)
  • Wren (#7765, #7819)
  • Unison (#7724)
  • Todo.txt (#7835)
  • Jinja and Handlebars (#7233)
  • Pod (#7907)
  • Strace (#7928)
  • Gemini (#8070)
  • GNU Assembler (GAS) (#8291)
  • JSON5 (#8473)
  • TEMPL (#8540)
  • Updated languages and queries:
  • Add one to the ruler numbers for git-commit (#7072)
  • Recognize XAML files as XML (#7083)
  • Recognize Cargo.lock as TOML (#7095)
  • Use Rust grammar for Cairo (c6d1430)
  • Update tree-sitter-nickel (#7059, #7551)
  • Tune auto-pair characters for Nickel (#7059)
  • Recognize Vagrantfile as Ruby (#7112)
  • Recognize hidden justfiles as Just (#7088)
  • Update Java and TypeScript highlight queries (#7145)
  • Recognize .zimrc as Bash (#7146)
  • Recognize .gir as XML (#7152)
  • Update tree-sitter-scala (#7147)
  • Recognize make file-type as Makefile (#7212)
  • Update tree-sitter-verilog (#7262)
  • Update tree-sitter-cpp (#7285)
  • Support core mode for delve debugger (#7300)
  • Add Fortran comment injections (#7305)
  • Switch Vue language server to vue-language-server (#7312)
  • Update tree-sitter-sql (#7387, #8464)
  • Replace the MATLAB tre-sitter grammar (#7388, #7442, #7491, #7493, #7511, #7532, #8040)
  • Highlight TOML table headers (#7441)
  • Recognize cppm file-type as C++ (#7492)
  • Refactor ecma language queries into private and public queries (#7207)
  • Update tree-sitter-dart (#7576)
  • Add shebang for nushell files (#7606)
  • Recognize systemd files as INI (#7592)
  • Update TypeScript, TSX and Svelte grammars (#6874)
  • Enable inlay hints in the Svelte language server (#7622)
  • Recognize Brewfiles as Ruby (#7629)
  • Add more file-types for R (#7633)
  • Switch tree-sitter-perl to official upstream parser (#7644, #7947)
  • Fix predicate typo in comment highlights (#7732)
  • Update tree-sitter-prql (#7771)
  • Recognize .gitf as JSON (#7781)
  • Switch V language server to v-analyzer (#7760)
  • Add protobuf language servers (#7796)
  • Update tree-sitter-zig (#7803)
  • Update tree-sitter-hare (#7784)
  • Add Java indent queries (#7844)
  • Update tree-sitter-scheme (979933b)
  • Recognize scm as Scheme instead of TSQ (5707151)
  • Update tree-sitter-git-commit (#7831)
  • Update JavaScript, TypeScript and TSX grammars (#7852)
  • Update tree-sitter-nu (#7873)
  • Fix YAML indentation (#6768)
  • Add csharp-ls, Pyright, Pylyzer and add roots for Python (#7897, #8032)
  • Update tree-sitter-slint (#7893)
  • Recognize more ZSH file-types as Bash (#7930)
  • Recognize star extension as Starlark (#7922)
  • Fix inline HTML tag highlighting in markdown (#7960)
  • Update tree-sitter-robot (#7970)
  • Highlight Dart 3 sealed and base keywords (#7974)
  • Add configuration for ltex-ls to the default languages.toml (#7838)
  • Update tree-sitter-strace (#8087)
  • Update tree-sitter-gleam, enable auto-format (#8085)
  • Update tree-sitter-esdl (#8222)
  • Expand ignore file-types (#8220)
  • Recognize feed related formats as XML (#8232)
  • Improve YAML injections (#8217)
  • Add shebangs for TypeScript, Julia, Java and OCaml (95e994a)
  • Highlight abbreviations in Scheme (ef23847)
  • Remove backtic auto-pair in OCaml (#8260)
  • Recognize flake.lock as JSON (#8304)
  • Add Python test script injection for Nix (b4494e1)
  • Fix Nix comment injection precedence (37e48f4)
  • Recognize editorconfig files as INI (#8308)
  • Recognize .babelrc as JSON (#8309)
  • Switch Purescript to its own tree-sitter parser (#8306, #8338, #8527)
  • Update Unison highlights (#8315)
  • Recognize .webmanifest as JSON (#8342)
  • Recognize polkit policy files as XML (#8369)
  • Recognize polkit rules files as JavaScript (#8370)
  • Update Go highlight queries (#8399)
  • Add shebangs for Makefiles (#8410)
  • Add file-type associations from VSCode (#8388)
  • Add validation to JSON/CSS language server configs (#8433)
  • Add a configuration for the tailwind language server (#8442)
  • Add a configuration for the ansible language server (#7973)
  • Add a configuration for the GraphQL language server (#8492)
  • Indent while statements in Bash (#8528)
  • Update tree-sitter-haskell and queries (#8558)
  • Packaging:
  • Add an overlay to the Nix flake (#7078)
  • Check for git before fetching or building grammars (#7320)
  • Refactor Nix flake to use Crane (#7763)
  • Remove the aarch64 appimage from the release CI (#7832)
  • Add desktop and icon files to Nix flake output (#7979)
  • Build flake packages with the latest stable Rust (#8133)

New in Helix 23.05 (Oct 26, 2023)

  • 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)

New in Helix 23.03 (May 17, 2023)

  • 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 (#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)
  • Properly handle LSP position encoding (#5711)
  • Fix infinite loop in copy_selection_on_prev_line (#5888)
  • Fix completion popup positioning (#5842)
  • Fix a panic when uncommenting a line with only a comment token (#5933)
  • Fix panic in goto_window_center at EOF (#5987)
  • Ignore invalid file URIs sent by a language server (#6000)
  • Decode LSP URIs for the workspace diagnostics picker (#6016)
  • Fix incorrect usages of tab_width with indent_width (#5918)
  • DAP: Send Disconnect if the Terminated event is received (#5532)
  • DAP: Validate key and index exist when requesting variables (#5628)
  • Check LSP renaming support before prompting for rename text (#6257)
  • Fix indent guide rendering (#6136)
  • Fix division by zero panic (#6155)
  • Fix lacking space panic (#6109)
  • Send error replies for malformed and unhandled LSP requests (#6058)
  • Fix table column calculations for dynamic pickers (#5920)
  • Skip adding jumplist entries for : line number previews (#5751)
  • Fix completion race conditions (#6173)
  • Fix shrink_selection with multiple cursors (#6093)
  • Fix indentation calculation for lines with mixed tabs/spaces (#6278)
  • No-op client/registerCapability LSP requests (#6258)
  • Send the STOP signal to all processes in the process group (#3546)
  • Fix workspace edit client capabilities declaration (7bf168d)
  • Fix highlighting in picker results with multiple columns (#6333)
  • Canonicalize paths before stripping the current dir as a prefix (#6290)
  • Fix truncation behavior for long path names in the file picker (#6410, 67783dd)
  • Fix theme reloading behavior in :config-reload (ab819d8)
  • Themes:
  • Update serika (#5038, #6344)
  • Update flatwhite (#5036, #6323)
  • Update autumn (#5051, #5397, #6280, #6316)
  • Update acme (#5019, #5486, #5488)
  • Update gruvbox themes (#5066, #5333, #5540, #6285, #6295)
  • Update base16_transparent (#5105)
  • Update dark_high_contrast (#5105)
  • Update dracula (#5236, #5627, #6414)
  • Update monokai_pro_spectrum (#5250, #5602)
  • Update rose_pine (#5267, #5489, #6384)
  • Update kanagawa (#5273, #5571, #6085)
  • Update emacs (#5334)
  • Add github themes (#5353, efeec12)
  • Dark themes: github_dark, github_dark_colorblind, github_dark_dimmed, github_dark_high_contrast, github_dark_tritanopia
  • Light themes: github_light, github_light_colorblind, github_light_dimmed, github_light_high_contrast, github_light_tritanopia
  • Update solarized variants (#5445, #6327)
  • Update catppuccin variants (#5404, #6107, #6269, #6464)
  • Use curly underlines in built-in themes (#5419)
  • Update zenburn (#5573)
  • Rewrite snazzy (#3971)
  • Add monokai_aqua (#5578)
  • Add markup.strikethrough to existing themes (#5619)
  • Update sonokai (#5440)
  • Update onedark (#5755)
  • Add ayu_evolve (#5638, #6028, #6225)
  • Add jellybeans (#5719)
  • Update fleet_dark (#5605, #6266, #6324, #6375)
  • Add darcula-solid (#5778)
  • Remove text background from monokai themes (#6009)
  • Update pop_dark (#5992, #6208, #6227, #6292)
  • Add everblush (#6086)
  • Add adwaita-dark (#6042, #6342)
  • Update papercolor (#6162)
  • Update onelight (#6192, #6276)
  • Add molokai (#6260)
  • Update ayu variants (#6329)
  • Update tokyonight variants (#6349)
  • Update nord variants (#6376)
  • New languages:
  • BibTeX (#5064)
  • Mermaid.js (#5147)
  • Crystal (#4993, #5205)
  • MATLAB/Octave (#5192)
  • tfvars (uses HCL) (#5396)
  • Ponylang (#5416)
  • DHall (1f6809c)
  • Sagemath (#5649)
  • MSBuild (#5793)
  • pem (#5797)
  • passwd (#4959)
  • hosts (#4950, #5914)
  • uxntal (#6047)
  • Yuck (#6064, #6242)
  • GNU gettext PO (#5996)
  • Sway (#6023)
  • NASM (#6068)
  • PRQL (#6126)
  • reStructuredText (#6180)
  • Smithy (#6370)
  • VHDL (#5826)
  • Rego (OpenPolicy Agent) (#6415)
  • Nim (#6123)
  • Updated languages and queries:
  • Use diff syntax for patch files (#5085)
  • Add Haskell textobjects (#5061)
  • Fix commonlisp configuration (#5091)
  • Update Scheme (bae890d)
  • Add indent queries for Bash (#5149)
  • Recognize c++ as a C++ extension (#5183)
  • Enable HTTP server in metals (Scala) config (#5551)
  • Change V-lang language server to v ls from vls (#5677)
  • Inject comment grammar into Nix (#5208)
  • Update Rust highlights (#5238, #5349)
  • Fix HTML injection within Markdown (#5265)
  • Fix comment token for godot (#5276)
  • Expand injections for Vue (#5268)
  • Add .bash_aliases as a Bash file-type (#5347)
  • Fix comment token for sshclientconfig (#5351)
  • Update Prisma (#5417)
  • Update C++ (#5457)
  • Add more file-types for Python (#5593)
  • Update tree-sitter-scala (#5576)
  • Add an injection regex for Lua (#5606)
  • Add build.gradle to java roots configuration (#5641)
  • Add Hub PR files to markdown file-types (#5634)
  • Add an external formatter configuration for Cue (#5679)
  • Add injections for builders and writers to Nix (#5629)
  • Update tree-sitter-xml to fix whitespace parsing (#5685)
  • Add Justfile to the make file-types configuration (#5687)
  • Update tree-sitter-sql and highlight queries (#5683, #5772)
  • Use the bash grammar and queries for env language (#5720)
  • Add podspec files to ruby file-types (#5811)
  • Recognize .C and .H file-types as C++ (#5808)
  • Recognize plist and mobileconfig files as XML (#5863)
  • Fix select indentation in Go (#5713)
  • Check for external file modifications when writing (#5805)
  • Recognize containerfiles as dockerfile syntax (#5873)
  • Update godot grammar and queries (#5944, #6186)
  • Improve DHall highlights (#5959)
  • Recognize .env.dist and source.env as env language (#6003)
  • Update tree-sitter-git-rebase (#6030, #6094)
  • Improve SQL highlights (#6041)
  • Improve markdown highlights and inject LaTeX (#6100)
  • Add textobject queries for Elm (#6084)
  • Recognize graphql schema file type (#6159)
  • Improve highlighting in comments (#6143)
  • Improve highlighting for JavaScript/TypeScript/ECMAScript languages (#6205)
  • Improve PHP highlights (#6203, #6250, #6299)
  • Improve Go highlights (#6204)
  • Highlight unchecked sqlx functions as SQL in Rust (#6256)
  • Improve Erlang highlights (cdd6c8d)
  • Improve Nix highlights (fb4d703)
  • Improve gdscript highlights (#6311)
  • Improve Vlang highlights (#6279)
  • Improve Makefile highlights (#6339)
  • Remove auto-pair for ' in OCaml (#6381)
  • Fix indents in switch statements in ECMA languages (#6369)
  • Recognize xlb and storyboard file-types as XML (#6407)
  • Recognize cts and mts file-types as TypeScript (#6424)
  • Recognize SVG file-type as XML (#6431)
  • Add theme scopes for (un)checked list item markup scopes (#6434)
  • Update git commit grammar and add the comment textobject (#6439, #6493)
  • Recognize ARB file-type as JSON (#6452)
  • Inject markdown into markdown strings in Julia (#6489)
  • Packaging:
  • Fix Nix flake devShell for darwin hosts (#5368)
  • Add Appstream metadata file to contrib/ (#5643)
  • Increase the MSRV to 1.65 (#5570, #6185)
  • Expose the Nix flake's wrapper (#5994)