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

Helixエディタの使い方

概要

Helixエディタをリモート開発で快適に使うための設定例と工夫を紹介。 tmux連携やキーバインドのカスタマイズでNeovimからの移行をスムーズに。 ファイル管理・Git操作・ステータスライン改善など実用的なTipsを解説。 Helixの設定例や便利なオプションも網羅。 他ユーザーの知見共有や質問も歓迎。

Helixとtmuxによる快適なリモート開発環境

  • Helix はプラグイン依存が少なく、 サプライチェーン攻撃 リスクを軽減できるエディタ

  • Neovim から移行する際、設定の発見が難しいため、実例を共有

  • tmux をターミナルマルチプレクサとして利用

    • ファイルマネージャやGit TUIがHelix単体では弱い
    • yazilazygit をtmuxのポップアップで起動し、操作性を補強
  • tmuxのカスタムキーバインド例

    • prefix-y: yaziファイルマネージャ起動
    • prefix-g: lazygit起動
    • prefix-e: Helixでtmux出力履歴を開く
  • tmuxのデフォルトプリフィックスはCtrl+bだが、Ctrl+\に変更

    • 長い出力のコピペや履歴検索が効率化
    • yazi/lazygitはHelixの上に重ねて起動

HelixのVimライクなキーバインドカスタマイズ

  • Helix独自のキーバインドに慣れてきたが、一部はVim風に移植
    • 行頭/行末移動、行全体選択、行末まで削除(Dモーション)など
  • 選択モードの動作がVimと異なるため、Vim風に調整
    • 1行上/下移動で行全体選択
  • ESCキーで複数カーソルをリセット(デフォルトはカンマ)
  • 行末までの削除もVim同様に簡単に

ステータスラインの情報強化

  • デフォルトのステータスラインは情報が不足
  • 現在の gitブランチ などを表示するようカスタマイズ
  • ステータスラインの左右に表示する情報を細かく設定

便利なカスタムキーバインド集

  • ファイルのリロード、ソフトラップ切替、Git操作などを一発で実行
  • 主なカスタムバインド例
    • space-e-w: バッファを保存
    • space-e-c: バッファを閉じる
    • space-e-x: 他のバッファを全て閉じる
    • space-e-l: inlayヒント表示切替
    • +f: ファイル整形
    • +w: 空白文字表示
    • space-f-r: 全ファイルリロード(自動リロード未対応のため必須)
    • space-f-x: Gitの変更を元に戻す
    • space-f-w: 現在行のGit blame表示
    • space-f-d: Git diff表示

Helixの主な設定例とオプション

  • 6ヶ月利用で便利なオプションを発見
  • 新機能はデフォルト無効が多いので要確認
  • 主な設定例
    • line-number = "relative": 相対行番号表示
    • mouse = true: マウス操作有効化
    • rulers = [120]: 120桁目に縦線ガイド
    • completion-replace = true: 補完時に単語全体を置換
    • color-modes = true: モード表示を色付きに
    • rainbow-brackets = true: 括弧に色付け
    • auto-save.focus-lost = true: フォーカスロスト時自動保存
    • auto-save.after-delay.enable = true: 一定時間後自動保存
    • editor.indent-guides.render = true: インデントガイド表示
  • 各オプションの効果や用途を簡潔に解説

LSP(Language Server Protocol)設定の工夫

  • 各言語で harper-ls を追加し、コメント内の文法エラーも検出

他ユーザーへの呼びかけ

  • HelixユーザーのさらなるTipsや工夫の共有を歓迎
  • 質問はフッター記載のメールアドレスでも受付

Hackerたちの意見

