2 ポイント 投稿者 GN⁺ 2024-08-27 | 1件のコメント | WhatsAppで共有
  • Vim Racerは、Vimの移動コマンドでテキスト内の目標地点を素早く探し出すオンラインゲームで、コマンドの習熟度を記録競争の形で練習できる
  • 目標に到達するたびに次のターゲットが現れ、w3jのようなVim移動コマンドを組み合わせて12個のターゲットを巡るレースを行う
  • relative lines設定をオンにすると相対行番号ベースの移動を練習しやすく、大きなファイルで長い絶対行番号の入力を減らすのに役立つ
  • リーダーボードは手動での探索能力を測るため、1秒未満の記録を拒否し、ユーザー名の変更も1時間に1回に制限している
  • 高得点者のキー入力やレースごとのヒントを見ることができ、単なるゲームを超えてVim移動の学習資料としても活用できる

Vim移動コマンドで競うスピードゲーム

  • Vim Racerの目的は、すべてのターゲットへできるだけ速く移動すること
    • ターゲットに到達すると次のターゲットが現れる
    • ターゲットはAのように表示される
    • すべてのVim移動コマンドを使用できるため、速い記録は効率的な移動コマンドの選択に大きく左右される
  • レースを開始するにはresetをクリックする
    • クリック後、ブラウザのフォーカスがエディタへ移動し、すぐにwなどのVim移動コマンドを使える
  • 現在の画面にはRace Level: 12 Targets (Burn Detector)Race Mode: StandardNavigations: 0/12が表示されている
  • フィードバックはRedditコミュニティを通じて受け付けている

設定と運用上の制約

  • relative linesは、エディタ左上の歯車アイコンの設定からオンにできる
    • 3jのようにコマンドの前に相対移動数を付ける方式を好む場合に便利
    • 大きなファイルでは1230ggを入力するより速い場合がある
    • ローカル設定の例は、カーソル行だけ絶対行番号を表示し、それ以外は相対行番号を使う方式
  • 寄付金は現在、vim-racerサーバーとデータベースのアップグレード資金に使われている
    • 現在のデータベースはDynamoDB
    • DynamoDBは小規模サイトを始めるには無料枠が有用だが、コスト効率の代わりに機能面の制約がある
    • 現在の主な目標はSQLデータベースへアップグレードすることで、最小インスタンスの費用は年間約100ドル
    • 以前の寄付金はvim-racerの継続的な収益源へ再投資されている
    • 最初の寄付者はThePrimeagen

リーダーボードと学習での活用

  • リーダーボードは1秒未満の記録を拒否する
    • ユーザーhowは、2秒未満の記録も正当であり得ることを示している
    • このゲームは、ユーザーがテキストを手動でどれだけうまく探索できるかを測ろうとしている
    • <20msの記録はVim活用能力を示すものではあるが、ゲームの趣旨には合わない
    • 今後はターゲットのバリエーションだけでなく、別のゲームタイプやcapped/uncappedリーダーボードが登場する可能性がある
    • 現在は開発リソースが限られているため、純粋な探索で得たスコアをリーダーボードに残す方針
  • ユーザー名はアカウントを作成する代わりに、1時間に1回だけ変更できる
    • この制限は、リーダーボードが過度に埋まるのを防ぐためのもの
  • Vim RacerはVim移動の学習にも使用できる
    • 各レースタイプは、ターゲットへ効率的に移動する経路を学ぶためのヒントを提供する
    • 各リーダーボード項目には、高得点者が使用したキー入力が含まれる
    • ユーザーはそのキーシーケンスを分析して新しいVim移動コマンドを学び、探索スキルを改善できる

