Compare commits

...

17 Commits

Author SHA1 Message Date
the-mikedavis
567f4b66dd deploy: b8313da5a87a375e444796c1daaf5019cf6ff0b2 2024-11-20 23:57:53 +00:00
the-mikedavis
30e34aaf15 deploy: 9e171e7d1d644654010b54c775a1d688b6d56fb2 2024-11-20 23:54:57 +00:00
the-mikedavis
5f72657efd deploy: 15b478d433049a77737c2bf80e38951e9de565c2 2024-11-20 23:49:11 +00:00
the-mikedavis
addc88d8db deploy: 887bbbc37508c68d6e65bc52d7e58b20fa9a850c 2024-11-20 23:36:25 +00:00
the-mikedavis
eb66451bcd deploy: 7ee66c06582ffc971754e485002b64d853683776 2024-11-20 23:34:14 +00:00
the-mikedavis
9c89498dfb deploy: 310bc04f23ff4fb9fa056aea9d5373890cac8103 2024-11-20 23:21:01 +00:00
the-mikedavis
e6edbcfb8c deploy: 2f6a113fbea528845283161fac6ce697cb4b6996 2024-11-20 23:19:18 +00:00
the-mikedavis
29a3eeeac1 deploy: b97c7456315f6f870fcd5eca6bca64d80d9172e9 2024-11-20 23:09:24 +00:00
the-mikedavis
c6a0c026d0 deploy: d8e2aab2017a5ffdcbcb982d713ae5991e846744 2024-11-20 23:08:47 +00:00
the-mikedavis
cbf407fbc3 deploy: 188f701f5019cb9775bc2b44129971f7ae2ab395 2024-11-20 23:04:57 +00:00
the-mikedavis
d441a67761 deploy: 56bb366f7e417c700a1fd00c6f92910392219621 2024-11-20 22:50:42 +00:00
the-mikedavis
2e91d8b984 deploy: 4e2faa0be9faef50c7f86b8f8fdaf8c1ca85e79e 2024-11-20 22:22:51 +00:00
the-mikedavis
4b77d8b6b8 deploy: 68ee87695b371cf14a191c57684d687afe38eb4a 2024-11-20 22:17:11 +00:00
the-mikedavis
ea740d35ac deploy: 239262e094b4ab0ef3ee70a13154dce994aa191c 2024-11-20 22:06:46 +00:00
the-mikedavis
374df7cd2a deploy: 23600e3ecb457cd85062a48a0d23961421ea764a 2024-11-20 22:05:30 +00:00
the-mikedavis
7167796b79 deploy: 287e4127804f44ec087b07d49692a5e2876b25af 2024-11-20 22:04:53 +00:00
the-mikedavis
96ecbe0e2c deploy: 3fd7ca334eb53c2f452717c632ea36ce95191390 2024-11-20 21:57:43 +00:00
10 changed files with 118 additions and 50 deletions

View File

@ -283,7 +283,7 @@ to package the runtime into <code>/usr/lib/helix/runtime</code>. The rough steps
script could follow are:</p> script could follow are:</p>
<ol> <ol>
<li><code>export HELIX_DEFAULT_RUNTIME=/usr/lib/helix/runtime</code></li> <li><code>export HELIX_DEFAULT_RUNTIME=/usr/lib/helix/runtime</code></li>
<li><code>cargo build --profile opt --locked --path helix-term</code></li> <li><code>cargo build --profile opt --locked</code></li>
<li><code>cp -r runtime $BUILD_DIR/usr/lib/helix/</code></li> <li><code>cp -r runtime $BUILD_DIR/usr/lib/helix/</code></li>
<li><code>cp target/opt/hx $BUILD_DIR/usr/bin/hx</code></li> <li><code>cp target/opt/hx $BUILD_DIR/usr/bin/hx</code></li>
</ol> </ol>

View File

@ -205,8 +205,8 @@ hidden = false
</code></pre> </code></pre>
<p>You can use a custom configuration file by specifying it with the <code>-c</code> or <p>You can use a custom configuration file by specifying it with the <code>-c</code> or
<code>--config</code> command line argument, for example <code>hx -c path/to/custom-config.toml</code>. <code>--config</code> command line argument, for example <code>hx -c path/to/custom-config.toml</code>.
Additionally, you can reload the configuration file by sending the USR1 You can reload the config file by issuing the <code>:config-reload</code> command. Alternatively, on Unix operating systems, you can reload it by sending the USR1
signal to the Helix process on Unix operating systems, such as by using the command <code>pkill -USR1 hx</code>.</p> signal to the Helix process, such as by using the command <code>pkill -USR1 hx</code>.</p>
<p>Finally, you can have a <code>config.toml</code> local to a project by putting it under a <code>.helix</code> directory in your repository. <p>Finally, you can have a <code>config.toml</code> local to a project by putting it under a <code>.helix</code> directory in your repository.
Its settings will be merged with the configuration directory <code>config.toml</code> and the built-in configuration.</p> Its settings will be merged with the configuration directory <code>config.toml</code> and the built-in configuration.</p>

View File

