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)