Helix 23.03

23.03

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

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

Breaking changes:

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

Features:

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

Commands:

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

Usability improvements:

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

Fixes:

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

Upgraded? How did it go?

Discussion