最近、エディタの設定を再構築するためのちょっとしたサイドクエストをやってるんだ。20年Emacsユーザーで、15年Vimユーザー(Emacsと並行して使ってるから、どっちが好きか決められないんだよね)。目標は、Pythonを主に使ったエンタープライズ向けソフトウェア作業のために、どれだけ早く日常的に使える完全なセットアップを整えられるかってこと。再構築の目的は、サードパーティの拡張機能にどれだけ依存せずに、必要な機能(または生産性を不合理に高める機能)を持てるかを見ることなんだ。今のところ、私のNeovimの設定は最高だと思うけど、思ったよりプラグインが多くなっちゃった。Emacsの再構築はまだ始めたばかりだけど、最近のEmacs(30以上)には、サードパーティのプラグインへの依存を劇的に減らす改善がたくさんあって、すごく興味深い。Eglotは、長年lsp-modeを使ってた私にとって素晴らしい存在だよ。補完プレビュー機能はcorfuの代わりにはならないけど、かなり良いし、これからもっと良くなると思う。今のところ、Emacsでの必須プラグインリストはこんな感じ: - Magit - Expreg(teeesitter expand region) - Multiple cursors - dape(Eglotと連携したデバッグ) たぶんConsultとorderlessも追加すると思う。あれは検索/ナビゲーションのスーパーパワーだからね。

それにしても、nvimのプラグインを維持するのは結構大変だね!先週、4つのプラグインでnvimを再構築したばかりなんだ(mini.nvimは1つとしてカウント)。プラグインをたくさん積み重ねると、nvimの安定性と信頼性がイライラするレベルまで落ちる気がする。Emacsなら2つのプラグインだけで済むっていうのが羨ましいな。たぶん、もっと安定して動くんだろうね。

新しいnvimは、必要なプラグインを少しずつ減らしてきてるよ。今は組み込みのプラグインマネージャー、diffビューワー、lspもあるし。

これはディスじゃないけど、数ヶ月使った後でも、Pycharm + IdeaVIMの初期設定と同じくらい良いと思う?もちろん、自分の設定を作る理由は他にもあるけど、「IDEは目的を達成するための手段」として見ると、Neovimの迷宮に入るのはちょっと時間の無駄な気がする。

Emacsを10年以上使ってる人の話にすごく興味があるんだけど、HelixやVimと比べてどうなんだろう?ゼロからHelixやVimを使い始めた人のレポートはいいって聞くけど、長く使わないとEmacsの素晴らしさは本当に理解できないと思うんだよね。でも最近はVimっぽいキーやモードが他のエディタにすごくうまく統合されてるから(例えばVSCodeにはいいEmacsモードがないし)、もうVimの勝ちってことを受け入れなきゃいけない時期かも。何度か試してみたけど、指が覚えるまで我慢できなかったし、エディタを叩き続ける理由が見つからなかった。だから、実際にハードコアなEmacsユーザーの切り替えについてのレポートがすごく気になる。

Expreg(teeesitter expand region)はcombobulateを思い出させる(試したことはないけど、かっこいいと思う)けど、もっと軽くて限られた感じがする。

ところで、Claude CodeのEmacs設定の上手さはすごいよね。実際、elispを書くのも得意だし。自分もlsp-modeからeglotに切り替えたけど、こっちの方がいい。壊れにくいし。

helixを使ってる人でTUIが欲しいなら、なんでこれをneovimより選ぶの? helixのデフォルトは好きだけど、時々変えたくなる。helixを使ってフルIDE体験がしたいなら、ZedやVSC/JetBrains IDEを使えばいいんじゃない?そういえば、fleetはどうなってるのかな。シンプルなものが必要な時はnvimに戻るし、機能が足りない時はWebStormを立ち上げることもあるよ(同僚が何かをナビゲートしたい時とか)。

その2つ目のポイントについてだけど、ターミナルを絶対に閉じたくない人がいるのは明らかだね。私もその一人かもしれない。:-D

個人的には、500行以上の設定を維持するのは好きじゃないな。プラグインもたくさんあるし、ゼロからneovimを設定するのはかなり面倒だよ。lazyvimみたいなものを使うと、50個のプラグインがセットアップされて、各gitリポジトリから最新のコミットを取ってくるだけで更新される。誰かがその50個のプラグインのうちの1つに悪意のあるものをデプロイするのは時間の問題だと思う。JetBrainsのIDEの言語サポートは素晴らしいけど、リモート開発にはあまり向いてない経験がある。複雑なリファクタリングをするために時々開くけど、Goland、RustRover、PyCharmを同時に開くのは本当に嫌だ。仕事で複数の言語を使ったモノレポがあるからね。

