ハクソク

世界を動かす技術を、日本語で。

Helix: ポストモダンテキストエディタ

概要

  • Helixは、ターミナル向けのポストモダンなテキストエディタ
  • 複数選択・複数カーソル操作を基本とした編集体験
  • Tree-sitterによる堅牢な構文解析と高機能なコード操作
  • LSP対応でIDE並みの機能を標準搭載
  • Rust製・軽量設計、バッテリーにも優しい

Helix: ポストモダン・テキストエディタの特徴

  • 複数選択・複数カーソルを編集の基本単位に採用
    • Kakouneから着想を得た操作性
    • コマンドが選択範囲を直接操作、同時編集が容易
  • Tree-sitter統合による強力な構文解析
    • エラー耐性のある構文木を生成
    • 高精度なシンタックスハイライト、インデント計算、コードナビゲーション
  • 高度なコード操作機能
    • 関数・クラス・コメントなど、構文単位での選択や移動
    • プレーンテキストではなく構文木ノード単位で編集可能
  • Language Server Protocol(LSP)標準対応
    • 言語ごとの自動補完、定義ジャンプ、ドキュメント表示、診断などIDE機能
    • 追加設定不要、即利用可能
  • Rust製・ターミナル特化
    • Electron、VimScript、JavaScript非依存
    • ssh、tmux、プレーンなターミナル環境で快適動作
    • 軽量設計でバッテリー消費を抑制
  • モダンな標準機能
    • ファジーファインダーでファイル・シンボルジャンプ
    • プロジェクト横断検索、美しいテーマ、自動括弧補完
    • surround操作など多彩な内蔵機能

よくある質問

  • 「ポストモダン」とは?
    • Neovimが「モダンVim」なら、Helixは「ポストモダン」の冗談
  • 使いやすさは?
    • はい、非常に使いやすい設計
  • GUIフロントエンドの予定は?
    • WebGPUベースのGUIプロトタイプを検討中(GitHubで議論中)
  • プラグインは?
    • 現時点でプラグインシステムは未実装
    • 将来的な導入を検討中(詳細はGitHubで議論)
  • Kakouneとの違いは?
    • Helixはより多くの機能を標準内蔵
    • Kakouneは外部ツール連携重視、Helixは統合重視
    • シンタックス解析にtree-sitterを採用
  • Vimとの違いは?
    • ゼロから再設計し、経験を活かした破壊的改善
    • コードベースはコンパクト、現代的な初期設定
    • モーダルエディタ未経験者でも始めやすい
    • 設定ファイルの煩雑さを大幅軽減

サポート・コミュニティ

  • GitHubでのコード貢献
  • Matrixでのプロジェクトディスカッション
  • OpenCollectiveでの開発支援

Hackerたちの意見