@ -206,6 +206,7 @@
<div class="table-wrapper"><table><thead><tr><th>Key</th><th>Description</th><th>Default</th></tr></thead><tbody> <div class="table-wrapper"><table><thead><tr><th>Key</th><th>Description</th><th>Default</th></tr></thead><tbody>
<tr><td><code>scrolloff</code></td><td>Number of lines of padding around the edge of the screen when scrolling</td><td><code>5</code></td></tr> <tr><td><code>scrolloff</code></td><td>Number of lines of padding around the edge of the screen when scrolling</td><td><code>5</code></td></tr>
<tr><td><code>mouse</code></td><td>Enable mouse mode</td><td><code>true</code></td></tr> <tr><td><code>mouse</code></td><td>Enable mouse mode</td><td><code>true</code></td></tr>
<tr><td><code>default-yank-register</code></td><td>Default register used for yank/paste</td><td><code>"</code></td></tr>
<tr><td><code>middle-click-paste</code></td><td>Middle click paste support</td><td><code>true</code></td></tr> <tr><td><code>middle-click-paste</code></td><td>Middle click paste support</td><td><code>true</code></td></tr>
<tr><td><code>scroll-lines</code></td><td>Number of lines to scroll per scroll wheel step</td><td><code>3</code></td></tr> <tr><td><code>scroll-lines</code></td><td>Number of lines to scroll per scroll wheel step</td><td><code>3</code></td></tr>
<tr><td><code>shell</code></td><td>Shell to use when running external commands</td><td>Unix: <code>["sh", "-c"]</code><br/>Windows: <code>["cmd", "/C"]</code></td></tr> <tr><td><code>shell</code></td><td>Shell to use when running external commands</td><td>Unix: <code>["sh", "-c"]</code><br/>Windows: <code>["cmd", "/C"]</code></td></tr>
@ -234,8 +235,24 @@
<tr><td><code>indent-heuristic</code></td><td>How the indentation for a newly inserted line is computed: <code>simple</code> just copies the indentation level from the previous line, <code>tree-sitter</code> computes the indentation based on the syntax tree and <code>hybrid</code> combines both approaches. If the chosen heuristic is not available, a different one will be used as a fallback (the fallback order being <code>hybrid</code> -&gt; <code>tree-sitter</code> -&gt; <code>simple</code>).</td><td><code>hybrid</code></td></tr> <tr><td><code>indent-heuristic</code></td><td>How the indentation for a newly inserted line is computed: <code>simple</code> just copies the indentation level from the previous line, <code>tree-sitter</code> computes the indentation based on the syntax tree and <code>hybrid</code> combines both approaches. If the chosen heuristic is not available, a different one will be used as a fallback (the fallback order being <code>hybrid</code> -&gt; <code>tree-sitter</code> -&gt; <code>simple</code>).</td><td><code>hybrid</code></td></tr>
<tr><td><code>jump-label-alphabet</code></td><td>The characters that are used to generate two character jump labels. Characters at the start of the alphabet are used first.</td><td><code>"abcdefghijklmnopqrstuvwxyz"</code></td></tr> <tr><td><code>jump-label-alphabet</code></td><td>The characters that are used to generate two character jump labels. Characters at the start of the alphabet are used first.</td><td><code>"abcdefghijklmnopqrstuvwxyz"</code></td></tr>
<tr><td><code>end-of-line-diagnostics</code></td><td>Minimum severity of diagnostics to render at the end of the line. Set to <code>disable</code> to disable entirely. Refer to the setting about <code>inline-diagnostics</code> for more details</td><td>"disable"</td></tr> <tr><td><code>end-of-line-diagnostics</code></td><td>Minimum severity of diagnostics to render at the end of the line. Set to <code>disable</code> to disable entirely. Refer to the setting about <code>inline-diagnostics</code> for more details</td><td>"disable"</td></tr>
<tr><td><code>clipboard-provider</code></td><td>Which API to use for clipboard interaction. One of <code>pasteboard</code> (MacOS), <code>wayland</code>, <code>x-clip</code>, <code>x-sel</code>, <code>win-32-yank</code>, <code>termux</code>, <code>tmux</code>, <code>windows</code>, <code>termcode</code>, <code>none</code>, or a custom command set.</td><td>Platform and environment specific.</td></tr>
</tbody></table> </tbody></table>
</div> </div>
<h3 id="editorclipboard-provider-section"><a class="header" href="#editorclipboard-provider-section"><code>[editor.clipboard-provider]</code> Section</a></h3>
<p>Helix can be configured wither to use a builtin clipboard configuration or to use
a provided command.</p>
<p>For instance, setting it to use OSC 52 termcodes, the configuration would be:</p>
<pre><code class="language-toml">[editor]
clipboard-provider = "termcode"
</code></pre>
<p>Alternatively, Helix can be configured to use arbitary commands for clipboard integration:</p>
<pre><code class="language-toml">[editor.clipboard-provider.custom]
yank = { command = "cat", args = ["test.txt"] }
paste = { command = "tee", args = ["test.txt"] }
primary-yank = { command = "cat", args = ["test-primary.txt"] } # optional
primary-paste = { command = "tee", args = ["test-primary.txt"] } # optional
</code></pre>
<p>For custom commands the contents of the yank/paste is communicated over stdin/stdout.</p>
<h3 id="editorstatusline-section"><a class="header" href="#editorstatusline-section"><code>[editor.statusline]</code> Section</a></h3> <h3 id="editorstatusline-section"><a class="header" href="#editorstatusline-section"><code>[editor.statusline]</code> Section</a></h3>
<p>Allows configuring the statusline at the bottom of the editor.</p> <p>Allows configuring the statusline at the bottom of the editor.</p>
<p>The configuration distinguishes between three areas of the status line:</p> <p>The configuration distinguishes between three areas of the status line:</p>
@ -526,7 +543,8 @@ S-tab = "extend_parent_node_start"
} }
</code></pre> </code></pre>
<p>The new diagnostic rendering is not yet enabled by default. As soon as end of line or inline diagnostics are enabled the old diagnostics rendering is automatically disabled. The recommended default setting are:</p> <p>The new diagnostic rendering is not yet enabled by default. As soon as end of line or inline diagnostics are enabled the old diagnostics rendering is automatically disabled. The recommended default setting are:</p>
<pre><code>end-of-line-diagnostics = "hint" <pre><code class="language-toml">[editor]
end-of-line-diagnostics = "hint"
[editor.inline-diagnostics] [editor.inline-diagnostics]
cursor-line = "warning" # show warnings and errors on the cursorline inline cursor-line = "warning" # show warnings and errors on the cursorline inline
</code></pre> </code></pre>

View File

@ -335,6 +335,7 @@
<tr><td><code>Alt-p</code>, <code>Alt-left</code></td><td>Select previous sibling node in syntax tree (<strong>TS</strong>)</td><td><code>select_prev_sibling</code></td></tr> <tr><td><code>Alt-p</code>, <code>Alt-left</code></td><td>Select previous sibling node in syntax tree (<strong>TS</strong>)</td><td><code>select_prev_sibling</code></td></tr>
<tr><td><code>Alt-n</code>, <code>Alt-right</code></td><td>Select next sibling node in syntax tree (<strong>TS</strong>)</td><td><code>select_next_sibling</code></td></tr> <tr><td><code>Alt-n</code>, <code>Alt-right</code></td><td>Select next sibling node in syntax tree (<strong>TS</strong>)</td><td><code>select_next_sibling</code></td></tr>
<tr><td><code>Alt-a</code></td><td>Select all sibling nodes in syntax tree (<strong>TS</strong>)</td><td><code>select_all_siblings</code></td></tr> <tr><td><code>Alt-a</code></td><td>Select all sibling nodes in syntax tree (<strong>TS</strong>)</td><td><code>select_all_siblings</code></td></tr>
<tr><td><code>Alt-I</code>, <code>Alt-Shift-down</code></td><td>Select all children nodes in syntax tree (<strong>TS</strong>)</td><td><code>select_all_children</code></td></tr>
<tr><td><code>Alt-e</code></td><td>Move to end of parent node in syntax tree (<strong>TS</strong>)</td><td><code>move_parent_node_end</code></td></tr> <tr><td><code>Alt-e</code></td><td>Move to end of parent node in syntax tree (<strong>TS</strong>)</td><td><code>move_parent_node_end</code></td></tr>
<tr><td><code>Alt-b</code></td><td>Move to start of parent node in syntax tree (<strong>TS</strong>)</td><td><code>move_parent_node_start</code></td></tr> <tr><td><code>Alt-b</code></td><td>Move to start of parent node in syntax tree (<strong>TS</strong>)</td><td><code>move_parent_node_start</code></td></tr>
</tbody></table> </tbody></table>
@ -448,7 +449,7 @@ useful when you're simply looking over text and not actively editing it.</p>
<p>Accessed by typing <code>Space</code> in <a href="#normal-mode">normal mode</a>.</p> <p>Accessed by typing <code>Space</code> in <a href="#normal-mode">normal mode</a>.</p>
<p>This layer is a kludge of mappings, mostly pickers.</p> <p>This layer is a kludge of mappings, mostly pickers.</p>
<div class="table-wrapper"><table><thead><tr><th>Key</th><th>Description</th><th>Command</th></tr></thead><tbody> <div class="table-wrapper"><table><thead><tr><th>Key</th><th>Description</th><th>Command</th></tr></thead><tbody>
<tr><td><code>f</code></td><td>Open file picker</td><td><code>file_picker</code></td></tr> <tr><td><code>f</code></td><td>Open file picker at LSP workspace root</td><td><code>file_picker</code></td></tr>
<tr><td><code>F</code></td><td>Open file picker at current working directory</td><td><code>file_picker_in_current_directory</code></td></tr> <tr><td><code>F</code></td><td>Open file picker at current working directory</td><td><code>file_picker_in_current_directory</code></td></tr>
<tr><td><code>b</code></td><td>Open buffer picker</td><td><code>buffer_picker</code></td></tr> <tr><td><code>b</code></td><td>Open buffer picker</td><td><code>buffer_picker</code></td></tr>
<tr><td><code>j</code></td><td>Open jumplist picker</td><td><code>jumplist_picker</code></td></tr> <tr><td><code>j</code></td><td>Open jumplist picker</td><td><code>jumplist_picker</code></td></tr>

