Vimをやめた理由 #UEC25 アドベントカレンダー
はじめに
この記事はUEC25アドベントカレンダー(その1)の14日目の記事です.
企画してくれた柴さんありがとう.
昨日の記事は電2さんのvimgolfでしたね.(まだ出ていないようです...)ということで私がなぜvimをやめるに至ったか,また代替として何を使っているのかを皆さんにこの記事を通して紹介させてください.イデオロギーの対立を生むかもしれない内容なので事前に言っておきますが,私はvim含む,emacs以外の全てのエディタを愛しています.
導入した理由
筆者はターミナルに住んでいるためしばらくNeovimを愛用していました.しかし,Neovimは魔境でした.一向に覚えられぬコマンド,肥大化する設定ファイル,プラグインのバージョン管理,衝突するプラグインのキーバインド......あれは到底私のような凡才に使いこなせるような代物ではありませんでした.どうしたものかと頭を悩ませていると,YoutubeからHelixを紹介する(推定インドの方の)声が聞こえてきました.興味を持ち色々調べていくと,Batteries included, Selection first, Treesitter搭載,などなど魅力的なエディタであることがわかり,導入するに至りました.
対象読者
- (Neo)vimの挫折経験がある方
- 思考のスピードでコーディングをしたい方
- できるだけキーボードから手を離したくない方
インストール
本当に簡単なので公式ページの紹介にとどめさせていただきます.何かわからないことがあったら聞いてください.
特徴
Helixはvimとkakouneというエディタから遺伝子を受け継いでいるRust製モーダルエディタです.
Vimを本格的に使いやすいエディタとして使おうとするとプラグインの導入,管理が必須になる一方,Helixは箱出しですぐに使えます.
Treesitterを搭載しているため,lspがある環境ではHelixは構文単位で編集することができます.
また,コマンドに関してはselection firstという設計思想のもと作られており,vimに比べて体系的に身につけていくことができます.emacsはあまり深くまで使ったことがなく,比較することができないのですが,コマンドを入力するときに左手の小指が千切れると聞いているのでHelixの方がはるかにマシでしょう.
以下の章ではHelixに搭載されている様々な機能や,モード,コマンドについて紹介します.
Normalモード
Normalモードではコマンドを入力することになります.これを覚えることで思考のスピードで編集することができます.思考のスピードで編集できるに越したことはないので皆さんもコマンドを覚えて思考のスピードで編集しましょう.
例えば,一行削除したいときにはxdと入力すると一行削除されます.
これはvimだとddでしたね.これはまさにselection firstという思想でhelixのコマンドができていることの証左です.実はさっきのxdというコマンドはx:一行選択とd:選択範囲の削除というコマンドに分解することができます.ここからhelixでは編集する範囲を指定し,その後に編集の内容を打つという構造になっていることがわかると思います.もう一つ例を挙げると,単語の削除はvimだとdiw,helixだとmiwdです,vimはdelete in wordであるのに対し,helixはmatch in wordで選択したのち,deleteで削除しています.この設計思想の何が良いかというと,dは常にdeleteを意味するし,cは常にchangeを,rはreplaceのように体系的に学ぶことが可能であるということです.目的語,述語がより明確に分かれており,かつその意味するところが常に一意に定まるというところが嬉しいです.おそらくこのモードにいる時間が最も多くなることでしょう.
Insertモード
Normalモードでi,a,o,I,Aなどを入力することでこのモードに移行することができます,このモードではテキストを入力することができます.このモードからnormalモードに抜けるためには<esc>を押してください.これはvimと一緒ですね.あと地味に<tab>が優秀です.意味的になんとなく"次"っぽいところに飛んでくれます.説明が難しいので実際に使ってみてください.
Selectモード
VimでいうところのVisualモードですがその内容は少し違います.
vで入ることができて,テキストの範囲選択をすることができます.
またNormalモードのときに気づいた方もいるかと思いますが,HelixではNormalモードとSelectモードの境界が曖昧です.例えばNormalモードでe:次の単語の終端にカーソルを移動する.というコマンドを入力すると,カーソルが移動した軌跡が選択されます.独特なのでvimユーザーはここで困惑するかと思いますが筆者は,慣れるとむしろ便利に感じました.
そのおかげて先ほど単語選択をmiwというように紹介しましたが,ebでも単語を選択できます.
その他便利なマイナーモード・機能
Commmandモード
normalモードで:を入力することで色々なことができます.ここはほとんどvimと同じです.例えば:wqで保存して終了,などです.画面下部にコマンドの候補と説明が出てくるので見ながら覚えていきましょう.
Matchモード
normalモードでmを押下することで入ることができます.パラグラフ,括弧の中身,任意の文字の中身などなどテキストオブジェクトを選択することができます.vimもそうですがテキストオブジェクトを扱いこなすことができるようになると急にコーディングが楽しくなるのでぜひどんどん使って慣れていってください,またlspサポートが優秀なので関数全体を選択したり,コメントを選択したりなども容易くできます.
Gotoモード
normalモードでgを押下することで入ることができます.次に目的地を入力することでそこに行くことができます.例えばggでファイルの先頭geでファイルの末尾,ghで行頭,glで行末,などです.また例の如くlspサポートが強力なので,gdで定義に移動したりなど様々な場所に飛んでいくことができます.用が済んだら<Ctrl-o>で戻ってきましょう.もう一つ紹介したいのがgwコマンドです.vimiumを使ったことがある人なら想像しやすいと思いますが,単語にasなどのマーカーがつき,それを入力することでその単語の位置にカーソルを移動することができます.vimだと相対行移動してからf tなどで目的の単語まで移動することが(おそらく)多いでしょう.これの認知の流れを表現すると編集したい単語の相対行をみる.-> 〇〇j or 〇〇k などを入力して行の移動を行う,-> f<char>, t<char> で目的の単語まで移動のような具合です.helixだと編集したい単語を見る -> gw を入力 -> マーカーを入力するとかなり認知負荷が低いです.nvimでもhop.nvimとかありますが...... また,例のごとくselection firstなので,ジャンプした単語は選択されます.cで編集するなり,dで消すなり,好きなようにしてください.
Spaceモード
<space>を入力することで入ることができます.ここではエディタの操作をすることができます.fzfを起動したり,livegrepを使ったり,エディタに必要な最低限は揃っています.
マルチカーソル
Cを押すと一行下にカーソルを追加することができます.これを使いこなすのは難しいですが使いこなせると色々な行をまとめて編集することができます.使っていくうちに慣れていくので積極的に使っていきましょう.
検索&置換
/<chars>で検索,nで次の候補,Nで前の候補に移動できます.
s<chars>で選択範囲の中で一致するものの上にカーソルを置いて,cやらrやらで置換することができます.これはマルチカーソルの拡張です.
LSPサポート
先ほどから言及している通り,LSPサポートが非常に優秀です.Helix君はLSPからどこが定義で,どこが実装で,どこからどこまでが関数で......というとても多くの情報を教えてもらっています.そのおかげで定義ジャンプや,関数の中身の選択,関数の引数の中身だけ選択.....などなどたくさんの便利な機能がプラグインなしで使えます.Helix君は今書いているプログラミング言語の文法を知っているのです.
短所
プラグインがまだないです.現在開発中とのことなので気長に待ちましょう.
コマンドの設計思想上どうしてもストローク数が多くなることがあります.ただその代わりにホームポジションに近いところでコマンドを打てることが多いので一長一短かなとも思います.
vim/neovimに比べて情報が圧倒的に少ないです.公式のドキュメントを見たり,githubのdiscussionを見たり,redditのスレッドを探したり結構体力を使います.そのためAIにコマンドを聞いても平気でvimのコマンドを教えてきます.気をつけましょう.
そして最大の短所はデフォルトのカラースキームが流石に紫すぎるところです.

どうですか?これがデフォルトのカラースキームなエディタを信頼して良いのか疑問に思うかもしれませんがきっと大丈夫です.とっとと:theme catpuccin-frappeなどのコマンドを入力してこのありえないカラースキームをやめましょう.
まとめ
今回紹介したコマンド・機能はごく一部です.しかし,実際に使うときには右下にコマンドの候補が出てくるのでそんなに辛くないです.覚えておくに越したことはないですが忘れてもなんとかなります.またvim同様優秀なtutorがあるのでhx --tutorを打って一通りやってみましょう.また,使ってみていただいた方は,所感を教えていただけると筆者はとても喜びます.また,ここには書ききれなかった,便利な機能もまだまだたくさんあります.筆者に聞くと喜んで話し出すので,ぜひ聞いてみてください.
この記事はHelixエディタ + 自作配列で書きました.
Discussion