FAQの2つ目の質問を見てみてね :)。Helixはすごく印象的だと思う。PythonのLSPが何も設定せずに動いてたのを覚えてる。でも、25年も使ってきたvimの筋肉記憶があるから、Emacsとvim(またはその類似品)を切り替えるのが大変なんだ。例えば、vimを使った後にEmacsでESCを何回も押しちゃうんだよね。3回押すだけでウィンドウが閉じちゃうのに。Helixはvimからモーダル編集を借りてるけど、微妙(でも意味のある、認めるけど)な変化を加えてるから、筋肉記憶が狂っちゃうんだ。筋肉記憶の最悪なところは、忘れるのがほぼ不可能なことだよね。これはHelixのせいじゃなくて、俺のジレンマなんだけど…。
しばらくエルゴノミクスキーボードを使ってて、普通のキーボードには戻れないって感じてる。ここ2週間は普通のキーボードで作業しなきゃいけなかったんだけど、最初の1日は痛かったけど、すぐに普通の速度でタイピングできるようになった。エルゴノミクスキーボードの快適さは失わずにね。今はコンテキストスイッチもできるし。ただ、簡単ではなかったよ。最初の苦労の後、vimとhelixの両方に慣れるかもしれないね?
Emacsの拡張可能なViレイヤー(「Evil」モード)試したことある?俺の筋肉記憶は、Evilモードを使うことでほぼシームレスにVimからEmacsに切り替わったよ。
「でも、25年間使ってきたおかげで、vimの筋肉記憶があるんだ。」俺もそうだよ。何回か試行錯誤したけど、今はHelixを使ってて後悔はしてない。ddやGみたいな大きな違いを乗り越えれば、あとは少しずつ慣れていく感じだね。
Zedエディタは、LSPを標準でサポートしつつ、重要なら正確なviバインディングも持ってるヘリックスの哲学があると思う。
> EmacsではESCを何度も押すんだけど、3回押せばウィンドウを閉じるのに十分だよ。Emacsではすべてのキー操作の組み合わせを設定できるから、M-ESC ESCを無害なもの(例えば、全く機能しないもの)にバインドすればいい。一つの可能性として、~/.emacsファイルに以下の行を追加するのがいいかもね:(global-set-key (kbd "M-ESC ESC") 'keyboard-quit)
これが数年間、文章とコードのメインエディタになってる(Sublime Text -> Atom -> Vim -> Helix)。全体的に素晴らしいよ。多くのLSPがほぼそのままで動くし、設定も昔の.vimrcのほんの一部のサイズで済んでる。驚くことに、Vimの筋肉記憶を更新するのにそんなに時間はかからなかった。数日か数週間かな?でも、モーダルエディタ全般にはまだ複雑な気持ちがあって、Helixに対する不満のほとんどはモーダルエディタやコンソールエディタ全般に関することなんだ。コード折りたたみ機能はまだ待ってるところ。
モーダルエディタについての不満を聞きたいな!私は長年Emacsを使ってる(伝統的なキー操作、evil-modeじゃないよ)、でも10年以上前からVimも並行して使い始めた。どちらもかなり使いこなしてるし、Vimの高度な動作や機能もよく使ってる。Vimのテキストオブジェクトの力や組み合わせの良さが大好きで、その恩恵も感じてる。ただ、行内での小さな編集をたくさんする時に、すべての編集のためにモードを頻繁に切り替えるのが面倒に感じることもある。Emacsでは複数のカーソルと、テキストオブジェクトによって選択を段階的に拡大・縮小するためのtreesitterベースのプラグインを使ってる。テキストを扱うための自分のヘルパー関数も集めていて、モーダルでないEmacsのアプローチでもVimでのテキスト操作の力にかなり匹敵する感じがする。モーダル編集に関するあなたの問題が似ているかどうか、興味あるな。
vscode/cursor用に自分でモーダルモードの拡張を作ったんだけど、VIMのやつが思ったように動かなかったから。その時、KakouneやHelixを調べるべきだと思ったんだ。これらは真のパラダイムの進化を表しているように見えたから。変更する前に何が変わるかを見るのはすごく理にかなってるし、「マルチカーソル優先」アプローチも同様だよね。でも、数週間後には結局、もっとクラシックなVIMっぽく書き直しちゃった。筋肉記憶が抵抗してたのかもしれないけど、よくわからない。一つ覚えてるのは、マルチカーソル+選択のアプローチは、画面上で変更するものが全部見える時にしか本当に役立たないってこと。大きな編集の場合、大半の選択はスクロールウィンドウの外になっちゃって、あまり役に立たないんだ。完全に諦めたわけじゃないけど、AIを使うとキーワードや括弧よりも文章を書くことが増えてきてるから、これが本当に価値があるのかどうかわからないな。
> 画面上で変更するものが全部見える時にしか本当に役立たない それは、他の選択肢に比べてまだプラスだよね?
> 大きな編集の場合、ほとんどの選択肢がスクロールウィンドウの外に出てしまって、あまり役に立たないんだ。だからKiエディタには「Reveal Cursors」っていう機能があって(https://ki-editor.org/docs/normal-mode/space-menu#-cursor-re...)、この問題を解決するために特に作られてるんだ。
> 一つ思い出したのは、マルチカーソル+選択のアプローチは、画面に変更するものがすべて見えている時にしか本当に役立たないってこと。大きな編集の場合、ほとんどの選択がスクロールウィンドウの外になってしまって、あまり役に立たない。Emacsには、カーソルがある行の間の行を一時的に隠すmc-hide-unmatched-linesコマンドがある。これで、画面の高さ分のアイテムまでマルチカーソルが使えるようになる(正規表現を使ってカーソルを配置できるのも助かる)。でも同意するよ、MCはシンプルで局所的な編集に最も役立つね。インタラクティブとバッチ編集モードを切り替える必要がないから、バッチモードの利点も享受できるし。もっと大きいまたは複雑な編集には、バッチモードのツール(「検索と置換」、Emacsの編集可能なoccur-mode、あるいはsedを使うこと)を選ぶ方がいいことが多い。
数日前に再度試してみた。今はHelixでAIをLSPを通してしか使えないってことはわかるけど、外部で変更されたファイルが自動でリフレッシュされないのが本当に厄介。外部のAIと作業するのが難しくて、常に古いファイルを編集してるんじゃないかって心配してるんだ。
ちゃんとした解決策じゃないのはわかってるけど、Helixには `:reload` と `:reload-all` コマンドがあるよ。俺はCtrl-rにreload-allをバインドしてる。
> HelixではLSPを通じてしかAIを使えない 他のエディタはLSPを使わない場合、どうやってこれを実現してるの? Helixは特にLSPを統合メカニズムとして選んでるんだ(TreeSitterと組み合わせて)いろんなプログラミング言語をサポートするために。これは言語に依存しないプロトコルだから、一度実装すれば済むんだよね。AIに依存しないプロトコルやインターフェースって確立されてるの? MCPはここではうまくいかないと思うけど。
時間が経つにつれて、慣れてきて、Claudeのコード変更でファイルが自動的にリロードされないのを楽しめるようになった。
俺もその痛みを感じてたから、ワークフローをlazygitでファイルの変更を監視するように切り替えて、ちょっとした修正をするためにHelixに切り替えた。もう一つ試してみる価値があるのはmux(github.com/coder/mux)かも。これはLLMをいい感じのインターフェースでラップして、LLMによる変更に対して行やブロックコメントを追加できる機能があるんだ。ただ、まだ初期段階でv0.19.0だよ。
Helixを好きになりたかったんだけど、すごくいいソフトウェアだし、すぐに使えるんだよね。Vimの習慣を忘れて、Helixの使い方を学ぶのにエネルギーを注いだんだけど、今はかなり効果的に使えるようになった。でも結局、バインディングがそうなってるのは、ユーザーインターフェースがシンプルだからじゃなくて、実装が簡単だからだって結論に至った。小さな更新にはneovimに戻って、大きなコード編集にはVimモードのzedを使ってる。
Ki Editor[0]は試したことある? あなたが探してる方向にもっと近いみたいだよ。まだ他のエディタほど成熟してないけど、編集モデルはUXの観点から見ると確実に改善されてるよ。[0]: https://ki-editor.org/
Vimとのバインディングの違いが、実際に使うのをやめさせた理由だった。ほんとに好きになりたかったし、背後にあるモチベーションや原則も好きなんだけど、数十年の筋肉記憶を忘れるのは絶対に悪夢だよ。
それにevil-helix[0]っていう、VimバインディングのHelixフォークもあるよ。もしかしたら、これが気に入るかもね :) [0] https://github.com/usagi-flow/evil-helix
簡単なユーザーインターフェースがないってどういうこと?hxでのクイック編集やターミナル作業と、Zedのhxバインディングでの他の作業の組み合わせはすごく良かったよ。
ここ数年のデフォルトエディタ。シンプルさと速さが好きだし、キーボードだけで快適にナビゲートできるのが最高。さらにElixirのLSP統合もいい感じ。
コードを編集するのにエージェントを使ってるんだ。でも、Helixはファイルのライブアップデートをサポートしてない。これが、俺が最初の選択肢にしない理由だよ。
VimはCみたいで、HelixはC++、Ki EditorはRustみたいな感じだね。「C++の中には、もっと小さくてクリーンな言語が出てこようとしている。」HelixはVimからのアイデアを引きずってる。キーbindが一貫してなくて移行できないのが難点だね。アイデアの構成もないし、バッファエディタで次の行に移るのは`k`だけど、ファイルエクスプローラで次の行に移るのは`ctrl+n`ってどういうこと?VimはC、HelixはC++、Ki EditorはRustって感じ。
でも、KiがRustみたいなのはどういうこと?それが重要なのはなぜ?Helixはかなりいいエディタだよ。君が言ってることが本当でもね。
位置定数がキーbindに良いっていう考えに困惑してる。SSHで接続した先のマシンは、俺のキーボードレイアウトや関連する位置概念の入力を使ってるかどうかをどうやって知るの?(今はこの考えがまた出てきてるのが不思議だと思ってる。)
> バッファエディタでは `k` で次の行に移動できるけど、ファイルエクスプローラーでは `ctrl+n` しないといけないの?Helixは使ったことないけど、これってvimにもあるよね。ただ、オートコンプリートの関係で、その文脈では `k` を押すと `k` が入力される。納得できるよね?Helixのファイルエクスプローラーで `k` を押すのも似たような使い方かも、検索とか?
え、Helixにファイルエクスプローラーができたの?それがないせいで、もっと使うのをためらってたんだよね。
それは怒りを引き起こすか、何かだね。HelixはC++じゃないし、絶対にそうなることはないよ。VimはC、NeovimはC++だね。
Helixはもう数年、俺のメインエディタだよ。Sublime TextからVS Code、Neovimを経て、最終的にHelixに落ち着いた。これでたくさんのコードを出荷してきたし、設定も50行以下だよ。Vimの便利なキーbindをいくつか追加してるけど、特にキーbindに慣れるのは難しくなかったし、`hx`がないシステムで作業する時もVimとHelixを行き来するのはあまり問題じゃなかった。興味がある人はここを見てみてね: https://github.com/seg6/dotfiles/blob/1281626127dfbf584c2939...
Helixは本当にいいエディタだよ。ターミナル環境で使う時はこれが定番。十分に複雑な操作をする時は、「選択-アクション」("motion-action")の方が「アクション-モーション」より直感的だと思う。Vimでも、ビジュアルモードを使いたいことが多いしね。これに関しての主な制限は、Vimに比べてクイックで頻繁な編集にはちょっと遅いかもってことかな。