View File

@ -278,7 +278,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>hosts</td><td></td><td></td><td></td><td></td></tr> <tr><td>hosts</td><td></td><td></td><td></td><td></td></tr>
<tr><td>html</td><td></td><td></td><td></td><td><code>vscode-html-language-server</code>, <code>superhtml</code></td></tr> <tr><td>html</td><td></td><td></td><td></td><td><code>vscode-html-language-server</code>, <code>superhtml</code></td></tr>
<tr><td>hurl</td><td></td><td></td><td></td><td></td></tr> <tr><td>hurl</td><td></td><td></td><td></td><td></td></tr>
<tr><td>hyprlang</td><td></td><td></td><td></td><td></td></tr> <tr><td>hyprlang</td><td></td><td></td><td></td><td><code>hyprls</code></td></tr>
<tr><td>idris</td><td></td><td></td><td></td><td><code>idris2-lsp</code></td></tr> <tr><td>idris</td><td></td><td></td><td></td><td><code>idris2-lsp</code></td></tr>
<tr><td>iex</td><td></td><td></td><td></td><td></td></tr> <tr><td>iex</td><td></td><td></td><td></td><td></td></tr>
<tr><td>ini</td><td></td><td></td><td></td><td></td></tr> <tr><td>ini</td><td></td><td></td><td></td><td></td></tr>
@ -323,6 +323,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>move</td><td></td><td></td><td></td><td></td></tr> <tr><td>move</td><td></td><td></td><td></td><td></td></tr>
<tr><td>msbuild</td><td></td><td></td><td></td><td></td></tr> <tr><td>msbuild</td><td></td><td></td><td></td><td></td></tr>
<tr><td>nasm</td><td></td><td></td><td></td><td></td></tr> <tr><td>nasm</td><td></td><td></td><td></td><td></td></tr>
<tr><td>nestedtext</td><td></td><td></td><td></td><td></td></tr>
<tr><td>nickel</td><td></td><td></td><td></td><td><code>nls</code></td></tr> <tr><td>nickel</td><td></td><td></td><td></td><td><code>nls</code></td></tr>
<tr><td>nim</td><td></td><td></td><td></td><td><code>nimlangserver</code></td></tr> <tr><td>nim</td><td></td><td></td><td></td><td><code>nimlangserver</code></td></tr>
<tr><td>nix</td><td></td><td></td><td></td><td><code>nil</code>, <code>nixd</code></td></tr> <tr><td>nix</td><td></td><td></td><td></td><td><code>nil</code>, <code>nixd</code></td></tr>
@ -355,6 +356,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>purescript</td><td></td><td></td><td></td><td><code>purescript-language-server</code></td></tr> <tr><td>purescript</td><td></td><td></td><td></td><td><code>purescript-language-server</code></td></tr>
<tr><td>python</td><td></td><td></td><td></td><td><code>ruff</code>, <code>jedi-language-server</code>, <code>pylsp</code></td></tr> <tr><td>python</td><td></td><td></td><td></td><td><code>ruff</code>, <code>jedi-language-server</code>, <code>pylsp</code></td></tr>
<tr><td>qml</td><td></td><td></td><td></td><td><code>qmlls</code></td></tr> <tr><td>qml</td><td></td><td></td><td></td><td><code>qmlls</code></td></tr>
<tr><td>quint</td><td></td><td></td><td></td><td><code>quint-language-server</code></td></tr>
<tr><td>r</td><td></td><td></td><td></td><td><code>R</code></td></tr> <tr><td>r</td><td></td><td></td><td></td><td><code>R</code></td></tr>
<tr><td>racket</td><td></td><td></td><td></td><td><code>racket</code></td></tr> <tr><td>racket</td><td></td><td></td><td></td><td><code>racket</code></td></tr>
<tr><td>regex</td><td></td><td></td><td></td><td></td></tr> <tr><td>regex</td><td></td><td></td><td></td><td></td></tr>
@ -376,6 +378,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>sml</td><td></td><td></td><td></td><td></td></tr> <tr><td>sml</td><td></td><td></td><td></td><td></td></tr>
<tr><td>snakemake</td><td></td><td></td><td></td><td><code>pylsp</code></td></tr> <tr><td>snakemake</td><td></td><td></td><td></td><td><code>pylsp</code></td></tr>
<tr><td>solidity</td><td></td><td></td><td></td><td><code>solc</code></td></tr> <tr><td>solidity</td><td></td><td></td><td></td><td><code>solc</code></td></tr>
<tr><td>spade</td><td></td><td></td><td></td><td><code>spade-language-server</code></td></tr>
<tr><td>spicedb</td><td></td><td></td><td></td><td></td></tr> <tr><td>spicedb</td><td></td><td></td><td></td><td></td></tr>
<tr><td>sql</td><td></td><td></td><td></td><td></td></tr> <tr><td>sql</td><td></td><td></td><td></td><td></td></tr>
<tr><td>sshclientconfig</td><td></td><td></td><td></td><td></td></tr> <tr><td>sshclientconfig</td><td></td><td></td><td></td><td></td></tr>
@ -391,6 +394,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>task</td><td></td><td></td><td></td><td></td></tr> <tr><td>task</td><td></td><td></td><td></td><td></td></tr>
<tr><td>tcl</td><td></td><td></td><td></td><td></td></tr> <tr><td>tcl</td><td></td><td></td><td></td><td></td></tr>
<tr><td>templ</td><td></td><td></td><td></td><td><code>templ</code></td></tr> <tr><td>templ</td><td></td><td></td><td></td><td><code>templ</code></td></tr>
<tr><td>textproto</td><td></td><td></td><td></td><td></td></tr>
<tr><td>tfvars</td><td></td><td></td><td></td><td><code>terraform-ls</code></td></tr> <tr><td>tfvars</td><td></td><td></td><td></td><td><code>terraform-ls</code></td></tr>
<tr><td>thrift</td><td></td><td></td><td></td><td></td></tr> <tr><td>thrift</td><td></td><td></td><td></td><td></td></tr>
<tr><td>todotxt</td><td></td><td></td><td></td><td></td></tr> <tr><td>todotxt</td><td></td><td></td><td></td><td></td></tr>
@ -402,7 +406,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>typespec</td><td></td><td></td><td></td><td><code>tsp-server</code></td></tr> <tr><td>typespec</td><td></td><td></td><td></td><td><code>tsp-server</code></td></tr>
<tr><td>typst</td><td></td><td></td><td></td><td><code>tinymist</code>, <code>typst-lsp</code></td></tr> <tr><td>typst</td><td></td><td></td><td></td><td><code>tinymist</code>, <code>typst-lsp</code></td></tr>
<tr><td>ungrammar</td><td></td><td></td><td></td><td></td></tr> <tr><td>ungrammar</td><td></td><td></td><td></td><td></td></tr>
<tr><td>unison</td><td></td><td></td><td></td><td></td></tr> <tr><td>unison</td><td></td><td></td><td></td><td></td></tr>
<tr><td>uxntal</td><td></td><td></td><td></td><td></td></tr> <tr><td>uxntal</td><td></td><td></td><td></td><td></td></tr>
<tr><td>v</td><td></td><td></td><td></td><td><code>v-analyzer</code></td></tr> <tr><td>v</td><td></td><td></td><td></td><td><code>v-analyzer</code></td></tr>
<tr><td>vala</td><td></td><td></td><td></td><td><code>vala-language-server</code></td></tr> <tr><td>vala</td><td></td><td></td><td></td><td><code>vala-language-server</code></td></tr>

