世界を動かす技術を、日本語で。

Kilo: 1000行未満のコードで構築されたシンタックスハイライトと検索機能を持つテキストエディタ

2025年5月20日原文(github.com)

概要

  • Kilo は、1000行未満で構成された 小型テキストエディタ です。
  • 主要な キーバインド や機能が明確に定義されています。
  • 外部ライブラリ に依存せず、標準的な端末制御シーケンスを利用します。
  • BSD 2条項ライセンス で公開されており、カスタマイズや学習に適しています。
  • 作者は Salvatore Sanfilippo (antirez) です。

Kilo:1K行未満の小型テキストエディタ

概要・特徴

  • Kilo は、コード量が 1,000行未満 のシンプルなテキストエディタであることを強調
  • cloc コマンドで行数カウントを実施すること
  • screencast (使い方動画)はasciinemaで確認可能
  • 端末上 で動作し、追加の 外部ライブラリ (curses等)に依存しない設計
  • VT100互換端末 のエスケープシーケンスを利用すること

基本的な使い方

  • コマンド:kilo <filename>でファイルを開くこと
  • キーバインド一覧
    • CTRL-S :ファイル保存
    • CTRL-Q :エディタ終了
    • CTRL-F :検索モード起動(ESCで検索終了、矢印キーで結果移動)
  • 直感的な操作性 を重視した設計であること

開発背景・活用方法

  • alpha段階 のプロジェクトであり、短時間で開発されたことを強調
  • Salvatore Sanfilippo (antirez) による執筆と公開
  • 既存のプロジェクト( load81, linenoise)のコードを一部流用していること
  • より高度なエディタやCLIツールの 出発点 ・テンプレートとして活用推奨
    • REPL型CLI よりも発展的なインターフェースの開発に利用すること
  • BSD 2条項ライセンス で自由に利用・改変可能であること

ライセンス・著作権

  • BSD 2-Clause License に基づき公開
  • Salvatore Sanfilippo (antirez) が著作者であることを明記
  • 利用・改変・再配布に関する 権利と条件 を確認すること

Hackerたちの意見

ちょうどいいタイミングだね、さっきkiloみたいなテキストエディタをゼロから作るチュートリアルを終えたところだよ: https://viewsourcecode.org/snaptoken/kilo/index.html このチュートリアルは本当に良くできてるから、めっちゃおすすめだよ。

そのチュートリアルに対する2つ目のおすすめだよ。これが私が終えた初めてのコーディングチュートリアルで、本当に良かったし、自分の技術が頼っている基盤となるソフトウェアを作るのが楽しかったんだ。あのエディタは使ってないけど、作るのは楽しかったよ。

あのチュートリアルは懐かしいな。リリースされたときにkiloで遊んで、最終的には埋め込まれたLuaでスクリプトをサポートするマルチバッファ版を作ったんだ。もちろん、真剣なものではなくて楽しいハックだったけど、最高のプロジェクト名を選べたのは良かった: https://github.com/skx/kilua

これは、異なるプログラミング言語で遊ぶための好きな中程度のプロジェクトの一つだ。元のC版: https://git.timshomepage.net/tutorials/kilo Go版: https://git.timshomepage.net/timw4mail/gilo Rust版: https://git.timshomepage.net/timw4mail/rs-kilo そして、もっとRustっぽいチュートリアル版(Hecto): https://git.timshomepage.net/tutorials/hecto PHP版: https://git.timshomepage.net/timw4mail/php-kilo ...そしてTypescript版: https://git.timshomepage.net/timw4mail/scroll

このコードを読むのは、まさに通過儀礼みたいなもんだね。Cがどう動くか、テキストエディタがどう動くか、VTコードがどう動くか、シンタックスハイライトがどう動くか、検索機能がどう動くか、便利さやエッジケース、エラーハンドリングをほとんど取り除いたときに、実際に何を作るのにどれだけ少ないコードが必要かを学べるんだ。

それがこの似たようなRustプロジェクトにもインスピレーションを与えたよ: https://github.com/ilai-deutel/kibi#comparison-with-kilo ただ、Unicodeをうまく扱うためにちょっとズルしてる部分もあるけどね: > unicode-widthを使ってUnicode文字の表示幅を決定してるんだ。残念ながら、これを回避する方法はないよ: unicode文字幅テーブルは230行もあるから。

それがこの似たようなRustプロジェクトにもインスピレーションを与えたよ そしてこれらのプロジェクトもね: https://github.com/antirez/kilo/forks

個人的には、極端なサイズ削減にはあまり納得できない理由がこれなんだ。こういうプロジェクトは、一般的に必要な機能を犠牲にしなきゃいけないから、ある程度のコード量は必要なんだよね。

面白い話なんだけど、kiloを使ったのがターミナルを諦める決定的なきっかけだったんだ。[1] 最近は、ピクセルを描けるシンプルなキャンバスの上でプログラミングするようにしてるよ。最近ずっと使ってるテキストエディタはこちらだよ(たくさんのフォークのベースにもしてる): https://git.sr.ht/~akkartik/text2.love。1200行のコード、比例フォント、ワードラップ、スクロール、クリップボード、無制限のアンドゥ。モビー・ディックも編集できるよ。[1] https://git.sr.ht/~akkartik/teliva

最近は、ピクセルを描けるシンプルなキャンバスの上でプログラミングするようにしてるんだ。なんでかって?

ターミナルを避けてそれを置き換えた他の誰か: https://arcan-fe.com/2025/01/27/sunsetting-cursed-terminal-e...

へい、アッカーティック!それ、めっちゃ面白いね!今はまだターミナルを使って個別のアプリを起動してるの?

Hacker Newsで議論の続きを見る