Rico's Blog

Back

I first heard about Helix about two years ago while learning Rust. I tried picking it up because of its batteries-included features, but kept going back to Vim — switching key bindings overnight is like switching from driving on the left to driving on the right. Then sometime in 2026, tired of installing a dozen plugins just to turn Vim into an IDE, I forced myself to learn Helix inside out. It paid off. I can now comfortably use it as my daily driver. Below are the lessons I collected — things that might help anyone else looking to master Helix.

Navigation#

PurposeAction
Move to beginning of lineg h
Move to start of line (non-blank)g s
Move to end of lineg l

Note: these are two-key sequences — g enters goto mode, then the second key performs the jump.

Selection / Surrounding#

PurposeAction
Change word under cursormiwc (select inside word, then change)
Keep only the primary selection,
Collapse to a single cursor;
Replace surrounding character from { to [m r { [
Add surrounding characterm s <char>
Remove surrounding characterm d <char>
Case-insensitive replace in search(?-i)word
Multi-cursor select via search/<word> Enter s (select all matches)
Vertical selection (add cursors below)position cursor, v, C, then move to select
Vertical selection (add cursors above)position cursor, v, Alt-C, then move
Undou
RedoU
Select to end of filev g e
Select to end of linev g l
Select to start of linev g h
Select to start of filev g g
Delete to end of linev g l d (or t<enter>d)
Swap current line with nextselect first line with x, then d p
Comment / uncomment selectionCtrl-c
Vertical split:vsplit or Ctrl-w v
Horizontal split:hsplit or Ctrl-w s
List files containing patternSpace / then keyword
Select column and yank-joinC... v left/right, :yank-join, navigate, p

LSP#

PurposeAction
List referencesg r
Go to definitiong d
Jump back in jumplistCtrl-o
Jump forward in jumplistCtrl-i

Shell & Misc#

PurposeAction
Insert shell output before cursor:insert-output <cmd> (escape % as %%)
Open debug log:open-log
Run shell command:sh <cmd>
Clear command output from screenCtrl-c
Sort selected linesselect lines, Alt-s (split on newlines), :sort
Check language healthhx --health <language> (e.g. hx --health rust)

Example — insert today’s date:

:insert-output date +%%Y-%%m-%%d
plaintext

My ~/.config/helix/config.toml:

theme = "tokyonight"

[editor]
true-color = true

[keys.normal]
"C-A-o" = "expand_selection"
"C-A-a" = "shrink_selection"

[editor.soft-wrap]
enable = true
wrap-indicator = "↪ "
toml

My ~/.config/helix/languages.toml:

[[language]]
name = "javascript"
auto-format = true

[[language]]
name = "sql"
language-servers = ["sqls"]

[language-server.sqls]
# go install github.com/sqls-server/sqls@latest
# and add ~/go/bin to $PATH
command = "sqls"
toml