View File

@ -259,6 +259,11 @@ Download the official Helix AppImage from the <a href="https://github.com/helix-
<pre><code class="language-sh">chmod +x helix-*.AppImage # change permission for executable mode <pre><code class="language-sh">chmod +x helix-*.AppImage # change permission for executable mode
./helix-*.AppImage # run helix ./helix-*.AppImage # run helix
</code></pre> </code></pre>
<p>You can optionally <a href="./building-from-source.html#configure-the-desktop-shortcut">add the <code>.desktop</code> file</a>. Helix must be installed in <code>PATH</code> with the name <code>hx</code>. For example:</p>
<pre><code class="language-sh">mkdir -p "$HOME/.local/bin"
mv helix-*.AppImage "$HOME/.local/bin/hx"
</code></pre>
<p>and make sure <code>~/.local/bin</code> is in your <code>PATH</code>.</p>
<h2 id="macos"><a class="header" href="#macos">macOS</a></h2> <h2 id="macos"><a class="header" href="#macos">macOS</a></h2>
<h3 id="homebrew-core"><a class="header" href="#homebrew-core">Homebrew Core</a></h3> <h3 id="homebrew-core"><a class="header" href="#homebrew-core">Homebrew Core</a></h3>
<pre><code class="language-sh">brew install helix <pre><code class="language-sh">brew install helix

View File

