Rust製のエディタHelixを使い始めてNeoVimに戻ってきた話

目次

  1. 背景
  2. Helixのいいところ
    1. ミニマリズムである
      1. Git
      2. ファジーサーチ
      3. LSP
      4. TreesSitter
      5. DAP
    2. ショートカットも必要最低限で覚えやすい
    3. セレクトモードの思想が素敵
    4. ショートカットのガイドを出してくれる
  3. Helixをやめようと思った理由
    1. ファイラーがない
    2. ターミナルもない
    3. スクリプトをサポートしていない
    4. 細かいけど気になったこと
  4. まとめ
  5. 関連記事
  6. 【PR】おすすめ技術本

背景

こんにちは。 かりんとうマニア(@karintozuki)です。
Rust製のHelixというテキストエディタをご存知ですか?

NeoVimがモダンVimとされているのに対して、Helixはさらに新しいポストモダンを自称しています。
今回は僕が2週間弱使ってみて、私がHelixについて良いなと思ったところ、そしてNeoVimに戻ろうと思った理由について書いていきます。

(2024/03/15追記) 結局なんだかんだで、またHelix使い始めてます。Helix最高〜〜〜!

Helixのいいところ

Helixはその思想がいいなと思いました。詳しく書いていきます。

ミニマリズムである

Helixはあろうことかプラグインをサポートしていません。
一応、プラグインをそのうち対応するとのことですが、現バージョンでは一切サポートしていません。
それでも大丈夫な理由は、最初からエディタに必要な機能を搭載しているからです。

Git

Gitをサポートしています。変更があった行を表示してくれたり、hunkに移動することがデフォルトで可能です。

ファジーサーチ

Helixはファジーサーチはかなり強力で、ファイルはもちろんGitに登録されたファイル、バッファ内検索、またはショートカットやコマンドまでファジーサーチできます。コマンドのファジーサーチはVimにも欲しい。。。

LSP

LSPの導入もすごく簡単で、設定ファイルにLSPを使いたい言語を足すだけでLSPが使えます。プラグインのインストールなどが不要なので簡単です。

TreesSitter

デフォルトでTreeSitterをサポートしているので、その言語の構造を理解したテキスト編集が可能です。そのため、引数や関数内を選択、またコメントを選択などオブジェクト操作が高性能です。

DAP

これは使ってないのでコメントできませんが現時点でのDAP対応はベータ版だそうですデフォルトでデバッグできるのはいいですね。

ショートカットも必要最低限で覚えやすい

自分でプラグインを入れないのでショートカットの衝突とかを考えないでよかったと思います。Vimに似たキーバインドなのですが、割とそれを一新しようという気概を感じました。

検索とクリップボード周りはspace+<key>、ファイル内移動はg<key>、前後の移動は[とか]から始まる、など体系的なコマンドになっています。

セレクトモードの思想が素敵

Helixはノーマルモードとセレクトモードの境界がVimよりも曖昧な印象を受けました。

例えばwを押すとカーソルが動くだけでなく自動で単語を選択してくれます。ここにx(削除)やc(削除してインサートモードに変更)などコマンドを繋げられるのが便利でした。
以下の画像のようにカーソルがjの位置にあるとき、wキーを押すと、jから移動地点(=の手前)までが勝手に選択されます。

また、マルチカーソルに対応しています。そしてTreeSitterも対応していることから変数の上にカーソルを置いてspace + hとすると変数が使われている箇所全てが選択されるので、そこから普通に書き換えることができます。画像はカーソルがrow変数にあるときにspace+hを実行した様子です。

ショートカットのガイドを出してくれる

例えばスペースキーを押すとそれに続くコマンドを画面に表示してくれます。これは普通に便利です。Vimにも欲しいですね。
画像はスペースキーを押した後に続きのコマンドを表示してくれている様子です。

Helixをやめようと思った理由

ここからは私がNeoVimに戻ることになった理由を紹介します。プラグインに対応していない、という特徴が悪く働いてしまったな、と思います。

ファイラーがない

VimでいうところのNerdTreeのようにプロジェクトをツリー状で見られるようものがないです。
割と皆はファジーサーチがあればいけるという雰囲気でした。
GitHubにissueはあるのですが、公式でサポートする予定はなくプラグインとして実装したいようです。なのでプラグインが実装できるまでお預けでしょうか。

ターミナルもない

Vimは:terminalコマンドで内蔵のターミナルが開けますが、Helixはそれがありませんし、サポートする予定もないようです。
tmuxとかzellijといったツールで対応するのが普通みたいです。

ちなみに、このために導入したzellijの使用感が私は気に入ったので、NeoVimに戻った今も内蔵のターミナルではなくzellijで新しいPaneとしてターミナルを開くようにしました。

スクリプトをサポートしていない

Vim ScriptやLuaのようにサクッと回せるスクリプト言語はありません。

私はPHPのDocker内で開発することが多いので、簡単なコマンドをDockerコンテナ内で実行したいことがあります。こういったタスクをNeoVimだとLuaでサクッとかけて、結構便利なのですが、そういったことはHelixではできません。
shell scriptもしくはPython、Goなど好きな言語で実装してね、ということだと思います。実際、Linuxコマンドとの併用は推奨されているようで:pipなど、バッファと標準入出力を繋げるコマンドが重視されています。

細かいけど気になったこと

自分はPythonのLSPの関数に抽出みたいなコードアクションが全然動きませんでした。ちょっと調べても直す方法が出てこなかったので、このレベルの細かいバグをこれからたくさん踏むのかな、という気持ちでNeoVimに帰りたくなってしまいました。もちろんエンジニアとしてコントリビュートできたらいいのですが、、、
(2024/03/15追記:これはHelix再起動したら動くようになってました笑)

バグじゃないですが、エディタ全体でインデントの設定(タブやスペース)ができません。言語ごとの設定はできるのですが、すべての言語のデフォルトみたいなのができませんでした。

まとめ

結局新しいエディタなので不具合も色々あるといった感じでした。
私にとってはもっと枯れたNeoVimの方が心地良かったみたいです。
しばらくしてバージョンが上がったらまた挑戦したいです。

それじゃ今日はこの辺で。

関連記事

こちらの記事もおすすめです。

NeoVimをアプリとしてFinderから開く

【PR】おすすめ技術本

ゴリラさんのVim本です。
Vim使いなら要チェックですね。