<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Helix | News</title><description/><link>https://helix-editor.vercel.app/</link><language>en</language><item><title>Release 24.03 Highlights</title><link>https://helix-editor.vercel.app/news/release-2403/</link><guid isPermaLink="true">https://helix-editor.vercel.app/news/release-2403/</guid><pubDate>Sat, 30 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Helix 24.03 release has arrived! First, a very big &lt;em&gt;thank you&lt;/em&gt; to everyone
who made this release possible. This release saw changes from 125 contributors.&lt;/p&gt;
&lt;p&gt;New to Helix?
Helix is a modal text editor with built-in support for multiple selections,
Language Server Protocol (LSP), tree-sitter, and experimental support for Debug
Adapter Protocol (DAP).&lt;/p&gt;
&lt;p&gt;Let’s check out this release’s highlights.&lt;/p&gt;
&lt;h2 id=&quot;amp-like-jumping&quot;&gt;&lt;a href=&quot;#amp-like-jumping&quot;&gt;Amp-like jumping&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Jumping features are popular in the (Neo)Vim plugin space and there are even
plugins to add the same functionality to other tools like browsers. They allow
you to move your selection efficiently across even large parts of the view,
like you could by clicking with a mouse, but by entering “labels” instead.
24.03 introduces jumping commands inspired by the &lt;a href=&quot;https://github.com/jmacdonald/amp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Amp editor&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;’s &lt;a href=&quot;https://amp.rs/docs/usage/#jump-mode&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;jump mode&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.
Press &lt;code dir=&quot;auto&quot;&gt;gw&lt;/code&gt; to add the jump labels and then enter one of the labels to jump to
the word under that label. Using &lt;code dir=&quot;auto&quot;&gt;gw&lt;/code&gt; in select mode (&lt;code dir=&quot;auto&quot;&gt;v&lt;/code&gt;) extends the
selection.&lt;/p&gt;
&lt;h2 id=&quot;block-comments&quot;&gt;&lt;a href=&quot;#block-comments&quot;&gt;Block comments&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the past, Helix has only been able to toggle line comments like &lt;code dir=&quot;auto&quot;&gt;//&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;#&lt;/code&gt;
and languages like OCaml have been left with workarounds like a “line” comment
token of &lt;code dir=&quot;auto&quot;&gt;(*&lt;/code&gt;. In 24.03 Helix can now toggle block comments as well. Use &lt;code dir=&quot;auto&quot;&gt;C-c&lt;/code&gt;
or &lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;space&gt;c&lt;/code&gt; to smartly add or remove line or block comments around the current
selection based on the language’s comment token configuration, &lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;space&gt;c&lt;/code&gt; to
toggle block comments around the current selection, or &lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;space&gt;&amp;#x3C;A-c&gt;&lt;/code&gt; to toggle
only line comments on the current line.&lt;/p&gt;
&lt;h2 id=&quot;improvements-to-tree-sitter-injections&quot;&gt;&lt;a href=&quot;#improvements-to-tree-sitter-injections&quot;&gt;Improvements to tree-sitter injections&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Helix uses &lt;a href=&quot;https://github.com/tree-sitter/tree-sitter&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;tree-sitter&lt;/code&gt;&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; incremental parsing for syntax highlighting,
textobjects, indentation and some motions and commands. 24.03 improves how we
handle &lt;em&gt;&lt;a href=&quot;https://tree-sitter.github.io/tree-sitter/syntax-highlighting#language-injection&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;injections&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/em&gt; - a powerful tree-sitter feature for parsing documents
with multiple languages. For example you might have JavaScript, CSS or other
languages within a &lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;script&gt;&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;style&gt;&lt;/code&gt; tag in HTML. The HTML parser doesn’t
need to know how to parse all of these languages. Instead it can &lt;em&gt;inject&lt;/em&gt;
JavaScript or CSS parsers to handle the &lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;script&gt;&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;style&gt;&lt;/code&gt; tag contents.&lt;/p&gt;
  
&lt;p&gt;One of these improvements is to the &lt;code dir=&quot;auto&quot;&gt;:tree-sitter-subtree&lt;/code&gt; command that
displays an S-expression of the syntax tree under the cursor. 24.03 shows the
injection layer under the selection instead of only the root layer. For example
in this asciicast we now show the syntax tree for the JavaScript parts of the
document while in the past we only showed the HTML part of the tree.&lt;/p&gt;
&lt;p&gt;The other big improvement is to the tree-sitter motions. &lt;code dir=&quot;auto&quot;&gt;A-o&lt;/code&gt; (alt + o)
expands the selection to the parent node of the syntax tree node covered by the
current selection. &lt;code dir=&quot;auto&quot;&gt;A-i&lt;/code&gt; shrinks to the child node and &lt;code dir=&quot;auto&quot;&gt;A-n&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;A-p&lt;/code&gt; go to
the &lt;em&gt;n&lt;/em&gt;ext and &lt;em&gt;p&lt;/em&gt;revious nodes, respectively. Previously these
commands only worked on the root layer (for example HTML in the asciicast) but
they now find the injection layer that contains the selection and move along
that layer’s syntax tree. Internally we organize injection layers into a
tree-like structure so that these motions can switch layers when needed.&lt;/p&gt;
&lt;p&gt;Stay tuned for future changes that improve injections, like finding textobjects
within injected content.&lt;/p&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a href=&quot;#internal-improvements&quot;&gt;Internal improvements&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;24.03 also saw major internal improvements. The first comes from a new “event
system” - a system built around Tokio channels and tasks that allows different
parts of the Helix codebase to communicate with one another. The event system
also adds generic ways to debounce and run tasks in background threads so we
can prevent locking up the UI. Some parts of the code base have already been
migrated to the event system like LSP completion and signature-help. In
24.03 you’ll notice that LSP completion doesn’t automatically pop up after just
navigating around in insert mode, for example with arrow keys. It’s now hooked
into document changes instead, so it can smartly pop up when you start changing
a document rather than every time the editor goes idle.&lt;/p&gt;
&lt;p&gt;The other major improvement to be excited for is the general replacement of the
&lt;code dir=&quot;auto&quot;&gt;regex&lt;/code&gt; crate with &lt;a href=&quot;https://github.com/pascalkuthe/regex-cursor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;regex-cursor&lt;/code&gt;&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;, a streaming regex implementation
compatible with &lt;a href=&quot;https://github.com/cessen/ropey&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;ropey&lt;/code&gt;&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;, the rope crate we use to represent all documents.
&lt;code dir=&quot;auto&quot;&gt;regex-cursor&lt;/code&gt; is capable of running on &lt;em&gt;discontiguous strings&lt;/em&gt; - input that
may not be collocated in memory. In a rope, different parts of the document
might be stored separately internally. To use the &lt;code dir=&quot;auto&quot;&gt;regex&lt;/code&gt; API we needed to
convert slices of the document to a regular Rust &lt;code dir=&quot;auto&quot;&gt;String&lt;/code&gt;, duplicating the
memory footprint of that slice of the document. &lt;code dir=&quot;auto&quot;&gt;regex-cursor&lt;/code&gt; operates on the
chunks of the rope instead, which greatly improves efficiency.&lt;/p&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;&lt;a href=&quot;#wrapping-up&quot;&gt;Wrapping up&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As always, this is just the highlights from the 24.03 release. Check out the
full &lt;a href=&quot;https://github.com/helix-editor/helix/blob/master/CHANGELOG.md#2404-2024-03-30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;changelog&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; for the details.&lt;/p&gt;
&lt;p&gt;Come chat about usage and development questions in the &lt;a href=&quot;https://matrix.to/#/#helix-community:matrix.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Matrix space&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;
and follow along with Helix’s development in the &lt;a href=&quot;https://github.com/helix-editor/helix/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub repository&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Release 23.10 Highlights</title><link>https://helix-editor.vercel.app/news/release-2310/</link><guid isPermaLink="true">https://helix-editor.vercel.app/news/release-2310/</guid><pubDate>Wed, 25 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Helix 23.10 release is finally here! 23.10 introduces some very large
internal changes that enable some powerful features. A very big &lt;em&gt;thank you&lt;/em&gt; to
everyone who made this release possible.&lt;/p&gt;
&lt;p&gt;New to Helix?
Helix is a modal text editor with built-in support for multiple selections,
Language Server Protocol (LSP), tree-sitter, and experimental support for Debug
Adapter Protocol (DAP).&lt;/p&gt;
&lt;p&gt;Let’s check out this release’s highlights.&lt;/p&gt;
&lt;h2 id=&quot;multiple-language-servers&quot;&gt;&lt;a href=&quot;#multiple-language-servers&quot;&gt;Multiple language servers&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;23.10 brings a big change to the way we handle language servers.
Previously each language could only support one language server at a time but
now you can configure multiple to work in tandem. For example you might use
the TypeScript language server for JavaScript/TypeScript development and also
configure &lt;a href=&quot;https://github.com/mattn/efm-langserver&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;efm-langserver&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; for
Prettier formatting and ESLint diagnostics. With the new support for multiple
language servers, you can specify which features to use from each language
server.&lt;/p&gt;
&lt;p&gt;This brings a big change to the way language servers are configured in your
language configuration (&lt;code dir=&quot;auto&quot;&gt;languages.toml&lt;/code&gt;). All language servers are now
specified separately from languages and then each language selects which
language server(s) to use. From the example above, you might configure efm-
langserver and typescript-language-server like so:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;[language-server.efm]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;efm-langserver&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;config.documentFormatting&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#FF5874;--1:#A54A4A&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;[language-server.typescript-language-server]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;typescript-language-server&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;args&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;--stdio&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;config.hostInfo&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;helix&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;[[language]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;typescript&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;auto-format&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#FF5874;--1:#A54A4A&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;language-servers&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;efm&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;only-features&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;diagnostics&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;] },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;typescript-language-server&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;except-features&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;format&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;diagnostics&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;] },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;See more details in the &lt;a href=&quot;https://docs.helix-editor.com/languages.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;language configuration docs&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;fuzzy-matching-with-nucleo&quot;&gt;&lt;a href=&quot;#fuzzy-matching-with-nucleo&quot;&gt;Fuzzy matching with Nucleo&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Helix uses “fuzzy” matching to filter as-you-type in components like the file
picker. Previously we used the popular &lt;code dir=&quot;auto&quot;&gt;skim&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;fuzzy-matcher&lt;/code&gt; crates but in the
23.10 release we’ve switched to the new
&lt;a href=&quot;https://github.com/helix-editor/nucleo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;nucleo&lt;/code&gt;&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; crate. Nucleo is
significantly faster than skim and fzf, handles Unicode correctly, and uses a
bonus system that feels more intuitive.&lt;/p&gt;
&lt;p&gt;Nucleo also enables us to lazily stream in new items, which is a big boost for
the user experience for pickers. In the asciicast above I’m scanning through
my computer’s &lt;code dir=&quot;auto&quot;&gt;/nix/store&lt;/code&gt;, a huge directory containing more than twenty
million files. The file picker now works gradually as we scan through the
directory and matches files as we find them.&lt;/p&gt;
&lt;p&gt;Nucleo also paves the way for future picker upgrades. Stay tuned to the
upcoming release notes to see where we’ll take the picker.&lt;/p&gt;
&lt;h2 id=&quot;smart-tab&quot;&gt;&lt;a href=&quot;#smart-tab&quot;&gt;Smart tab&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Smart tab is a new feature bound to the tab key in the default keymap. When
you press tab and the line to the left of the cursor isn’t all whitespace,
the cursor will jump to the end of the syntax tree’s parent node. For example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;nix&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#097174&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;nested&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#097174&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;key2&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#097174&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;value2&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#809191;--1:#616671&quot;&gt;# When the cursor is at the end of the line here, &amp;#x3C;tab&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;                     &lt;/span&gt;&lt;span style=&quot;--0:#809191;--1:#616671&quot;&gt;# jumps right after the closing brace on the next line.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This is useful in languages like Nix for adding semicolons at the end of an
attribute set or jumping to the end of a block in a C-like language:&lt;/p&gt;
  
&lt;h2 id=&quot;expanded-support-for-registers&quot;&gt;&lt;a href=&quot;#expanded-support-for-registers&quot;&gt;Expanded support for registers&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Registers allow you to save and paste values. For example you might select
a paragraph, use &lt;code dir=&quot;auto&quot;&gt;&quot;ay&lt;/code&gt; to yank it into the &lt;code dir=&quot;auto&quot;&gt;a&lt;/code&gt; register, and later use &lt;code dir=&quot;auto&quot;&gt;&quot;ap&lt;/code&gt;
to paste that paragraph. Some registers have special effects when read or
written to though like the &lt;code dir=&quot;auto&quot;&gt;_&lt;/code&gt; “blackhole” register: any values written are
discarded and nothing can be read. Special registers have been expanded to
include some useful ones from Kakoune and clipboard registers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;%&lt;/code&gt;: the current buffer name&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;#&lt;/code&gt;: the number of each selection, 1-indexed&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;.&lt;/code&gt;: the contents of each selection&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;*&lt;/code&gt; and &lt;code dir=&quot;auto&quot;&gt;+&lt;/code&gt;: system and primary clipboards&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also check out the new register statusline element. It appears when you select
a register with &lt;code dir=&quot;auto&quot;&gt;&quot;&lt;/code&gt;. Notice the &lt;code dir=&quot;auto&quot;&gt;reg=#&lt;/code&gt; in the bottom-right corner of the
statusline in the asciicast when we select the &lt;code dir=&quot;auto&quot;&gt;#&lt;/code&gt; register and how it goes
away when we paste that register (&lt;code dir=&quot;auto&quot;&gt;p&lt;/code&gt;) or increment the selections (&lt;code dir=&quot;auto&quot;&gt;C-a&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&quot;initial-support-for-lsp-didchangewatchedfiles&quot;&gt;&lt;a href=&quot;#initial-support-for-lsp-didchangewatchedfiles&quot;&gt;Initial support for LSP DidChangeWatchedFiles&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Some language servers use the DidChangeWatchedFiles notification to discover
changes to related files in other languages. For example, &lt;code dir=&quot;auto&quot;&gt;rust-analyzer&lt;/code&gt; will
fetch and index new dependencies when you add them to your &lt;code dir=&quot;auto&quot;&gt;Cargo.toml&lt;/code&gt;.
Helix will now send file change notifications when the file is changed by
Helix itself. Full support for DidChangeWatchedFiles will require a file
watcher but for now we’re able to support the most common use-case for
DidChangeWatchedFiles.&lt;/p&gt;
&lt;h2 id=&quot;syntax-highlight-regex-prompts&quot;&gt;&lt;a href=&quot;#syntax-highlight-regex-prompts&quot;&gt;Syntax highlight regex prompts&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Regex prompts like those created with &lt;code dir=&quot;auto&quot;&gt;s&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;S&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;|&lt;/code&gt; are now syntax highlighted
via tree-sitter-regex. The highlighting makes special characters more obvious
and can catch syntax errors like trailing backslashes.&lt;/p&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;&lt;a href=&quot;#wrapping-up&quot;&gt;Wrapping up&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As always, this is just the tip of the iceberg for the 23.10 release. Check out
the &lt;a href=&quot;https://github.com/helix-editor/helix/blob/master/CHANGELOG.md#2310-2023-10-24&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;changelog&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; for the full details.&lt;/p&gt;
&lt;p&gt;Come chat about usage and development questions in the &lt;a href=&quot;https://matrix.to/#/#helix-community:matrix.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Matrix space&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;
and follow along with Helix’s development in the &lt;a href=&quot;https://github.com/helix-editor/helix/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub repository&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Release 23.03 Highlights</title><link>https://helix-editor.vercel.app/news/release-2303/</link><guid isPermaLink="true">https://helix-editor.vercel.app/news/release-2303/</guid><pubDate>Fri, 31 Mar 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Helix is a modal text editor with built-in support for multiple selections,
Language Server Protocol (LSP), tree-sitter, and experimental support for Debug
Adapter Protocol (DAP).&lt;/p&gt;
&lt;p&gt;Today marks the 23.03 release. First, a big &lt;em&gt;thank you&lt;/em&gt; to everyone involved!
This release includes changes from 102 contributors. Today’s release brings
some especially useful and exciting features, so let’s jump right in.&lt;/p&gt;
&lt;h2 id=&quot;soft-wrap&quot;&gt;&lt;a href=&quot;#soft-wrap&quot;&gt;Soft-wrap&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Soft-wrap breaks up lines to fit in view without inserting actual line break
characters into the text (so called “hard-wrapping”). This can be useful for
reading and editing documentation or code with especially long lines. Enable
soft-wrap in your config with the &lt;code dir=&quot;auto&quot;&gt;editor.soft-wrap.enable&lt;/code&gt; key:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/.config/helix/config.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;[editor.soft-wrap]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;enable&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#FF5874;--1:#A54A4A&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Heuristics for where to break lines and the wrap indicator may also be
&lt;a href=&quot;https://docs.helix-editor.com/configuration.html#editorsoft-wrap-section&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;configured&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Soft-wrap is the first feature implemented on top of a new “virtual text” API
within the Helix codebase. The virtual text API allows us to decorate and
manipulate the actual text in a document without disturbing positioning and
modifications. The virtual text API opens the door for many new exciting
features like the inlay hints we’ll see next.&lt;/p&gt;
&lt;h2 id=&quot;inlay-hints&quot;&gt;&lt;a href=&quot;#inlay-hints&quot;&gt;Inlay hints&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Inlay hints are a new feature in the latest LSP specification. Language servers
can provide editors with hints to show in a document. In the example above,
rust-analyzer provides type hints for variables and intermediary expressions
as well as parameter names in function calls.&lt;/p&gt;
&lt;p&gt;Inlay hints can be enabled in your config with the &lt;code dir=&quot;auto&quot;&gt;lsp.display-inlay-hints&lt;/code&gt;
key.&lt;/p&gt;
&lt;h2 id=&quot;initial-support-for-snippets&quot;&gt;&lt;a href=&quot;#initial-support-for-snippets&quot;&gt;Initial support for snippets&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;LSP snippets are a way for language servers to provide more complex completions
for an editor. Language servers can specify where to place cursors within a
completion (tabstops), placeholder values and more. Helix now has initial
support for LSP completions, leaving more advanced snippet features like
virtual placeholders, multiple tabstops, and variable substitutions for future
work.&lt;/p&gt;
&lt;h2 id=&quot;dynamic-workspace-symbol-picker&quot;&gt;&lt;a href=&quot;#dynamic-workspace-symbol-picker&quot;&gt;Dynamic workspace symbol picker&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The workspace symbol picker (&lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;space&gt;S&lt;/code&gt;) is an LSP-driven feature for looking
up a symbol in a project. Large projects might have many symbols, though, so
this symbol picker typically wouldn’t load them all at once. The workspace
symbol picker has been reworked in this release though to dynamically
re-request symbols with a new query as you type in the picker. This lets the
language server narrow down the number of symbols and only tell Helix about the
ones relevant to the search. This rework fixes compatibility with some language
servers which returned empty symbols with no query (&lt;code dir=&quot;auto&quot;&gt;gopls&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;pyright&lt;/code&gt;,
&lt;code dir=&quot;auto&quot;&gt;clangd&lt;/code&gt;) or limited results (&lt;code dir=&quot;auto&quot;&gt;rust-analyzer&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The “dynamic picker” introduced in this refactor may benefit other pickers in
the future, for example allowing the global search picker (&lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;space&gt;/&lt;/code&gt;) to
update on-the-fly as you change the query.&lt;/p&gt;
&lt;h2 id=&quot;version-control-head-statusline-element&quot;&gt;&lt;a href=&quot;#version-control-head-statusline-element&quot;&gt;Version control HEAD statusline element&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;A new statusline element has been added which displays the version control
HEAD. Add this to your statusline by introducing the &lt;code dir=&quot;auto&quot;&gt;&quot;version-control&quot;&lt;/code&gt;
element in the
&lt;a href=&quot;https://docs.helix-editor.com/configuration.html#editorstatusline-section&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;editor.statusline&lt;/code&gt;&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;
section of your config for the &lt;code dir=&quot;auto&quot;&gt;left&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;center&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;right&lt;/code&gt; sides.&lt;/p&gt;
&lt;h2 id=&quot;enhanced-keyboard-protocol&quot;&gt;&lt;a href=&quot;#enhanced-keyboard-protocol&quot;&gt;Enhanced keyboard protocol&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Support for the &lt;a href=&quot;https://sw.kovidgoyal.net/kitty/keyboard-protocol/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;enhanced keyboard protocol&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; is now enabled. Terminals that
support the protocol (Kitty, WezTerm) can now send unambiguous keycodes to
Helix, enabling key combinations that weren’t possible to bind before like
&lt;code dir=&quot;auto&quot;&gt;C-/&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;C-h&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;S-backspace&lt;/code&gt;. This functionality works out-of-the-box for
terminals that support the protocol.&lt;/p&gt;
&lt;h2 id=&quot;runtime-directory-refactor&quot;&gt;&lt;a href=&quot;#runtime-directory-refactor&quot;&gt;Runtime directory refactor&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Helix keeps files like tree-sitter parsers and queries, themes and the tutor
file in a special “runtime” directory. This directory is typically installed
by your package manager and shouldn’t be modified by hand. Multiple runtime
directories are now supported, so you can keep the runtime files installed by
your package manager unchanged while adding new tree-sitter parsers and
queries to a local runtime directory. On Unix systems you can add files to the
&lt;code dir=&quot;auto&quot;&gt;~/.config/helix/runtime&lt;/code&gt; directory which take precedence over the runtime
directory installed by a package manager.&lt;/p&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;&lt;a href=&quot;#wrapping-up&quot;&gt;Wrapping up&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These flashy features are just the tip of the iceberg though. Check out the
23.03 &lt;a href=&quot;https://github.com/helix-editor/helix/blob/master/CHANGELOG.md#2303-2023-03-31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;changelog&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; for the full details on all of the changes in this release.&lt;/p&gt;
&lt;p&gt;Come chat about usage and development questions in the &lt;a href=&quot;https://matrix.to/#/#helix-community:matrix.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Matrix space&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;
and follow along with Helix’s development in the &lt;a href=&quot;https://github.com/helix-editor/helix/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub repository&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Release 22.12 Highlights</title><link>https://helix-editor.vercel.app/news/release-2212/</link><guid isPermaLink="true">https://helix-editor.vercel.app/news/release-2212/</guid><pubDate>Tue, 06 Dec 2022 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Helix is a modal text editor with built-in support for multiple selections,
Language Server Protocol (LSP), tree-sitter, and experimental support for Debug
Adapter Protocol (DAP).&lt;/p&gt;
&lt;p&gt;Today we cut the 22.12 release. This release is big and featureful and saw
contributions from 99 contributors. Thank you all! 🎊&lt;/p&gt;
&lt;p&gt;Helix now has a logo! Thank you &lt;a href=&quot;https://github.com/jakehl&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;@jakehl&lt;/code&gt;&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; for your
contribution!&lt;/p&gt;

&lt;p&gt;Looking for an introduction to Helix or to see Helix out in the wild? Check out
these new videos on Helix.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=xHebvTGOdH8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/watch?v=xHebvTGOdH8&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=7mTi278jUS8&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/watch?v=7mTi278jUS8&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now let’s jump into the highlights.&lt;/p&gt;
&lt;h2 id=&quot;git-diff-gutter&quot;&gt;&lt;a href=&quot;#git-diff-gutter&quot;&gt;Git diff gutter&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The new git diff gutter tracks the changes in the current buffer compared to
the the git index. The markers in the gutter indicate additions, modifications,
and removals compared to the file checked in to git. The git diff gutter is
enabled by default.&lt;/p&gt;
&lt;p&gt;Also be sure to try out the new hunk textobject: &lt;code dir=&quot;auto&quot;&gt;]g&lt;/code&gt; jumps to the next changed
hunk and &lt;code dir=&quot;auto&quot;&gt;[g&lt;/code&gt; jumps to the previous.&lt;/p&gt;
&lt;h2 id=&quot;underline-styles-and-colors&quot;&gt;&lt;a href=&quot;#underline-styles-and-colors&quot;&gt;Underline styles and colors&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Terminals with support for extended underlines can render underlines with
styles like curls or dots as well as colors. Extended underlines can be used to
improve the display of LSP diagnostics. These can be configured in themes with
the new &lt;code dir=&quot;auto&quot;&gt;underline&lt;/code&gt; key:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;diagnostic.error&lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = { &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;underline&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = { &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;red&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; } }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The existing &lt;code dir=&quot;auto&quot;&gt;underline&lt;/code&gt; modifier is now an alias for the &lt;code dir=&quot;auto&quot;&gt;&quot;line&quot;&lt;/code&gt; style.&lt;/p&gt;
&lt;p&gt;If you’re looking to use this in a theme that hasn’t configured it yet, you
can use the new &lt;a href=&quot;https://docs.helix-editor.com/master/themes.html#inheritance&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;theme inheritance&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; feature to modify just the scopes you would
like to change:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;~/.config/helix/themes/my-onedark.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;inherits&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;onedark&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;diagnostic.error&lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = { &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;fg&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;errorfg&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;bg&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;errorbg&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;underline&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = { &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;red&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; } }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;autosave-when-the-terminal-loses-focus&quot;&gt;&lt;a href=&quot;#autosave-when-the-terminal-loses-focus&quot;&gt;Autosave when the terminal loses focus&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Terminals with support for focus events can now automatically save the current
file when you focus on a new window. Enable this behavior by setting the
&lt;code dir=&quot;auto&quot;&gt;editor.auto-save&lt;/code&gt; configuration key to &lt;code dir=&quot;auto&quot;&gt;true&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;multi-cursor-completion&quot;&gt;&lt;a href=&quot;#multi-cursor-completion&quot;&gt;Multi-cursor completion&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Editing with multiple selections is a central feature within helix. LSP
auto-completion now applies to all cursors when editing with multiple
selections, making it easy to replace multiple instances of a symbol with
auto-complete’s help.&lt;/p&gt;
&lt;h2 id=&quot;bufferline&quot;&gt;&lt;a href=&quot;#bufferline&quot;&gt;Bufferline&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The bufferline is a listing of buffers displayed at the top of a window. It
provides an at-a-glance view of the buffers you’re working with. Set
the &lt;code dir=&quot;auto&quot;&gt;editor.bufferline&lt;/code&gt; configuration key to &lt;code dir=&quot;auto&quot;&gt;&quot;always&quot;&lt;/code&gt; to always show the
bufferline, &lt;code dir=&quot;auto&quot;&gt;&quot;multiple&quot;&lt;/code&gt; to show the bufferline only when there are multiple
buffers open, and &lt;code dir=&quot;auto&quot;&gt;&quot;never&quot;&lt;/code&gt; to disable it.&lt;/p&gt;
&lt;h2 id=&quot;behind-the-scenes-improvements&quot;&gt;&lt;a href=&quot;#behind-the-scenes-improvements&quot;&gt;Behind-the-scenes improvements&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;22.12 brings also brings important changes to Helix’s plumbing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The code-path for writing files has been overhauled. This fixes a number of
edge cases around writing large files and failures to write.&lt;/li&gt;
&lt;li&gt;Performance has been improved for tree-sitter parsing, querying and the
handling of injections. This is a noticeable speed boost for large markdown
files in particular since markdown uses injections extensively.&lt;/li&gt;
&lt;li&gt;Failure handling in the LSP code-paths has been improved. Helix now
gracefully handles cases like language servers not supporting capabilities
and unexpected language server crashes.&lt;/li&gt;
&lt;li&gt;The speed and memory usage of the &lt;code dir=&quot;auto&quot;&gt;:reload&lt;/code&gt; command has been vastly improved.
This comes from the creation of &lt;a href=&quot;https://github.com/pascalkuthe/imara-diff&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;imara-diff&lt;/code&gt;&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;, a new diffing
implementation which is faster than the one used internally by &lt;code dir=&quot;auto&quot;&gt;git&lt;/code&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;&lt;a href=&quot;#wrapping-up&quot;&gt;Wrapping up&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There are many more changes arriving now in 22.12 than we can fit in this post.
Check out the 22.12 &lt;a href=&quot;https://github.com/helix-editor/helix/blob/master/CHANGELOG.md#2212-2022-12-06&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;changelog&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; for the full details on all of the performance
boosts, usability improvements and fixes in 22.12.&lt;/p&gt;
&lt;p&gt;Contribute and follow along with development in the &lt;a href=&quot;https://github.com/helix-editor/helix/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Helix GitHub
repository&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; and be sure to join in on discussions in the &lt;a href=&quot;https://matrix.to/#/#helix-community:matrix.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Matrix
channel&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Release 22.08 Highlights</title><link>https://helix-editor.vercel.app/news/release-2208/</link><guid isPermaLink="true">https://helix-editor.vercel.app/news/release-2208/</guid><pubDate>Wed, 31 Aug 2022 18:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Helix is a modal text editor with built-in support for multiple selections,
Language Server Protocol (LSP), tree-sitter, and experimental support for Debug
Adapter Protocol (DAP).&lt;/p&gt;
&lt;p&gt;Today marks the 22.08 release, a release with plenty of fixes and new features.
A big &lt;em&gt;thank you&lt;/em&gt; to our contributors! This release had 87 contributors. 🎉&lt;/p&gt;
&lt;p&gt;Let’s check out the highlighted features for 22.08.&lt;/p&gt;
&lt;h2 id=&quot;indent-guides&quot;&gt;&lt;a href=&quot;#indent-guides&quot;&gt;Indent guides&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Indent guides provide a visual representation for the current indentation
level. Enable indent guides with the &lt;code dir=&quot;auto&quot;&gt;editor.indent-guides.render&lt;/code&gt; key.
The character used as a guide is also customizable.&lt;/p&gt;
&lt;h2 id=&quot;cursorline&quot;&gt;&lt;a href=&quot;#cursorline&quot;&gt;Cursorline&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The cursorline is a horizontal highlighted bar that follows your cursor.
Cursorlines may be themed for the primary and all secondary cursors and
can be enabled or disabled separate from theming with the &lt;code dir=&quot;auto&quot;&gt;editor.cursorline&lt;/code&gt;
option.&lt;/p&gt;
&lt;h2 id=&quot;mode-colors&quot;&gt;&lt;a href=&quot;#mode-colors&quot;&gt;Mode colors&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The mode indicator in the statusline may now be styled based on the current
mode. This feature may be enabled with the &lt;code dir=&quot;auto&quot;&gt;editor.color-modes&lt;/code&gt; option and
colors may be configured using &lt;code dir=&quot;auto&quot;&gt;ui.statusline.{insert,normal,select}&lt;/code&gt; keys
in themes.&lt;/p&gt;
&lt;h2 id=&quot;configurable-statusline&quot;&gt;&lt;a href=&quot;#configurable-statusline&quot;&gt;Configurable statusline&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The statusline may now be configured in the &lt;code dir=&quot;auto&quot;&gt;editor.statusline&lt;/code&gt; section
of the config. Elements may be placed on the left, center or right of
the statusline with a configurable separator and spacers. Two new elements
may now also be added to your statusline: &lt;code dir=&quot;auto&quot;&gt;file-line-ending&lt;/code&gt; and
&lt;code dir=&quot;auto&quot;&gt;position-percentage&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;lsp-signature-help&quot;&gt;&lt;a href=&quot;#lsp-signature-help&quot;&gt;LSP signature help&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Signature help provides documentation as you type the arguments to a function
call and tracks which function parameter is currently being entered. Signature
help is enabled by default.&lt;/p&gt;
&lt;h2 id=&quot;lsp-document-highlight&quot;&gt;&lt;a href=&quot;#lsp-document-highlight&quot;&gt;LSP document highlight&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The document highlight request (&lt;code dir=&quot;auto&quot;&gt;Space-h&lt;/code&gt;) creates a selection for all
instances of the symbol under the primary cursor. Helix has robust support for
multiple selections, so you may edit all selections simultaneously (for
example with &lt;code dir=&quot;auto&quot;&gt;c&lt;/code&gt;) or cycle between selections (&lt;code dir=&quot;auto&quot;&gt;(&lt;/code&gt;/&lt;code dir=&quot;auto&quot;&gt;)&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&quot;lsp-diagnostics-pickers&quot;&gt;&lt;a href=&quot;#lsp-diagnostics-pickers&quot;&gt;LSP diagnostics pickers&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The new buffer and workspace diagnostics pickers may be used to jump to
Language Server diagnostics like warnings and errors. Use &lt;code dir=&quot;auto&quot;&gt;Space-g&lt;/code&gt; to
open the picker with diagnostics for the current buffer and &lt;code dir=&quot;auto&quot;&gt;Space-G&lt;/code&gt;
to view all diagnostics in a workspace.&lt;/p&gt;
&lt;h2 id=&quot;jumplist-picker&quot;&gt;&lt;a href=&quot;#jumplist-picker&quot;&gt;Jumplist picker&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The jumplist saves a history of selections. Save selections with &lt;code dir=&quot;auto&quot;&gt;C-s&lt;/code&gt; and jump
forward with &lt;code dir=&quot;auto&quot;&gt;C-i&lt;/code&gt; and backward with &lt;code dir=&quot;auto&quot;&gt;C-o&lt;/code&gt;. The jumplist is a powerful tool,
especially when working with Language Server goto-definition or global search
which both save to the jumplist automatically.&lt;/p&gt;
&lt;p&gt;22.08 adds a new picker that can be used to jump across entries in the jumplist.
The preview pane shows the line of the saved primary selection. Bring up the
jumplist picker with &lt;code dir=&quot;auto&quot;&gt;Space-j&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;external-formatters&quot;&gt;&lt;a href=&quot;#external-formatters&quot;&gt;External formatters&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Many Language Servers provide format-on-save capabilities. For languages
without Language Servers or for Language Servers that do not implement
formatting, an external formatter binary may now be configured. The document
is passed through the formatter’s stdin and replaced with the formatted output
from stdout.&lt;/p&gt;
&lt;p&gt;An external formatter may also be used when you prefer the formatting from an
external tool over formatting provided by a Language Server. For example if you
configure &lt;code dir=&quot;auto&quot;&gt;black&lt;/code&gt; for formatting Python, formatting will be accomplished with
&lt;code dir=&quot;auto&quot;&gt;black&lt;/code&gt; rather than &lt;code dir=&quot;auto&quot;&gt;pylsp&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;bracketed-paste&quot;&gt;&lt;a href=&quot;#bracketed-paste&quot;&gt;Bracketed paste&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Bracketed paste is terminal emulator feature that allows terminal programs to
recognize paste sequences and handle the pasted text. Without bracketed paste
support, text pasted with operating-system level paste (&lt;code dir=&quot;auto&quot;&gt;C-v&lt;/code&gt;) looked to Helix
like text that was entered very quickly which lead to some odd side-effects
like awkward indentation or mysteriously appearing auto-pair characters.&lt;/p&gt;
&lt;p&gt;22.08 adds support for bracketed paste, so now all pastes into Helix from
terminal emulators that support bracketed paste work as if you had pressed
&lt;code dir=&quot;auto&quot;&gt;Space-p&lt;/code&gt; in normal mode. In the above cast, the entire text of &lt;em&gt;Moby-Dick&lt;/em&gt;
is pasted with &lt;code dir=&quot;auto&quot;&gt;C-v&lt;/code&gt; in insert mode instantly.&lt;/p&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;&lt;a href=&quot;#wrapping-up&quot;&gt;Wrapping up&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These changes are just the highlights. Check out the full &lt;a href=&quot;https://github.com/helix-editor/helix/blob/master/CHANGELOG.md#2208-2022-08-31&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;changelog&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; to see
all that’s changed since 22.05. Release binaries can be found on the &lt;a href=&quot;https://github.com/helix-editor/helix/releases/tag/22.08&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;release
page&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Be ready for more exciting changes in Helix 22.10 expected in October!
Contribute and follow along with development in the
&lt;a href=&quot;https://github.com/helix-editor/helix/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Helix GitHub repository&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; and be sure to join in on discussions in
the &lt;a href=&quot;https://matrix.to/#/#helix-community:matrix.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Matrix channel&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Release 22.05 Highlights</title><link>https://helix-editor.vercel.app/news/release-2205/</link><guid isPermaLink="true">https://helix-editor.vercel.app/news/release-2205/</guid><pubDate>Sat, 28 May 2022 13:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Helix is a modal text editor with built-in support for multiple selections,
Language Server Protocol (LSP), tree-sitter, and experimental support for Debug
Adapter Protocol (DAP).&lt;/p&gt;
&lt;p&gt;Today marks the 22.05 release, a featureful release with over double the number
of contributors as last release (110!). A big thanks to all involved! 🙌&lt;/p&gt;
&lt;p&gt;Also a big shout out to &lt;a href=&quot;https://github.com/amirrezaask&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;code dir=&quot;auto&quot;&gt;@amirrezaask&lt;/code&gt;&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; for
this great &lt;a href=&quot;https://www.youtube.com/watch?v=__U4A2Q9fNI&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Helix introduction video&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Let’s check out the flashy features of 22.05.&lt;/p&gt;
&lt;h2 id=&quot;indentation-rework&quot;&gt;&lt;a href=&quot;#indentation-rework&quot;&gt;Indentation rework&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The indentation system has been fully reworked. Indentation still works by
querying the parsed tree-sitter syntax tree for a document, but now query files
can use the full expressive power of tree-sitter queries rather than just
simple node names. Expect more robust indentation with fewer edge cases.&lt;/p&gt;
&lt;h2 id=&quot;configurable-gutters&quot;&gt;&lt;a href=&quot;#configurable-gutters&quot;&gt;Configurable gutters&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Gutters can now be configured in your &lt;code dir=&quot;auto&quot;&gt;config.toml&lt;/code&gt; file. For example, you can
remove the line-number gutter while still showing LSP diagnostics.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;[editor]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;gutters&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = [&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;diagnostics&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#809191;--1:#616671&quot;&gt;# default is [&quot;diagnostics&quot;, &quot;line-numbers&quot;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;local-language-configuration&quot;&gt;&lt;a href=&quot;#local-language-configuration&quot;&gt;Local language configuration&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Language configuration can now be specified local to a project. Create a
&lt;code dir=&quot;auto&quot;&gt;.helix&lt;/code&gt; directory and a &lt;code dir=&quot;auto&quot;&gt;languages.toml&lt;/code&gt; under it to override values from the
&lt;a href=&quot;https://docs.helix-editor.com/guides/adding_languages.html#language-configuration&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;default language configuration&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;. For example, override a C project’s indents
to use tabs instead of spaces for indentation:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;my_c_project/.helix/languages.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;[[language]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;indent&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = { &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;tab-width&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;unit&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#F78C6C;--1:#AA0982&quot;&gt;\t&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;rulers&quot;&gt;&lt;a href=&quot;#rulers&quot;&gt;Rulers&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Vertical rulers may now be configured through the &lt;code dir=&quot;auto&quot;&gt;rulers&lt;/code&gt; option. Use them
as a guide when adhering to a maximum line length.&lt;/p&gt;
&lt;h2 id=&quot;show-visible-whitespace&quot;&gt;&lt;a href=&quot;#show-visible-whitespace&quot;&gt;Show visible whitespace&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Whitespace characters like spaces, tabs, and newlines may now be rendered. Use
the &lt;code dir=&quot;auto&quot;&gt;whitespace.render&lt;/code&gt; option either at runtime with the &lt;code dir=&quot;auto&quot;&gt;:set&lt;/code&gt; command or in
your &lt;code dir=&quot;auto&quot;&gt;config.toml&lt;/code&gt; under the editor section. Visible whitespace indicators can
make Helix’s selection model more intuitive, especially around line endings.
The characters used for tabs, spaces, non-breaking space, and newlines may also
be customized as well as whether any of the characters are rendered at all. In
fact, for the remaining asciicasts in this post, you’ll be seeing my custom tab
and newline characters!&lt;/p&gt;
&lt;h2 id=&quot;use-registers-in-prompts&quot;&gt;&lt;a href=&quot;#use-registers-in-prompts&quot;&gt;Use registers in prompts&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Values stored in registers may now be used in prompts like search or global
search. In the above example, we yank a selection to the &lt;code dir=&quot;auto&quot;&gt;&quot;&lt;/code&gt; register with
&lt;code dir=&quot;auto&quot;&gt;y&lt;/code&gt; and then open up the global search prompt with &lt;code dir=&quot;auto&quot;&gt;Space&lt;/code&gt; &lt;code dir=&quot;auto&quot;&gt;/&lt;/code&gt;. The available
registers are shown above the prompt and we hit &lt;code dir=&quot;auto&quot;&gt;&quot;&lt;/code&gt; to insert the contents of
the &lt;code dir=&quot;auto&quot;&gt;&quot;&lt;/code&gt; register.&lt;/p&gt;
&lt;h2 id=&quot;reflow-paragraphs&quot;&gt;&lt;a href=&quot;#reflow-paragraphs&quot;&gt;Reflow paragraphs&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The new &lt;code dir=&quot;auto&quot;&gt;:reflow&lt;/code&gt; command hard-wraps text to a given column width. Default
column widths may be configured on a per-language basis. Reflow recognizes
matching prefixes between lines, so you may reflow line-comments, markdown
quotes or lines with leading whitespace and the leading characters will be
placed appropriately.&lt;/p&gt;
&lt;h2 id=&quot;swap-windows&quot;&gt;&lt;a href=&quot;#swap-windows&quot;&gt;Swap windows&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;Windows may now be swapped with neighbor windows and splits may be transposed.
With the window menu open (&lt;code dir=&quot;auto&quot;&gt;C-w&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;space w&lt;/code&gt;), use &lt;code dir=&quot;auto&quot;&gt;H&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;J&lt;/code&gt;, &lt;code dir=&quot;auto&quot;&gt;K&lt;/code&gt;, and &lt;code dir=&quot;auto&quot;&gt;L&lt;/code&gt;
to swap the current window with the left, down, up, and right neighbors,
respectively. Use &lt;code dir=&quot;auto&quot;&gt;t&lt;/code&gt; or &lt;code dir=&quot;auto&quot;&gt;C-t&lt;/code&gt; to switch between a vertical and horizontal
split or vice versa.&lt;/p&gt;
&lt;h2 id=&quot;set-a-language-at-runtime&quot;&gt;&lt;a href=&quot;#set-a-language-at-runtime&quot;&gt;Set a language at runtime&lt;/a&gt;&lt;/h2&gt;
  
&lt;p&gt;The language for a buffer may now be set at runtime. Use
&lt;code dir=&quot;auto&quot;&gt;:set-language language&lt;/code&gt; (or &lt;code dir=&quot;auto&quot;&gt;:lang language&lt;/code&gt; for short) to set the language
and switch language servers.&lt;/p&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;&lt;a href=&quot;#wrapping-up&quot;&gt;Wrapping up&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These are just some highlights from the changes in 22.05. Check out the
&lt;a href=&quot;https://github.com/helix-editor/helix/blob/master/CHANGELOG.md#2205-2022-05-17&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;changelog&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; for the full set. Pick up the release binaries for 22.05 on the
&lt;a href=&quot;https://github.com/helix-editor/helix/releases/tag/22.05&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;release page&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;. Starting with this release, an AppImage is included in the
release binaries for easier usage from Linux.&lt;/p&gt;
&lt;p&gt;Expect plenty more features and improvements in Helix 22.07 coming in July.
Contribute and follow along with development in the
&lt;a href=&quot;https://github.com/helix-editor/helix/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub repository&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; and be sure to join in on discussions in the
&lt;a href=&quot;https://matrix.to/#/#helix-community:matrix.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Matrix channel&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Release 22.03 Highlights</title><link>https://helix-editor.vercel.app/news/release-2203/</link><guid isPermaLink="true">https://helix-editor.vercel.app/news/release-2203/</guid><pubDate>Mon, 28 Mar 2022 16:25:00 GMT</pubDate><content:encoded>&lt;p&gt;Ranging from small quality-of-life improvements and fixes to large features
and refactors, Helix 22.03 brings some exciting changes. Helix is a modal
text editor with built-in support for multiple selections, Language
Server Protocol (LSP), tree-sitter, and now Debug Adapter Protocol (DAP).&lt;/p&gt;
&lt;p&gt;Before we look at the highlights, there are some administrative notes.
&lt;code dir=&quot;auto&quot;&gt;master&lt;/code&gt; branch changes are now published separately from the release
&lt;a href=&quot;https://docs.helix-editor.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;documentation&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;. Find the new &lt;code dir=&quot;auto&quot;&gt;master&lt;/code&gt; docs &lt;a href=&quot;https://docs.helix-editor.com/master/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;here&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.
Helix is switching versioning schemes. Expect to find new releases in
Calendar Version format: &lt;code dir=&quot;auto&quot;&gt;YY.0M(.MICRO)&lt;/code&gt;. We’re aiming to cut regular
releases every two months or so. Check out the &lt;a href=&quot;https://github.com/helix-editor/helix/blob/master/CHANGELOG.md#2203-2022-03-28&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;changelog&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;
for all of the new features and fixes from this release.&lt;/p&gt;
&lt;p&gt;With that out of the way, let’s check out the highlights!&lt;/p&gt;
&lt;h2 id=&quot;health-check&quot;&gt;&lt;a href=&quot;#health-check&quot;&gt;Health-check&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Helix 22.03 brings a new CLI flag: &lt;code dir=&quot;auto&quot;&gt;hx --health&lt;/code&gt;. Use the new health-check
flag to troubleshoot missing language servers and queries.&lt;/p&gt;
&lt;p&gt;Check the health of all languages with &lt;code dir=&quot;auto&quot;&gt;hx --health&lt;/code&gt; or ask for details
about a specific language with &lt;code dir=&quot;auto&quot;&gt;hx --health &amp;#x3C;lang&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;w92 h24&lt;/p&gt;
  
&lt;h2 id=&quot;experimental-dap-support&quot;&gt;&lt;a href=&quot;#experimental-dap-support&quot;&gt;Experimental DAP Support&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Debug Adapter Protocol (DAP) is an abstract protocol for editors and debuggers
to communicate. It’s very similar in spirit to the Language Server Protocol
(LSP), but built for debugging. Interact with the debug adapter with
&lt;code dir=&quot;auto&quot;&gt;&amp;#x3C;space-d&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;w154 h46&lt;/p&gt;
  
&lt;p&gt;Note that the DAP adapter is experimental: it isn’t yet documented, there may
be bugs, and the UX is a bit clunky. Contributions are very welcome!&lt;/p&gt;
&lt;h2 id=&quot;incremental-injection-parsing-rewrite&quot;&gt;&lt;a href=&quot;#incremental-injection-parsing-rewrite&quot;&gt;Incremental Injection Parsing Rewrite&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One of the cooler features of syntax highlight driven by tree-sitter is the
ability to &lt;em&gt;inject&lt;/em&gt; a language into another language’s document. For example,
if you’re writing Markdown, you might use a code-fence like so:&lt;/p&gt;
&lt;p&gt;This is some rust:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;rust&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3C63B3&quot;&gt;println!&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;Hello, world!&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Helix highlights the Rust block by injecting tree-sitter-rust. Injections
have been rewritten so that changes within are now parsed incrementally, which
is a big speed boost when editing documents with large injected blocks.&lt;/p&gt;
&lt;p&gt;Along with this rewrite, Helix now supports &lt;em&gt;combined&lt;/em&gt; injections. For example,
when highlighting Interactive Elixir (IEx), we might have a block of code like
the following:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;elixir&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;iex&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;send&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;self&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;(), &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3C63B3&quot;&gt;:hello&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;iex&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;receive&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3C63B3&quot;&gt;do:&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3C63B3&quot;&gt;:hello&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;-&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3C63B3&quot;&gt;:ok&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The IEx grammar injects tree-sitter-elixir into each line after the prompt
token. Combined injections cover the case where separate injected documents
must be parsed in one combined document, like so:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;elixir&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;iex&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3C63B3&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#097174&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#82AAFF;--1:#3C63B3&quot;&gt;:ok&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#7FDBCA;--1:#097174&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#C792EA;--1:#8D46B4&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Helix can now parse all three lines together. In the future this can be used
to add support for templating languages like EJS or ERB.&lt;/p&gt;
&lt;h2 id=&quot;tree-sitter-grammars-refactor&quot;&gt;&lt;a href=&quot;#tree-sitter-grammars-refactor&quot;&gt;Tree-Sitter Grammars Refactor&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the past, tree-sitter grammar repositories have been added to the Helix
repository as Git submodules. Submodules can be painful to work with though,
especially when there are more than 50 in a repository. Cloning, CI, and
packaging times have slowed down as language support has improved.&lt;/p&gt;
&lt;p&gt;Helix 22.03 completely overhauls the system for tree-sitter grammars. The headline
is that &lt;strong&gt;submodules are gone&lt;/strong&gt;! If you’re working with the source, you can
now clone with a standard &lt;code dir=&quot;auto&quot;&gt;git clone https://github.com/helix-editor/helix&lt;/code&gt;.
So where did the tree-sitter submodules go? They’ve been replaced with two
new CLI flags: &lt;code dir=&quot;auto&quot;&gt;hx --grammar fetch&lt;/code&gt; to clone grammar repositories into the
runtime directory and &lt;code dir=&quot;auto&quot;&gt;hx --grammar build&lt;/code&gt; to compile them. Use &lt;code dir=&quot;auto&quot;&gt;-g&lt;/code&gt; for
short. Grammar repositories are shallow-cloned in parallel, so fetching all
60 grammars can now take as little as 6 seconds on a good connection.&lt;/p&gt;
&lt;p&gt;If you’re building from source or developing Helix, note that fetching and
building are included in the &lt;code dir=&quot;auto&quot;&gt;helix-term&lt;/code&gt; build step, so you should not
need to manually fetch or build grammars.&lt;/p&gt;
&lt;p&gt;Additionally, if you would like to customize which tree-sitter grammars
you fetch and build, you may now add the &lt;code dir=&quot;auto&quot;&gt;use-grammars&lt;/code&gt; key to the &lt;strong&gt;top&lt;/strong&gt; of
your &lt;code dir=&quot;auto&quot;&gt;languages.toml&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;w92 h24&lt;/p&gt;
  
&lt;p&gt;If you’re writing a tree-sitter grammar, you can try out integrating it
by pointing helix to your grammar’s local path in &lt;code dir=&quot;auto&quot;&gt;languages.toml&lt;/code&gt; without
needing to publish changes to a Git remote:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;[[language]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;mylang&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#809191;--1:#616671&quot;&gt;# ..&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt;[[grammar]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;mylang&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = { &lt;/span&gt;&lt;span style=&quot;--0:#C5E478;--1:#3C63B3&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; = &lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#ECC48D;--1:#9B504E&quot;&gt;/local/path/to/tree-sitter-mylang&lt;/span&gt;&lt;span style=&quot;--0:#D9F5DD;--1:#111111&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#D6DEEB;--1:#403F53&quot;&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Running &lt;code dir=&quot;auto&quot;&gt;hx -g build&lt;/code&gt; will build the grammar. Add some queries and you’re
on your way to interactive grammar development.&lt;/p&gt;
&lt;h2 id=&quot;up-next&quot;&gt;&lt;a href=&quot;#up-next&quot;&gt;Up Next&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The next release is sure to be exciting as well. Contribute and follow
along with development in the &lt;a href=&quot;https://github.com/helix-editor/helix/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub repository&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt; and be sure to
join in on discussions in the &lt;a href=&quot;https://matrix.to/#/#helix-community:matrix.org&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Matrix channel&lt;span&gt; ↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>