@ -289,6 +289,11 @@ Download the official Helix AppImage from the <a href="https://github.com/helix-
<pre><code class="language-sh">chmod +x helix-*.AppImage # change permission for executable mode <pre><code class="language-sh">chmod +x helix-*.AppImage # change permission for executable mode
./helix-*.AppImage # run helix ./helix-*.AppImage # run helix
</code></pre> </code></pre>
<p>You can optionally <a href="./building-from-source.html#configure-the-desktop-shortcut">add the <code>.desktop</code> file</a>. Helix must be installed in <code>PATH</code> with the name <code>hx</code>. For example:</p>
<pre><code class="language-sh">mkdir -p "$HOME/.local/bin"
mv helix-*.AppImage "$HOME/.local/bin/hx"
</code></pre>
<p>and make sure <code>~/.local/bin</code> is in your <code>PATH</code>.</p>
<h2 id="macos"><a class="header" href="#macos">macOS</a></h2> <h2 id="macos"><a class="header" href="#macos">macOS</a></h2>
<h3 id="homebrew-core"><a class="header" href="#homebrew-core">Homebrew Core</a></h3> <h3 id="homebrew-core"><a class="header" href="#homebrew-core">Homebrew Core</a></h3>
<pre><code class="language-sh">brew install helix <pre><code class="language-sh">brew install helix
@ -418,7 +423,7 @@ to package the runtime into <code>/usr/lib/helix/runtime</code>. The rough steps
script could follow are:</p> script could follow are:</p>
<ol> <ol>
<li><code>export HELIX_DEFAULT_RUNTIME=/usr/lib/helix/runtime</code></li> <li><code>export HELIX_DEFAULT_RUNTIME=/usr/lib/helix/runtime</code></li>
<li><code>cargo build --profile opt --locked --path helix-term</code></li> <li><code>cargo build --profile opt --locked</code></li>
<li><code>cp -r runtime $BUILD_DIR/usr/lib/helix/</code></li> <li><code>cp -r runtime $BUILD_DIR/usr/lib/helix/</code></li>
<li><code>cp target/opt/hx $BUILD_DIR/usr/bin/hx</code></li> <li><code>cp target/opt/hx $BUILD_DIR/usr/bin/hx</code></li>
</ol> </ol>
@ -791,6 +796,7 @@ selection to the "func" <code>identifier</code>.</p>
<tr><td><code>Alt-p</code>, <code>Alt-left</code></td><td>Select previous sibling node in syntax tree (<strong>TS</strong>)</td><td><code>select_prev_sibling</code></td></tr> <tr><td><code>Alt-p</code>, <code>Alt-left</code></td><td>Select previous sibling node in syntax tree (<strong>TS</strong>)</td><td><code>select_prev_sibling</code></td></tr>
<tr><td><code>Alt-n</code>, <code>Alt-right</code></td><td>Select next sibling node in syntax tree (<strong>TS</strong>)</td><td><code>select_next_sibling</code></td></tr> <tr><td><code>Alt-n</code>, <code>Alt-right</code></td><td>Select next sibling node in syntax tree (<strong>TS</strong>)</td><td><code>select_next_sibling</code></td></tr>
<tr><td><code>Alt-a</code></td><td>Select all sibling nodes in syntax tree (<strong>TS</strong>)</td><td><code>select_all_siblings</code></td></tr> <tr><td><code>Alt-a</code></td><td>Select all sibling nodes in syntax tree (<strong>TS</strong>)</td><td><code>select_all_siblings</code></td></tr>
<tr><td><code>Alt-I</code>, <code>Alt-Shift-down</code></td><td>Select all children nodes in syntax tree (<strong>TS</strong>)</td><td><code>select_all_children</code></td></tr>
<tr><td><code>Alt-e</code></td><td>Move to end of parent node in syntax tree (<strong>TS</strong>)</td><td><code>move_parent_node_end</code></td></tr> <tr><td><code>Alt-e</code></td><td>Move to end of parent node in syntax tree (<strong>TS</strong>)</td><td><code>move_parent_node_end</code></td></tr>
<tr><td><code>Alt-b</code></td><td>Move to start of parent node in syntax tree (<strong>TS</strong>)</td><td><code>move_parent_node_start</code></td></tr> <tr><td><code>Alt-b</code></td><td>Move to start of parent node in syntax tree (<strong>TS</strong>)</td><td><code>move_parent_node_start</code></td></tr>
</tbody></table> </tbody></table>
@ -904,7 +910,7 @@ useful when you're simply looking over text and not actively editing it.</p>
<p>Accessed by typing <code>Space</code> in <a href="keymap.html#normal-mode">normal mode</a>.</p> <p>Accessed by typing <code>Space</code> in <a href="keymap.html#normal-mode">normal mode</a>.</p>
<p>This layer is a kludge of mappings, mostly pickers.</p> <p>This layer is a kludge of mappings, mostly pickers.</p>
<div class="table-wrapper"><table><thead><tr><th>Key</th><th>Description</th><th>Command</th></tr></thead><tbody> <div class="table-wrapper"><table><thead><tr><th>Key</th><th>Description</th><th>Command</th></tr></thead><tbody>
<tr><td><code>f</code></td><td>Open file picker</td><td><code>file_picker</code></td></tr> <tr><td><code>f</code></td><td>Open file picker at LSP workspace root</td><td><code>file_picker</code></td></tr>
<tr><td><code>F</code></td><td>Open file picker at current working directory</td><td><code>file_picker_in_current_directory</code></td></tr> <tr><td><code>F</code></td><td>Open file picker at current working directory</td><td><code>file_picker_in_current_directory</code></td></tr>
<tr><td><code>b</code></td><td>Open buffer picker</td><td><code>buffer_picker</code></td></tr> <tr><td><code>b</code></td><td>Open buffer picker</td><td><code>buffer_picker</code></td></tr>
<tr><td><code>j</code></td><td>Open jumplist picker</td><td><code>jumplist_picker</code></td></tr> <tr><td><code>j</code></td><td>Open jumplist picker</td><td><code>jumplist_picker</code></td></tr>
@ -1280,7 +1286,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>hosts</td><td></td><td></td><td></td><td></td></tr> <tr><td>hosts</td><td></td><td></td><td></td><td></td></tr>
<tr><td>html</td><td></td><td></td><td></td><td><code>vscode-html-language-server</code>, <code>superhtml</code></td></tr> <tr><td>html</td><td></td><td></td><td></td><td><code>vscode-html-language-server</code>, <code>superhtml</code></td></tr>
<tr><td>hurl</td><td></td><td></td><td></td><td></td></tr> <tr><td>hurl</td><td></td><td></td><td></td><td></td></tr>
<tr><td>hyprlang</td><td></td><td></td><td></td><td></td></tr> <tr><td>hyprlang</td><td></td><td></td><td></td><td><code>hyprls</code></td></tr>
<tr><td>idris</td><td></td><td></td><td></td><td><code>idris2-lsp</code></td></tr> <tr><td>idris</td><td></td><td></td><td></td><td><code>idris2-lsp</code></td></tr>
<tr><td>iex</td><td></td><td></td><td></td><td></td></tr> <tr><td>iex</td><td></td><td></td><td></td><td></td></tr>
<tr><td>ini</td><td></td><td></td><td></td><td></td></tr> <tr><td>ini</td><td></td><td></td><td></td><td></td></tr>
@ -1325,6 +1331,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>move</td><td></td><td></td><td></td><td></td></tr> <tr><td>move</td><td></td><td></td><td></td><td></td></tr>
<tr><td>msbuild</td><td></td><td></td><td></td><td></td></tr> <tr><td>msbuild</td><td></td><td></td><td></td><td></td></tr>
<tr><td>nasm</td><td></td><td></td><td></td><td></td></tr> <tr><td>nasm</td><td></td><td></td><td></td><td></td></tr>
<tr><td>nestedtext</td><td></td><td></td><td></td><td></td></tr>
<tr><td>nickel</td><td></td><td></td><td></td><td><code>nls</code></td></tr> <tr><td>nickel</td><td></td><td></td><td></td><td><code>nls</code></td></tr>
<tr><td>nim</td><td></td><td></td><td></td><td><code>nimlangserver</code></td></tr> <tr><td>nim</td><td></td><td></td><td></td><td><code>nimlangserver</code></td></tr>
<tr><td>nix</td><td></td><td></td><td></td><td><code>nil</code>, <code>nixd</code></td></tr> <tr><td>nix</td><td></td><td></td><td></td><td><code>nil</code>, <code>nixd</code></td></tr>
@ -1357,6 +1364,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>purescript</td><td></td><td></td><td></td><td><code>purescript-language-server</code></td></tr> <tr><td>purescript</td><td></td><td></td><td></td><td><code>purescript-language-server</code></td></tr>
<tr><td>python</td><td></td><td></td><td></td><td><code>ruff</code>, <code>jedi-language-server</code>, <code>pylsp</code></td></tr> <tr><td>python</td><td></td><td></td><td></td><td><code>ruff</code>, <code>jedi-language-server</code>, <code>pylsp</code></td></tr>
<tr><td>qml</td><td></td><td></td><td></td><td><code>qmlls</code></td></tr> <tr><td>qml</td><td></td><td></td><td></td><td><code>qmlls</code></td></tr>
<tr><td>quint</td><td></td><td></td><td></td><td><code>quint-language-server</code></td></tr>
<tr><td>r</td><td></td><td></td><td></td><td><code>R</code></td></tr> <tr><td>r</td><td></td><td></td><td></td><td><code>R</code></td></tr>
<tr><td>racket</td><td></td><td></td><td></td><td><code>racket</code></td></tr> <tr><td>racket</td><td></td><td></td><td></td><td><code>racket</code></td></tr>
<tr><td>regex</td><td></td><td></td><td></td><td></td></tr> <tr><td>regex</td><td></td><td></td><td></td><td></td></tr>
@ -1378,6 +1386,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>sml</td><td></td><td></td><td></td><td></td></tr> <tr><td>sml</td><td></td><td></td><td></td><td></td></tr>
<tr><td>snakemake</td><td></td><td></td><td></td><td><code>pylsp</code></td></tr> <tr><td>snakemake</td><td></td><td></td><td></td><td><code>pylsp</code></td></tr>
<tr><td>solidity</td><td></td><td></td><td></td><td><code>solc</code></td></tr> <tr><td>solidity</td><td></td><td></td><td></td><td><code>solc</code></td></tr>
<tr><td>spade</td><td></td><td></td><td></td><td><code>spade-language-server</code></td></tr>
<tr><td>spicedb</td><td></td><td></td><td></td><td></td></tr> <tr><td>spicedb</td><td></td><td></td><td></td><td></td></tr>
<tr><td>sql</td><td></td><td></td><td></td><td></td></tr> <tr><td>sql</td><td></td><td></td><td></td><td></td></tr>
<tr><td>sshclientconfig</td><td></td><td></td><td></td><td></td></tr> <tr><td>sshclientconfig</td><td></td><td></td><td></td><td></td></tr>
@ -1393,6 +1402,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>task</td><td></td><td></td><td></td><td></td></tr> <tr><td>task</td><td></td><td></td><td></td><td></td></tr>
<tr><td>tcl</td><td></td><td></td><td></td><td></td></tr> <tr><td>tcl</td><td></td><td></td><td></td><td></td></tr>
<tr><td>templ</td><td></td><td></td><td></td><td><code>templ</code></td></tr> <tr><td>templ</td><td></td><td></td><td></td><td><code>templ</code></td></tr>
<tr><td>textproto</td><td></td><td></td><td></td><td></td></tr>
<tr><td>tfvars</td><td></td><td></td><td></td><td><code>terraform-ls</code></td></tr> <tr><td>tfvars</td><td></td><td></td><td></td><td><code>terraform-ls</code></td></tr>
<tr><td>thrift</td><td></td><td></td><td></td><td></td></tr> <tr><td>thrift</td><td></td><td></td><td></td><td></td></tr>
<tr><td>todotxt</td><td></td><td></td><td></td><td></td></tr> <tr><td>todotxt</td><td></td><td></td><td></td><td></td></tr>
@ -1404,7 +1414,7 @@ Languages</a> guide for more language configuration information.</p>
<tr><td>typespec</td><td></td><td></td><td></td><td><code>tsp-server</code></td></tr> <tr><td>typespec</td><td></td><td></td><td></td><td><code>tsp-server</code></td></tr>
<tr><td>typst</td><td></td><td></td><td></td><td><code>tinymist</code>, <code>typst-lsp</code></td></tr> <tr><td>typst</td><td></td><td></td><td></td><td><code>tinymist</code>, <code>typst-lsp</code></td></tr>
<tr><td>ungrammar</td><td></td><td></td><td></td><td></td></tr> <tr><td>ungrammar</td><td></td><td></td><td></td><td></td></tr>
<tr><td>unison</td><td></td><td></td><td></td><td></td></tr> <tr><td>unison</td><td></td><td></td><td></td><td></td></tr>
<tr><td>uxntal</td><td></td><td></td><td></td><td></td></tr> <tr><td>uxntal</td><td></td><td></td><td></td><td></td></tr>
<tr><td>v</td><td></td><td></td><td></td><td><code>v-analyzer</code></td></tr> <tr><td>v</td><td></td><td></td><td></td><td><code>v-analyzer</code></td></tr>
<tr><td>vala</td><td></td><td></td><td></td><td><code>vala-language-server</code></td></tr> <tr><td>vala</td><td></td><td></td><td></td><td><code>vala-language-server</code></td></tr>
@ -1462,8 +1472,8 @@ hidden = false
</code></pre> </code></pre>
<p>You can use a custom configuration file by specifying it with the <code>-c</code> or <p>You can use a custom configuration file by specifying it with the <code>-c</code> or
<code>--config</code> command line argument, for example <code>hx -c path/to/custom-config.toml</code>. <code>--config</code> command line argument, for example <code>hx -c path/to/custom-config.toml</code>.
Additionally, you can reload the configuration file by sending the USR1 You can reload the config file by issuing the <code>:config-reload</code> command. Alternatively, on Unix operating systems, you can reload it by sending the USR1
signal to the Helix process on Unix operating systems, such as by using the command <code>pkill -USR1 hx</code>.</p> signal to the Helix process, such as by using the command <code>pkill -USR1 hx</code>.</p>
<p>Finally, you can have a <code>config.toml</code> local to a project by putting it under a <code>.helix</code> directory in your repository. <p>Finally, you can have a <code>config.toml</code> local to a project by putting it under a <code>.helix</code> directory in your repository.
Its settings will be merged with the configuration directory <code>config.toml</code> and the built-in configuration.</p> Its settings will be merged with the configuration directory <code>config.toml</code> and the built-in configuration.</p>
<div style="break-before: page; page-break-before: always;"></div><h2 id="editor"><a class="header" href="#editor">Editor</a></h2> <div style="break-before: page; page-break-before: always;"></div><h2 id="editor"><a class="header" href="#editor">Editor</a></h2>
@ -1493,6 +1503,7 @@ Its settings will be merged with the configuration directory <code>config.toml</
<div class="table-wrapper"><table><thead><tr><th>Key</th><th>Description</th><th>Default</th></tr></thead><tbody> <div class="table-wrapper"><table><thead><tr><th>Key</th><th>Description</th><th>Default</th></tr></thead><tbody>
<tr><td><code>scrolloff</code></td><td>Number of lines of padding around the edge of the screen when scrolling</td><td><code>5</code></td></tr> <tr><td><code>scrolloff</code></td><td>Number of lines of padding around the edge of the screen when scrolling</td><td><code>5</code></td></tr>
<tr><td><code>mouse</code></td><td>Enable mouse mode</td><td><code>true</code></td></tr> <tr><td><code>mouse</code></td><td>Enable mouse mode</td><td><code>true</code></td></tr>
<tr><td><code>default-yank-register</code></td><td>Default register used for yank/paste</td><td><code>"</code></td></tr>
<tr><td><code>middle-click-paste</code></td><td>Middle click paste support</td><td><code>true</code></td></tr> <tr><td><code>middle-click-paste</code></td><td>Middle click paste support</td><td><code>true</code></td></tr>
<tr><td><code>scroll-lines</code></td><td>Number of lines to scroll per scroll wheel step</td><td><code>3</code></td></tr> <tr><td><code>scroll-lines</code></td><td>Number of lines to scroll per scroll wheel step</td><td><code>3</code></td></tr>
<tr><td><code>shell</code></td><td>Shell to use when running external commands</td><td>Unix: <code>["sh", "-c"]</code><br/>Windows: <code>["cmd", "/C"]</code></td></tr> <tr><td><code>shell</code></td><td>Shell to use when running external commands</td><td>Unix: <code>["sh", "-c"]</code><br/>Windows: <code>["cmd", "/C"]</code></td></tr>
@ -1521,8 +1532,24 @@ Its settings will be merged with the configuration directory <code>config.toml</
<tr><td><code>indent-heuristic</code></td><td>How the indentation for a newly inserted line is computed: <code>simple</code> just copies the indentation level from the previous line, <code>tree-sitter</code> computes the indentation based on the syntax tree and <code>hybrid</code> combines both approaches. If the chosen heuristic is not available, a different one will be used as a fallback (the fallback order being <code>hybrid</code> -&gt; <code>tree-sitter</code> -&gt; <code>simple</code>).</td><td><code>hybrid</code></td></tr> <tr><td><code>indent-heuristic</code></td><td>How the indentation for a newly inserted line is computed: <code>simple</code> just copies the indentation level from the previous line, <code>tree-sitter</code> computes the indentation based on the syntax tree and <code>hybrid</code> combines both approaches. If the chosen heuristic is not available, a different one will be used as a fallback (the fallback order being <code>hybrid</code> -&gt; <code>tree-sitter</code> -&gt; <code>simple</code>).</td><td><code>hybrid</code></td></tr>
<tr><td><code>jump-label-alphabet</code></td><td>The characters that are used to generate two character jump labels. Characters at the start of the alphabet are used first.</td><td><code>"abcdefghijklmnopqrstuvwxyz"</code></td></tr> <tr><td><code>jump-label-alphabet</code></td><td>The characters that are used to generate two character jump labels. Characters at the start of the alphabet are used first.</td><td><code>"abcdefghijklmnopqrstuvwxyz"</code></td></tr>
<tr><td><code>end-of-line-diagnostics</code></td><td>Minimum severity of diagnostics to render at the end of the line. Set to <code>disable</code> to disable entirely. Refer to the setting about <code>inline-diagnostics</code> for more details</td><td>"disable"</td></tr> <tr><td><code>end-of-line-diagnostics</code></td><td>Minimum severity of diagnostics to render at the end of the line. Set to <code>disable</code> to disable entirely. Refer to the setting about <code>inline-diagnostics</code> for more details</td><td>"disable"</td></tr>
<tr><td><code>clipboard-provider</code></td><td>Which API to use for clipboard interaction. One of <code>pasteboard</code> (MacOS), <code>wayland</code>, <code>x-clip</code>, <code>x-sel</code>, <code>win-32-yank</code>, <code>termux</code>, <code>tmux</code>, <code>windows</code>, <code>termcode</code>, <code>none</code>, or a custom command set.</td><td>Platform and environment specific.</td></tr>
</tbody></table> </tbody></table>
</div> </div>
<h3 id="editorclipboard-provider-section"><a class="header" href="#editorclipboard-provider-section"><code>[editor.clipboard-provider]</code> Section</a></h3>
<p>Helix can be configured wither to use a builtin clipboard configuration or to use
a provided command.</p>
<p>For instance, setting it to use OSC 52 termcodes, the configuration would be:</p>
<pre><code class="language-toml">[editor]
clipboard-provider = "termcode"
</code></pre>
<p>Alternatively, Helix can be configured to use arbitary commands for clipboard integration:</p>
<pre><code class="language-toml">[editor.clipboard-provider.custom]
yank = { command = "cat", args = ["test.txt"] }
paste = { command = "tee", args = ["test.txt"] }
primary-yank = { command = "cat", args = ["test-primary.txt"] } # optional
primary-paste = { command = "tee", args = ["test-primary.txt"] } # optional
</code></pre>
<p>For custom commands the contents of the yank/paste is communicated over stdin/stdout.</p>
<h3 id="editorstatusline-section"><a class="header" href="#editorstatusline-section"><code>[editor.statusline]</code> Section</a></h3> <h3 id="editorstatusline-section"><a class="header" href="#editorstatusline-section"><code>[editor.statusline]</code> Section</a></h3>
<p>Allows configuring the statusline at the bottom of the editor.</p> <p>Allows configuring the statusline at the bottom of the editor.</p>
<p>The configuration distinguishes between three areas of the status line:</p> <p>The configuration distinguishes between three areas of the status line:</p>
@ -1813,7 +1840,8 @@ S-tab = "extend_parent_node_start"
} }
</code></pre> </code></pre>
<p>The new diagnostic rendering is not yet enabled by default. As soon as end of line or inline diagnostics are enabled the old diagnostics rendering is automatically disabled. The recommended default setting are:</p> <p>The new diagnostic rendering is not yet enabled by default. As soon as end of line or inline diagnostics are enabled the old diagnostics rendering is automatically disabled. The recommended default setting are:</p>
<pre><code>end-of-line-diagnostics = "hint" <pre><code class="language-toml">[editor]
end-of-line-diagnostics = "hint"
[editor.inline-diagnostics] [editor.inline-diagnostics]
cursor-line = "warning" # show warnings and errors on the cursorline inline cursor-line = "warning" # show warnings and errors on the cursorline inline
</code></pre> </code></pre>
@ -2230,9 +2258,31 @@ berry = "#2A2A4D"
<p>Helix currently supports one-way key remapping through a simple TOML configuration <p>Helix currently supports one-way key remapping through a simple TOML configuration
file. (More powerful solutions such as rebinding via commands will be file. (More powerful solutions such as rebinding via commands will be
available in the future).</p> available in the future).</p>
<p>There are three kinds of commands that can be used in keymaps:</p>
<ul>
<li>Static commands: commands like <code>move_char_right</code> which are usually bound to
keys and used for movement and editing. A list of static commands is
available in the <a href="./keymap.html">Keymap</a> documentation and in the source code
in <a href="https://github.com/helix-editor/helix/blob/master/helix-term/src/commands.rs"><code>helix-term/src/commands.rs</code></a>
at the invocation of <code>static_commands!</code> macro.</li>
<li>Typable commands: commands that can be executed from command mode (<code>:</code>), for
example <code>:write!</code>. See the <a href="./commands.html">Commands</a> documentation for a
list of available typeable commands or the <code>TypableCommandList</code> declaration in
the source code at <a href="https://github.com/helix-editor/helix/blob/master/helix-term/src/commands/typed.rs"><code>helix-term/src/commands/typed.rs</code></a>.</li>
<li>Macros: sequences of keys that are executed in order. These keybindings
start with <code>@</code> and then list any number of keys to be executed. For example
<code>@miw</code> can be used to select the surrounding word. For now, macro keybindings
are not allowed in keybinding sequences due to limitations in the way that
command sequences are executed. Modifier keys (e.g. Alt+o) can be used
like <code>"&lt;A-o&gt;"</code>, e.g. <code>"@miw&lt;A-o&gt;"</code></li>
</ul>
<p>To remap keys, create a <code>config.toml</code> file in your <code>helix</code> configuration <p>To remap keys, create a <code>config.toml</code> file in your <code>helix</code> configuration
directory (default <code>~/.config/helix</code> on Linux systems) with a structure like directory (default <code>~/.config/helix</code> on Linux systems) with a structure like
this:</p> this:</p>
<blockquote>
<p>💡 To set a modifier + key as a keymap, type <code>A-X = ...</code> or <code>C-X = ...</code> for Alt + X or Ctrl + X. Combine with Shift using a dash, e.g. <code>C-S-esc</code>.
Within macros, wrap them in <code>&lt;&gt;</code>, e.g. <code>&lt;A-X&gt;</code> and <code>&lt;C-X&gt;</code> to distinguish from the <code>A</code> or <code>C</code> keys.</p>
</blockquote>
<pre><code class="language-toml"># At most one section each of 'keys.normal', 'keys.insert' and 'keys.select' <pre><code class="language-toml"># At most one section each of 'keys.normal', 'keys.insert' and 'keys.select'
[keys.normal] [keys.normal]
C-s = ":w" # Maps Ctrl-s to the typable command :w which is an alias for :write (save file) C-s = ":w" # Maps Ctrl-s to the typable command :w which is an alias for :write (save file)
@ -2242,6 +2292,7 @@ w = "move_line_up" # Maps the 'w' key move_line_up
"C-S-esc" = "extend_line" # Maps Ctrl-Shift-Escape to extend_line "C-S-esc" = "extend_line" # Maps Ctrl-Shift-Escape to extend_line
g = { a = "code_action" } # Maps `ga` to show possible code actions g = { a = "code_action" } # Maps `ga` to show possible code actions
"ret" = ["open_below", "normal_mode"] # Maps the enter key to open_below then re-enter normal mode "ret" = ["open_below", "normal_mode"] # Maps the enter key to open_below then re-enter normal mode
"A-x" = "@x&lt;A-d&gt;" # Maps Alt-x to a macro selecting the whole line and deleting it without yanking it
[keys.insert] [keys.insert]
"A-x" = "normal_mode" # Maps Alt-X to enter normal mode "A-x" = "normal_mode" # Maps Alt-X to enter normal mode
@ -2291,23 +2342,6 @@ t = ":run-shell-command cargo test"
</tbody></table> </tbody></table>
</div> </div>
<p>Keys can be disabled by binding them to the <code>no_op</code> command.</p> <p>Keys can be disabled by binding them to the <code>no_op</code> command.</p>
<h2 id="commands-1"><a class="header" href="#commands-1">Commands</a></h2>
<p>There are three kinds of commands that can be used in keymaps:</p>
<ul>
<li>Static commands: commands like <code>move_char_right</code> which are usually bound to
keys and used for movement and editing. A list of static commands is
available in the <a href="./keymap.html">Keymap</a> documentation and in the source code
in <a href="https://github.com/helix-editor/helix/blob/master/helix-term/src/commands.rs"><code>helix-term/src/commands.rs</code></a>
at the invocation of <code>static_commands!</code> macro and the <code>TypableCommandList</code>.</li>
<li>Typable commands: commands that can be executed from command mode (<code>:</code>), for
example <code>:write!</code>. See the <a href="./commands.html">Commands</a> documentation for a
list of available typeable commands.</li>
<li>Macros: sequences of keys that are executed in order. These keybindings
start with <code>@</code> and then list any number of keys to be executed. For example
<code>@miw</code> can be used to select the surrounding word. For now, macro keybindings
are not allowed in keybinding sequences due to limitations in the way that
command sequences are executed.</li>
</ul>
<div style="break-before: page; page-break-before: always;"></div><h2 id="languages"><a class="header" href="#languages">Languages</a></h2> <div style="break-before: page; page-break-before: always;"></div><h2 id="languages"><a class="header" href="#languages">Languages</a></h2>
<p>Language-specific settings and settings for language servers are configured <p>Language-specific settings and settings for language servers are configured
in <code>languages.toml</code> files.</p> in <code>languages.toml</code> files.</p>

