
2026/05/06 2:18
BASIC で Vi テキストエディタを開発中
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
著者は、Yabasic の標準ライブラリを使用した大まかに 100〜500 行のコードで実装された超単純なテキストエディタ「yvi」を作成した。人民パーマコンピューティングイニシアチブに触発され、yvi は意図的に行送りやステータスラインでの 80 文字までの表示、行/文字番号表示などの複雑な機能を除いた極小化された Vi クローンを目指している。
コアとなるナビゲーションとファイル操作(例:
h/j/kl、g、G)を基盤とし、著者は追加のコマンドとして単語ナビゲーション、ファイルの先頭・末尾へジャンプ (gg, G)、行削除 (dd)、元に戻す (u)、検索、コマンドの合成(数字 1–9)、および後のバージョンで実装された上書き編集 (S) や切断/貼り付け (c) などを経てエディタを拡張した。このツールは GitHub および Tildegit で無償に利用可能であり、基本的なライティングタスクや単純なプログラムの記述に使用でき、この投稿自体も yvi を用いて作成されている。
現在、yvi に既知のバグが存在するため、非重要なタスクまたは基本的な編集用途への限定が推奨される。本書は機能的で変更が容易であり、おそらく BASIC 実装による唯一の Vi クローンである可能性があるとして記述されている。将来の開発では既存のエラーの修正やコードベースのさらなる拡張に焦点を当て、ミニマリスト向けの編集ツールとしてのアクセス可能なオープンリソースとしての地位を強化する予定である。
本文
【OR:より劣悪な Vim を作り直す】
私の新しいテキストエディタ『yvi』に関する投稿です。
私はしばしば「車輪の再発明」を好みます。特に芸術、工芸、料理、あるいはコードのようなものを作る際に限ればこそですが。それが私の学び方であり、道具や作業環境を自分の思考プロセスに合わせて形作るための方法でもあります。私は美術分野で背景を持ち、コンピューターサイエンスを体系的に学んだことはなくても教鞭をとっているため、私のソフトウェアには一貫して手作りの味わいが漂っています。
その最たる例として、私は他の有名で評判の静的サイト作成ツールが不手際が多い、文書化が不充分である、あるいは肥大化していることに苦戦した結果、自作のスタティック・ブログジェネレーター『panblog』を開発しました。
また、私の関心は主流からやや外れたプログラミング言語やパラダイム、とりわけシリコンバレーが現在抱いているソフトウェア観にないものに惹かれます。例えばグルー(接続)用言語や学習者向けの言語・ライブラリ、スクリプト言語などを愛好しています。私のお気に入りはいくつかあり、その代表として Lua、Bash、Fish、Forth 系、そして BASIC が挙げられます。
昨年に渡って、私は約四ヶ月間、特に 25 年近く連続してメンテナンスが行われている Yabasic 方言を含む BASIC の調査と記述に時間を費やしました。ネット上の友人から他のバリエーションを試すようすすめられたこともありますが、Yabasic は使いやすく文書化も充実しています。GUI(グラフィカル・ユーザ・インターフェース)の構築には向いていないかもしれませんが(私の経験では)、その用途については L5 や Processing-p5 ライブラリを使用しています。
現代版 BASIC としては極めて楽しく使えます。私はサイバーホースレースゲームを自作し、UFO50 やフラッシュゲーム『Quibble Race』に影響を受けたコマンドラインゲームを開発しました。さらにテキスト版の『オレゴン・トライル』の中身も触り、それを模倣した簡易版や、経済シミュレーションゲーム『ドープウォーズ』の複製版も作成しています。
最近、Vidak の手がけた「ザ・ピープルズ・ペルマコンピューター(The People's Permacomputer)」というプロジェクトに出会い、それを通じて 1970 年代風のコンピュータをゼロから構築するためのオンラインフォーラムや関連プロジェクトにたどり着きました。私は何年もネオビムを使用し、その前にはビムを使っていました。テキストエディタを作るのは初めてでしたが、「自作してみるのも面白いのではないか」と思い至りました。Vi を実装するのは大それったことのように思えましたが、オフパンク(Offpunk)という簡素な TUI インターネットブラウザに感銘を受けました。同ツールには h/j/k/l や g/G といったごく少数のショートカットキーだけが実装されており、移動操作がシンプルです。この影響を受けて、「Vim の最小限のコマンドだけで、極端にシンプルなエディタを作れるのではないか」と考え、実際にはそれほど難しくはなかったのですか。
実は、そう難しくはありませんでした!Yabasic で約百行のコードで、ミニマルな空白ページの基本レイアウトを素早く実装し、移動や挿入モード・通常モードの切り替えといった基本的な Vi コマンドを追加しました。ファイルを開く、新規作成する、保存する機能を付け加えました。これで『vi.bas』プログラムそのもののソースコードを開いて、いじったり編集したりできるようになったのは非常に心地よいものでした。初期の重要な判断の一つが改行処理(wrapping)の有無でしたが、これを実装せず、プログラムを簡素化することに決めました。妥協案として、一行でどれだけ書いても構いませんが、表示は最大 80 文字に制限され、下部の状態バーには行数と文字位置が表示されます。
これでさらに使いやすくなりました。しかし次に、単語単位での前後移動、行末への移動、行頭への移動、『gg』(プログラム開始)および『G』(終了)に加え、『dd』による一行削除機能を取り入れたいと考え、複数の文字の選択、コマンドの組み合わせ(現状では数字 1~9 のみ)、検索機能を実装し、コードは約 500 行に膨れ上がりました。さらに『u』(直近の編集/行の元に戻す)を追加しました。
その後、『S』(一行を覆写)、'c'(カットして挿入)などの多くのコマンドも追加し、実際のコーディングプロジェクトや文章作成のテキストエディタとして本格的に利用しています。この投稿そのものも yvi エディタで書かれました。
ここでの説明はいつまで続けるべきかわかりませんが、プログラムは今後もさらに進化していく可能性がありますが、すでに非常に実用的なレベルに達しています。確かにいくつかのバグは存在しますが、重要な用途や、失ったら致命的となるような場面での使用は推奨できません。私は現在 yvi 自体でこの記事を書いており、必要だと感じている機能がすでに実装されているように思えます。自作のテキストエディタを開発し、基礎的な文章作成や単純なプログラムに最適であり、拡張性もあることを誇りに思います。
コードそのものが美しくないかもしれませんが、機能的で容易に変更可能です。BASIC 実装における優れた Vi クローンだけでなく、私はこれが事実上唯一のものだと思っています。
ぜひ今日お試しください。
- yvi の GitHub リポジトリ
- yvi の Tildegit パージ