1件のコメント

 
GN⁺ 2024-08-27
Hacker News のコメント
  • jpeg レベルを 17秒でクリアしてランキングに名前を載せた。対戦型ゲームとして本当に楽しかった
    最適化せず、指定された位置へ行くために本能的に動くようなプレイでも楽しかったし、特にランキング上のプレイの移動過程を見せる機能は学習教材としても有用そう
    ただ、上位に1秒の記録があるが、1移動あたり0.05秒未満なので人間には可能に見えない。スクリプト入力を使っているようだし、このインターフェースでは防ぐのが難しそうなので、経過時間ではなくキー入力数で順位を付ければ、最速の人ではなく最も効率的な人が上位に来て、スクリプトによるチートの意味も薄れると思う

    • その位置に到達する最短のコマンド組み合わせは、ある程度探索できる
    • % を使ったのか気になる。自分は下手にやっても 6.5秒まで縮められた
    • VimGolf はそういう方式でやっている
  • 本当に素晴らしい
    速度の代わりにキー入力数を最小化するモードがあるとよさそう。そうすれば、速い hjkl 連打ではなく、Vim ゴルフ式の最適解が競争対象になる
    簡単なバグとして、ランキングで文字 ` が「Unsupported」と表示される。マークを使う Duff's device を追うときに特に目立つ

    • 大きな発見で、ありがとう。何が抜けているのか確信がなかった
      おそらく許可リストベースで処理しているので、そこに追加すればよさそう
  • 始めると止められないゲーム

    • Vim を終了できないからかな? :-)
    • いつか :q のイースターエッグを入れるべきかもしれない
  • 本当に面白い。こういう Vim ゲームをほかに知っているか気になる
    ずっと Vim を使いたいと思っていたが、Emacs evil mode ユーザーなので、まだ速くはない

    • Vim Adventure がある。ゲームというよりチュートリアルに近いが、それでも悪くない: https://vim-adventures.com/
    • vimgolf.com は定番
  • サイトがどこか壊れているようだ。何をしても何の反応もなく、Chrome と Firefox の両方で試した

    • Vim に初めて触れたときもこんな感じだったので、もしかすると現実的な実装なのかもしれない
    • 申し訳ない。デプロイパイプライン側に問題があるようだ
      以前はスムーズに切り替わっていたが、今はキャッシュを手動で無効化する必要がある。一部のデプロイでだけ発生しているようだ
    • 同じ問題がある。Chrome では CPU もかなり使うのに何も起きず、どのキーを押しても反応がない
  • 本当にクール。ただ、プログラムが後の段階で目標にする行を削除したらクラッシュした

    • 修正が難しかったバグだ。設定上は削除できないはずだが、VIM キーバインディングライブラリがそれを上書きしているようだ
      それでも知らせてくれて、優先順位を決める助けになった
  • ランキングを通じて他の人がどうやったのか見られる機能がとても有用

  • プレイしてみたいのだが、行番号がカーソルについて回る。バグのように見えるけれど、何か見落としているのだろうか? Vim をたくさん使ったことがあるわけではないが、普通は遅くても移動はできる
    Chrome と Firefox で試した

    • それは 相対行番号という Vim のオプション
    • 今はその設定を構成可能にし、デフォルトは通常の Vim の行番号に変わるようにした
      フィードバックのおかげで、この作業の優先度が上がった
    • ローカルの Vim ではこうすればよい:
      set rnu
      5j12k のような相対移動に本当に便利 :)
  • 面白い。キー入力数の表示と、より速く行く代わりにキー入力数を最小化しなければならないモードが追加されると素晴らしそう
    ゲーム説明で「target」が何なのかも、もっと明確にしてくれるとよい

    • いい指摘。次のリリースには、より良い説明を入れる
      キー入力数は悩ましい。このゲームの焦点を本当に速度に置きたいからだ。VimGolf はそうしたパズルやシナリオをすでにうまく扱っていて、ここでの差別化点は速度だ
      代わりにキー入力データを分析してみたい。たとえば wwwf より速いという結果が出るかもしれない。最初の仮説は、fF で検索するのは wehj のような一般的な移動より効率的ではない、というものだったが、すでに間違っているように見える。ただし「上位陣のかなりの数が fF を使っている」程度の表現にすべきだろうし、それは彼らが速い、または少なくともそれらのキーが大きな不利ではない、という意味かもしれない
    • 競争要素としてキー入力の最小化をぜひ入れてほしい。Vim が魅力的な理由は速度もあるが、どこかへ行く、あるいは何かをするときに必要なキー入力を減らしてくれる点が大きい
      これは純粋な速度と同じではないとしても、他のエディタと比べたときの使い心地につながり、タイピング体験には非常に重要だ
  • ひどいゲームだが、ひとつのことはよく示している。Easymotion なしの Vim 移動は、レーシングカーではなく徒歩でレースをしているようなものだ