View File

@ -183,9 +183,31 @@
<p>Helix currently supports one-way key remapping through a simple TOML configuration <p>Helix currently supports one-way key remapping through a simple TOML configuration
file. (More powerful solutions such as rebinding via commands will be file. (More powerful solutions such as rebinding via commands will be
available in the future).</p> available in the future).</p>
<p>There are three kinds of commands that can be used in keymaps:</p>
<ul>
<li>Static commands: commands like <code>move_char_right</code> which are usually bound to
keys and used for movement and editing. A list of static commands is
available in the <a href="./keymap.html">Keymap</a> documentation and in the source code
in <a href="https://github.com/helix-editor/helix/blob/master/helix-term/src/commands.rs"><code>helix-term/src/commands.rs</code></a>
at the invocation of <code>static_commands!</code> macro.</li>
<li>Typable commands: commands that can be executed from command mode (<code>:</code>), for
example <code>:write!</code>. See the <a href="./commands.html">Commands</a> documentation for a
list of available typeable commands or the <code>TypableCommandList</code> declaration in
the source code at <a href="https://github.com/helix-editor/helix/blob/master/helix-term/src/commands/typed.rs"><code>helix-term/src/commands/typed.rs</code></a>.</li>
<li>Macros: sequences of keys that are executed in order. These keybindings
start with <code>@</code> and then list any number of keys to be executed. For example
<code>@miw</code> can be used to select the surrounding word. For now, macro keybindings
are not allowed in keybinding sequences due to limitations in the way that
command sequences are executed. Modifier keys (e.g. Alt+o) can be used
like <code>"&lt;A-o&gt;"</code>, e.g. <code>"@miw&lt;A-o&gt;"</code></li>
</ul>
<p>To remap keys, create a <code>config.toml</code> file in your <code>helix</code> configuration <p>To remap keys, create a <code>config.toml</code> file in your <code>helix</code> configuration
directory (default <code>~/.config/helix</code> on Linux systems) with a structure like directory (default <code>~/.config/helix</code> on Linux systems) with a structure like
this:</p> this:</p>
<blockquote>
<p>💡 To set a modifier + key as a keymap, type <code>A-X = ...</code> or <code>C-X = ...</code> for Alt + X or Ctrl + X. Combine with Shift using a dash, e.g. <code>C-S-esc</code>.
Within macros, wrap them in <code>&lt;&gt;</code>, e.g. <code>&lt;A-X&gt;</code> and <code>&lt;C-X&gt;</code> to distinguish from the <code>A</code> or <code>C</code> keys.</p>
</blockquote>
<pre><code class="language-toml"># At most one section each of 'keys.normal', 'keys.insert' and 'keys.select' <pre><code class="language-toml"># At most one section each of 'keys.normal', 'keys.insert' and 'keys.select'
[keys.normal] [keys.normal]
C-s = ":w" # Maps Ctrl-s to the typable command :w which is an alias for :write (save file) C-s = ":w" # Maps Ctrl-s to the typable command :w which is an alias for :write (save file)
@ -195,6 +217,7 @@ w = "move_line_up" # Maps the 'w' key move_line_up
"C-S-esc" = "extend_line" # Maps Ctrl-Shift-Escape to extend_line "C-S-esc" = "extend_line" # Maps Ctrl-Shift-Escape to extend_line
g = { a = "code_action" } # Maps `ga` to show possible code actions g = { a = "code_action" } # Maps `ga` to show possible code actions
"ret" = ["open_below", "normal_mode"] # Maps the enter key to open_below then re-enter normal mode "ret" = ["open_below", "normal_mode"] # Maps the enter key to open_below then re-enter normal mode
"A-x" = "@x&lt;A-d&gt;" # Maps Alt-x to a macro selecting the whole line and deleting it without yanking it
[keys.insert] [keys.insert]
"A-x" = "normal_mode" # Maps Alt-X to enter normal mode "A-x" = "normal_mode" # Maps Alt-X to enter normal mode
@ -244,23 +267,6 @@ t = ":run-shell-command cargo test"
</tbody></table> </tbody></table>
</div> </div>
<p>Keys can be disabled by binding them to the <code>no_op</code> command.</p> <p>Keys can be disabled by binding them to the <code>no_op</code> command.</p>
<h2 id="commands"><a class="header" href="#commands">Commands</a></h2>
<p>There are three kinds of commands that can be used in keymaps:</p>
<ul>
<li>Static commands: commands like <code>move_char_right</code> which are usually bound to
keys and used for movement and editing. A list of static commands is
available in the <a href="./keymap.html">Keymap</a> documentation and in the source code
in <a href="https://github.com/helix-editor/helix/blob/master/helix-term/src/commands.rs"><code>helix-term/src/commands.rs</code></a>
at the invocation of <code>static_commands!</code> macro and the <code>TypableCommandList</code>.</li>
<li>Typable commands: commands that can be executed from command mode (<code>:</code>), for
example <code>:write!</code>. See the <a href="./commands.html">Commands</a> documentation for a
list of available typeable commands.</li>
<li>Macros: sequences of keys that are executed in order. These keybindings
start with <code>@</code> and then list any number of keys to be executed. For example
<code>@miw</code> can be used to select the surrounding word. For now, macro keybindings
are not allowed in keybinding sequences due to limitations in the way that
command sequences are executed.</li>
</ul>
</main> </main>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long