Helixでモーダルエディタに触れてみる


Vim、効率いいんだろうなぁ...と思いつつも、ハードル高いんですよね...
私はとりあえずその辺にあってよさそうだったゴリラと学ぶVim講座を読んでみたのですが、一話の時点で難しくて挫折してしまいました(今思えばチートシート系のやつのが自分には合ってたのかもしれません、「試す」というつもりの人間にバリバリヘルプや紹介読むほどのアレは期待できないので、「気になったやつから使ってみる」という感じで)
VSCodeなんかもあるご時世、時間をかけて慣れていく必要がある、ちょっと試してみて自分好みに近づけようとするのにも独自の設定ファイルをいじってみる必要があるってのは「一生Vimでやってくぞ!」とまでは言わなくとも、多少は捨てる知識になっても構わないという程度にはやる気がないとつらそうな印象があります(合わなかったときがつらそう)
あと「たかがテキストエディタ」なんて思ってると喰われる(確信)
なので、「いったん初心者でもいけそうなやつに触れてみてVimライクなエディタを体感してみよう」ということです

Helixのいい点

箱出しでいろいろなものが使える点です
その点から、とりわけ私のような「Vimっぽいやつを試してみたいです」って層にいいんじゃないかなーと思います(逆に言うとバリバリVimやNeovim使ってるつよつよな人からしたらあまり魅力に感じづらいだろうと思います)
LSPもそのままの状態で使えるらしいですし(私はまだ試せてないですが...)、デフォルトでシンタックスハイライトもついててテーマもプリセットのものがあるのでconfig.tomlをいじるだけで使えます(:themeでの試用も可)

設定言語はtomlでプラグインシステムとかは(少なくとも今のところは)ない[1]ですが、まずはモーダルエディタに慣れておきたい初心者としては逆に気を取られなくていいです。tomlわかりやすいですし。(ガンガンプラグイン使って開発効率高めていきたい、って人が居座るには向いてなさそうではありますね。)
ちなみにシンタックスハイライトはTree-sitterらしいです。Neovimインスパイアなのもあるかもしれませんが、今時のエディタなら定石なのかな

あと、初心者へのやさしさも割と重視してそうです
具体的にいうと、コマンドモードでは自動的に補完候補が表示されますし、コマンドとして有効な状態になるとそのコマンドの解説が出てきてくれます。他のモード切替キーを押したときにも候補一覧と軽い解説が出ます。ありがたいです[2]
(軽く調べてみたところ、こういった機能なんかはKakouneを踏襲していそうな感じですね)

動作時の例、画面下側にヒントが見える
なんでもできるVimなのでVimでも多分こういうことはできそうではありますが、箱出しの状態でこうというのが嬉しいです
キーマップもKakouneを踏襲した分かりやすさに重点を置いた形 + 意図的にエイリアスとかの数が絞られてるっぽいのでわかりやすいです(恐らくはこいつらが軸になるんだろうな、となり混乱が減ります。概観がつかめるのはかなり大きいです)

所感としては「複雑なことはできないけどモーダルエディタに慣れるにはよさそう」です
私は将来的にはVimを見据えつつも、とりあえずモーダルエディタを触ってみようということで使ってみていました
あとわりとVimとバインド違うとこあったりするみたいなので注意

モーダルエディタに慣れてみる

大まかな私の慣れ方の記憶です
ちなみになんですが、vimtutor?というvimを使い始めるのにいい感じのチュートリアルがあるらしいのですが、似たようなのがhx --tutorまたは:tutorから起動できます。英語ですが

hjklで移動することを覚えます

まずはここから。何気にハードル高い
他の移動方法に慣れているかもしれませんが、英語みたいなもんだと思って頑張って覚えましょう(というと大げさかもしれませんが、比較的色んなところで使えます)
英語と比べてしまえばちょろいもんです(英語ムズイ)

iで挿入モードに入ることとCtrl-[を覚えます

Ctrl-[の動きを体に覚えさせます
重要ですね
個人的にiで現在のカーソル位置からどちらの方向に挿入されるかを覚えるのに少し戸惑ったのですが、こないだのリリースで追加されたらしき機能[3]を使ったこのような記述をconfig.tomlにするとわかりやすくなります

[editor.cursor-sape]
insert = "bar"

:q:q!(終了方法)を学びます

重要ですね

dで削除することを覚えます。ついでにwb, e, xなんかで移動したり選択したりすることも覚えます

Vimだと一文字削除はxだったとか聞いた気がしますが、わかりやすさのためかHelixだとdに統一されています
Helixだとxは行選択です
先選択後操作的な感じで統一されてるっぽいので、xdで行削除、wdで単語削除になります。この辺の削除回りはVimとかなり挙動が違うっぽいです
あと、dで削除したやつはレジスタ?ヤンク?とやらに登録されるっぽいのでp(paste)から貼り付けできます(初心者のころは意外と直感的に把握しづらい)

:w:wqなどの保存方法を学びます

ついでに:bc(:buffer-close)や:n:new, 新しいスクラッチバッファを作成)なんかも覚えます
バッファ間はgn及びgpといったGotoなやつらで行き来したりします

このへんでoやyank/paste(put)、アンドゥ/リドゥなんかを覚えます

アンドゥ/リドゥはu/Uです[4]
あと、Space-]で挿入モードに入らずに後ろに空行を追加できます