ここ数年、neovim、helix、emacs、nanoを日常的に使おうと頑張ってきた私としては、helixの初期設定が他のどれよりも圧倒的に良い体験だと思う。デフォルトがすごく良く選ばれてるし、コンテキストヘルプやヒントも、あまり使わないコマンドを使ったり思い出したりするのに役立つ。個人的には、helixのコマンドの順序がvimよりもずっと理解しやすいと感じた。私にとっては、現代のneovim/spacemacs体験の巨大なプラグイン/設定の壁が本当に嫌なんだ。拡張性や、プラグインがhelixではできないことを可能にしてくれるのは感謝してるけど(例えば、emacsはどんなlisp言語のIDEとしても機能するし、helixではreplを立ち上げられない)。でも、その問題はアプリケーション自体を学ぶ必要があるだけじゃなくて、たくさんのプラグインを学ばなきゃいけなくなることなんだ。みんなそれぞれ好みの組み合わせがあるから、プラグインでカバーされていることを調べると、しばしば互換性のない複数の回答に行き着くことになる。自分で設定をゼロから作ろうとすると(私もemacsでやったけど)、他の人のおすすめを信じることになるし、プラグインについて学ぶのに多くの時間を費やさなきゃいけなくなる。その時間は、自分がやりたいことに使えない時間なんだ。helixは新しいから、古い決定の遺産を背負ってないのが利点だね。その結果、helixは「現代」の期待に合った決定やデフォルトを作れる。完璧ではないけど、TUIに新しい人にとっては、現代的な便利さを持ったものを求めている時に、エディタの設定に数週間もかけたくないなら、始めるにはいい場所だと思う。

helixの素晴らしいデフォルトが本当に気に入ってる。20年間neovimを使ってきたけど、今でもすごく好きだよ。でも、いくつかのプラグインが壊れた後、helixを試してみたくなった。helixにはプラグインシステムがないのが残念だけど、私にとっては、ほぼ完璧な機能を持っていて、非常に反応が良いんだ。それに、マルチカーソルみたいな機能にも感謝するようになった。これまで試したことがなかったからね。いくつかのnvimのアウトオブボックスソリューションを試したけど、どれも気に入らなかった。zedも調べたけど、使う理由があまり見当たらない。試してみるべきかな。

SSHで低消費電力デバイスでたくさん作業してるんだ。Helixはほぼ瞬時に立ち上がるし、同じ機能を持つneovim(プラグイン経由)は起動にかなり時間がかかるし、メンテナンスコストも高い(設定やプラグインの更新)。バグ修正を手伝えるくらいのRustは知ってるけど、C系の言語は全然知らないんだ。だから、自分が知ってる言語で書かれたオープンソースプロジェクトを使うのが好きなんだ。追記:参考までに、私は12年くらいn/vimを使ってから、ここ数年Helixに切り替えた趣味のプログラマーだよ。nvimの挙動でまだちょっと恋しい部分もあるけど、Helixの瞬時に立ち上がるのと、nvimを同じレベルに設定した場合の1〜2秒の差は、全然価値があると思ってる。

エディタの選択って、あんまり理論的じゃない気がする。結局、何が心地よいか、新しいか、ワクワクするか、そういう感じで決まることが多いんじゃないかな。

