目次
背景
こんにちは。 かりんとうマニア(@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の方が心地良かったみたいです。
しばらくしてバージョンが上がったらまた挑戦したいです。
それじゃ今日はこの辺で。
関連記事
こちらの記事もおすすめです。
【PR】おすすめ技術本
ゴリラさんのVim本です。
Vim使いなら要チェックですね。