Gotoなやつ(gg, geとか)を覚えます

ggが最初に移動、geが最終行に移動、g.が最終編集位置に移動です(vimだと確かgeGになる)
あとはリファレンス見てください、gキー押したときにも右下に出ます(投げやり)

Vimっぽい便利系なやつを順次覚えます

>(インデント)、<(逆インデント)、Ctrl-c(行ごとコメントアウト)、Ctrl-a(数をインクリメント)、Ctrl-x(数をデクリメント)ms{car}(選択範囲に囲い文字を追加)など
.は挿入モード時に入力した内容ぐらいしか記憶してくれないっぽいです(cで挿入モードに入ったかどうかとかは記憶してくれるっぽい。よくわからん)
~(大文字小文字切り替え)、`(小文字化)、Alt-` (大文字化)とかも使えそう
Cでマルチカーソルが使えます、,で解除
先に挙げたms{char}もそうだけど、m系のやつも覚えとくと便利そう(こうしてmarkdown書くときとかにも使える)
ちなみに、m系のやつを使ったりする際にはwよりもeを使うと便利な場面が多い気がするので覚えておくといいかもしれまんせん

使ってみてどうだったか

三月の初め頃からちょくちょく試しに使っていました。計一か月使っていたことになります。わりといいんじゃないか?ってなっています
まず、oで後ろに行追加して挿入モードにするやつが普通に便利です。xdとタイプするだけで手軽に行削除できるのもいい感じです(Vimだとddらしいですがこちらも手軽そうでいいですね)
:wで手軽に保存できるのもいいですよね、かなりまめに保存するようになりました。手癖です。というか、全体的にCtrlキーとかAltキーとか押す手間が省けるのがめちゃくちゃいいです
Ctrl-[やそこからの:wなんて慣れてしまえば一瞬ですが、私はCtrlとかShiftとかAltとかスペースとかを押すのに左手しか使わないゲーマーモドキな人間[5]なので特に顕著でした(Ctrl-sですらきついしCtrl-Shift-eとか言われたら死んでた)
こんなわりと適当な使い方でもなかなかに効率が上がったように思うので、やっぱモーダルエディタが最強なのかもしれません

今後についてですが、以前はちんぷんかんぷんだったゴリVim講座に出てくるような概念なんかもある程度は理解できるようになったので、やはりVimへの移行に挑戦してみたいかなぁという感じです
以前はカラースキームを入れることすら面倒がり、恐怖でしかなかったvimrcも「vimrcを改善すれば作業効率も上がりそうかも」という感覚がモーダルエディタを体験してみて比較的強まったので、これなんかを見たり検索しながらちょこちょこ勉強しようかなぁとか思っています。プログラミングの勉強のほうが先かとも思いますが...(ツールばかりいじっていてろくにプログラムが書けない)

脚注
  1. 将来的にwasmによるプラグインの構想はあるらしいですが、まぁ近いうちには難しそうです。現在でもキーリマップやカラーテーマ作成程度ならtomlからできますが、それ以上は先の話になりそうですね。ちなみにインスパイア元の一つであるKakouneにはプラグインシステムがあるようですが、あちらはWindows非対応のようです ↩︎

  2. 初心者はわからなくなる度ヘルプ引いてたら日が暮れるので、自分でメモする必要もないのはありがたいのです。 ↩︎

  3. それまではドキュメントにはあったものの自分でビルドしないと使えないようでした。ちなみにですが、こないだのリリースぐらいからなんでか知りませんがスターが爆伸びしているようです。私的にもMarkdownやMakefile(自分はjustを入れてます、ろくに使いこなせてませんが...)に色がついてうれしいです ↩︎

  4. VimはリドゥがCtrl-rらしいですが、これに関してはUでリドゥするほうが好みです。VimだとUが何に割り当てられてるか知りませんが... ↩︎

  5. 一応書いておくと、PCゲーは左手wasdで移動して右手マウスで視点移動することが多く、それの真似っこをしていたからです。ゲームは下手です(PC入手してからはあまりゲームしてないので) ↩︎