シンプルな設定と選択優先の編集モデルが好きなんだ(これについてのベストな説明はここにあるよ: https://kakoune.org/why-kakoune/why-kakoune.html)。Helixに慣れるのが大変だった他のVimユーザーと話してみて、最初から結構Helixっぽい使い方をしてたのかも — まず選択するって感じで。ターゲットのテキストが視覚化されないvimの動きには全然慣れなかったな。

Hxはバッテリー内蔵だね。Nvimは自信が持てないプラグインをたくさんインストールしないといけないし、説明には絵文字が多いし、誰が何をメンテしてるのか全然わからない。危険な要素が多すぎるよ。

  1. hxは起動が速くて、使うのも速いし、見た目もいい。 2. デフォルトが結構良くて、ちょっとしたカスタマイズを加えたけど、hxをカスタマイズするのは私のライフスタイルじゃない。Emacsやneovimは、無限の改善ループにハマってたから…。 3. TUIはリモートサーバーでうまく動くし、Mac、Linux、サーバーで同じ設定ができるのはいいね。他のエディタもそうだけど、hxもそう。 4. 必要なlspは全部揃ってる。言語の設定を整えるのがちょっと面倒だったけど、他のエディタでも設定を整えるのはちょっと手間だったな。

EmacsからVS Code、そしてHelixに移行したんだけど、今のところすごく楽しんでるよ。設定をあまりいじらず、既存のキーバインディングを覚えようとしてる(効果的に使うためには最小限の設定で済ませたいから)。一つ苦労してるのは、Helixができることを全部覚えるのが大変なこと。デスクトップマットを作って、思い出す手助けにしてるよ(さっき完成したばかりだから、印刷版が届いたらどれくらい役立つか見てみる)。[0] https://git.sr.ht/~netshade/helix-deskmat

どのくらいの期間Emacsを使ってたの?

ここ10年くらいEmacsを使ってる(その前はSublime Text)。たまにVimも使って、ちょっとしたファイル編集やリモートサーバーでの作業に使うけど、その目的には問題ないと思ってる。でも、Vimを専用で使う必要は感じなかった。今はEmacsにかなり慣れて、自分に合ったモジュールや関数を丁寧に書いて設定してる。先月Helixを試してみたら、始めるのがすごく簡単だってすぐに感じた。まだ自然には使えないけど、基本的なことにはすぐに慣れたよ:コードの移動、検索、コピー&ペースト、バッファやウィンドウの切り替え。Helixの歴史は全然知らないけど、すごくよくデザインされたソフトウェアだと思う。グローバル検索が特に良いし、lspの統合もちゃんと機能するし、すごく速い。ソフトウェアが理にかなった、一貫性のある、実際に役立つデフォルトを持ってると、すごく快適に感じるよ。これからも使い続けて、この編集スタイルにもっと慣れていくつもり。Emacsはデフォルトとして残すけど、Helixは速いから、時間が経つにつれてコード編集のメインになるかもしれない。

この調子なら、Vimを使った方が良くない?設定の半分はHelixの中にVimを再現することだし。しかもHelixには依存関係がたくさんある(neovimのように見えないだけ)。自分のVimの設定の方がHelixよりもサプライチェーン的に安全だと思う。今のVim8の設定はすごくシンプルで、8年以上も良い感じで使えてる。今はLTSディストリビューションにあるからVim8を使ってる。自動で読み込まれるプラグインは一つだけ(vim-tmux-navigatorでVimのスプリットとtmuxのスプリットを簡単に移動できる、パッシブなプラグイン)。そのプラグインのコードは確認済みで、更新はしてない。オプショナルなプラグインは二つだけ使ってる(:packadd!でVimのビルトインパッケージマネージャーを使って有効化できる)。ale(lsp、診断、保存時の自動フォーマット)とvim-fugitive(Vim内でのGitワークフロー)を使ってる。なんでaleを使うかって?Vim8で動くし、nodejsやpythonみたいな他の依存関係がいらないから。コードも確認済みで、満足してる。インストールして使って、理由がない限り更新しない方がいい。vim-fugitiveは?生産性を上げるため。インストールしたら忘れちゃっても大丈夫。Tim Popeは最高だよ。自動でプラグインを読み込まない理由はいくつかあるけど、ほとんどの場合Vimを使うのはサクッと編集する時だから、重いツール(Git統合やLSPなど)は必要ないんだ。長期的なプロジェクトに取り組んでる時はGitとLSPを有効にするけど、必要ない限り自動でコードを実行する必要はないよね。

Helixの編集モデルはいいよね。

Helixのサプライチェーン攻撃のリスクは、nvimとn個の拡張機能に比べると、ほとんどゼロに近いよ。1つのベンダーとやり取りするだけだからね。Helixはリリースプロセスが遅くて慎重だから、サプライチェーンの脆弱性が出る可能性はあるけど、今のプロセスはそれをうまく緩和してるみたい。

「今はLTSディストリビューションにあるvim8を使ってる。最近のNeovimが大好きになって、Pythonエコシステムで作業する人たちのために、この問題を解決するためのシンプルなPythonパッケージを作ったんだ。uvpipxみたいなツールを使ってる人には特に便利だと思う。Neovim 0.11.4(そのパッケージを作った時点での最新バージョン)をuv tool install binwheels-neovimpipx install binwheels-neovimでインストールすれば、Windows、macOS、LinuxでモダンなNeovimをすぐに使えるよ。このパッケージは公式のNeovimリリースをラップしてて、uvやpipxを使って、あなたのOSとアーキテクチャに合ったバイナリを選ぶんだ。ただ、Linuxだけは、公式のNeovimリリースがコンパイルされているGLIBCよりも古いサポートが必要だったから、manylinuxコンテナでソースからバイナリをビルドしてる。古いLinuxシステムで作業することが多いから、公式リリースがそれをサポートしてないのはちょっと疲れたよ。」

いいね!:reset-diff-changeのこと知らなかった。今までgit checkout -pを使ってたけど、Helixの中でやる方がずっと便利だね。

初めてHelixをチェックしてるんだけど、二つの大きな欠点が思い浮かぶ。- モーダル編集がメインのポイントなら、Vimはどこでも筋肉記憶を使えるから、Vimモードはかなり一般的だよね(Vimiumみたいな拡張もあるし、SSHで接続するどのマシンにもほぼ確実にVimがあるし)。- Helixはシンプルさにこだわってるみたいだけど(ターミナル統合なし)、プラグインでの拡張性があまりない(LSPから来ない限りリントもない)?それだと限られた組み合わせになって、エディタの外で全ての設定を構築しなきゃいけない(tmuxとか)。このプロジェクトを貶めるつもりはないけど、これらの欠点を補う大きな利点は何なのか気になってる。

「- モーダル編集が主なポイントなら、vimはどこでも筋肉記憶を使えるから、vimモードはかなり一般的だよね(vimiumみたいな拡張もあるし、SSHで接続する機械にはほぼ確実にvimが入ってる)。基本的なvim体験を直接使いたい開発者はあまりいないと思う(プラグインや設定なしで)。似たようなキーバインドがあっても、ほとんどの開発者はエディタを切り替えたくないはず。むしろ、個別のセットアップと機能を持ったエディタを使いたいと思ってる。例外は、実際に多くの機械をSSHで接続して、必要に迫られて生のエディタ体験を求めている少数の開発者だけど、その場合はnanoやvim、vi、emacs、edなどを使い続けることができる。 > - Helixはシンプルさにこだわってるみたいだけど(ターミナル統合なし)、プラグインでの拡張性はあまりないみたいだね(LSPからのリンティングがないと?)。それだと限られた組み合わせになって、エディタの外で全体のセットアップを構築しなきゃいけない(tmuxとか)。Helixは本来、エディタの中に全体のセットアップを構築することを意図して作られたけど、コミュニティが求めていたものではなかったみたい。それで、Helixはプラグインシステムを追加する方向に移行して、コミュニティがオールインワンエディタにできるようにしてる。プラグインシステムはまだメインリリースには有効になってないけど、しばらく前から独自のブランチで開発されていて、すでにいくつかのプラグインが作られて、開発者たちが使ってるよ。全体的に見て、リリースを保留してプラグインシステムの形をできるだけ良くするのは正しい判断だと思う。もしリリースしてから変更が必要になったら、その前にリリースされたプラグインに悪影響を与えちゃうからね。 --- 一番の利点は、viに組み込まれていて、vimやneovimに引き継がれているひどいUXの決定を修正することだね。それは、変更をコミットする前に自分の変更を確認しにくくして、意図しない副作用が起こりやすくする操作の順序のこと。

「最近、サプライチェーン攻撃が増えてるけど、VimやNeovimに使えるようにするために何十個もプラグインをインストールするのはちょっと嫌だな。」これがまさに私の懸念なんだよね。

これまではHelixの大きなセールスポイントだったけど、NeovimがLSPやtreesitterのサポートを追加してからは、もう何年も前の話だよね。今のNeovimは、標準でかなり使えるからね。

Neovimでのサプライチェーン攻撃についてはあまり考えたことなかったけど、15個くらいプラグインを使ってるから、ちょっと心配だね。著者が攻撃面を減らすために別のものに切り替えた理由がわかるよ。

すごく広範なNeovimのセットアップを持ってて、Helixを試すのに躊躇してたけど、今朝インストールしてみたら、これが標準で提供されるエディタだなんて本当に驚いた!うわー!信じられない。めちゃくちゃ速くてスムーズで、何日もかけてluaやtelescopeプラグインで設定したすべての設定が入ってる。Helixの開発者たちは、まるで私の設定ファイルを見たかのように、ハッカーが必要とするものを知ってるんだね :D