完了した項目をカテゴリ別に整理した一覧です。
注記:
docs/spec.md, docs/vim_diff.md, docs/command.md を参照docs/todo.md は「未完了の作業」に分離して管理するUndo/Redo(u, Ctrl-r)undofile / undodir)— :set undofile で有効化、Marshal シリアライズ、SHA256 パス/, ?, n, N)gg, G, w, b, e, $, ^)a, A, I, o, O)p, P, r, yy, yw)iw, aw, quote/bracket 系など)c operator と change 系コマンド(cw, cc, c$ など)* # g* g#, 最小 substitute):substitute の c(confirm)フラグ — y/n/a/q/l/Esc 対応"a, "A, "+, "*)q{reg}, @{reg}).(直前変更の repeat)初版f/F/t/T, ;, ,(行内文字移動)%(対応括弧ジャンプ)"_, 0, 1-9)ip/ap, i], a}, i`, など)Ctrl-v、最小). repeat の精度向上(operator + text object + macro 連携)= operator(自動インデント: ==, =j, =k, =G, =gg, Visual =。Ruby filetype 対応):command(ユーザー定義 Ex コマンド):ruby / :rb:ls, :buffers, :bnext, :bprev, :buffer, #):args, :next, :prev, :first, :last):ls に表示):set 系)docs/plugin.md(拡張 / plugin 的な書き方)nmap/imap/map_global ... do |ctx, ...| end)ctx.editor / ctx.buffer / ctx.window API リファレンス(未確定 API 注記つき):run コマンド(PTY ストリーミング、runprg オプション、バッファごと実行履歴、% ファイル名展開、auto-save、Ctrl-C 停止、status line にコマンド表示)path:line:col 形式でのファイルオープン(CLI 引数 / :e / gf 対応、存在するファイルのみ解釈)gf: [text](path) リンク上で gf するとファイルを開く(filetype 層 binding、リンク外はデフォルトにフォールバック)Lang::Base.register_filetype_bindings フック(assign_filetype 時に自動呼び出し、lang モジュールが filetype 固有のコマンド/binding を自己登録):global / :vglobal(:g/pattern/command, :v/pattern/command)— マッチ行に Ex コマンドを実行、undo は一括:print/:p, :number/:nu, :move/:m, :copy/:t, :join/:j, :>/:<, :normal/:norm:rich [format] Ex コマンド(トグル)gr Normal mode キーバインド(トグル).tsv / .csv 追加$ で行末に移動した際の縦揃えズレを解消)render_rich_view_line_sc の ANSI エスケープシーケンス対応ensure_visible_rich の汎用化(renderer.cursor_display_col インターフェース)wrap オプションに対応(長い行を折り返して表示)SIGWINCH + 即時再描画):split, :vsplit, window 間移動)Ctrl-w 拡張 — c(close), o(only), =(equalize), +/-/</> (resize):tabnew, :tabnext, :tabprev):q の window/tab/app クローズ挙動を Vim 寄りに調整:ls, :args, :set, :command)TextMetrics 中心)w/b/e, Visual yank, p/P)truncate の表示幅計算を文字数ベースから DisplayWidth ベースに修正(全角文字を含むエラーメッセージでターミナルがスクロールするバグを修正)wide_codepoint? に追加(「𩸽」等のSIP文字が幅1と判定されカーソルや描画がずれるバグを修正)@lines.dup で浅いコピーのみ保持)docs/spec.md)rake docs:check, rake ci)Lang::Markdown に抽出、通常モード + Rich mode で共有)Lang::C): シンタックスハイライト・スマートインデント・保存時 gcc チェックLang::Cpp): C の全機能 + C++ 固有キーワード・アクセス指定子インデント・保存時 g++ チェックgit help -a / gh help から動的取得、セッション内キャッシュ):git / :gh サブコマンドのシェルフォールバック実行--help, --version--clean+{cmd} / -c {cmd}-u {vimrc} 相当(-u path, -u NONE)-R-n(現状 no-op, 互換予約)-o[N], -O[N], -p[N]-M-Z-V[N] / --verbose--startuptime {file}--cmd {cmd}-d(diff mode)-q {errorfile}(quickfix 読み込み起動)-S [session](session 読み込み):substitute フラグ拡張(g, i, I, n, e, c 全対応)Enter ジャンプ(qf 行フォーマット → location 解決、cursor 行の項目へ移動)spell option)— Pure Ruby 実装、/usr/share/dict/words 辞書、赤下線ハイライト、]s/[s ナビゲーションgitcommit filetype — コメント行のシンタックスハイライト、spell デフォルト有効Lang::Registry に buffer_defaults 機構を追加(filetype ごとのデフォルト option 設定):grep / :lgrep のシェルインジェクション対策(argv 配列実行 + Dir.glob 展開)-Z) の網羅強化(:grep, :lgrep, :git, :gh を無効化)bulk_once モード廃止、チャンク読み込み)Buffer.ensure_regular_file! で統一ガード)@loading_state を Stream に統合し、非同期ファイルロード状態を Stream::FileLoad で管理Stdin, Run, Follow, FileLoad, Git)に分離new 時点でスレッド/ウォッチャーを即時起動stop_handler をコンストラクタで渡す(attr_reader)StreamHandler を StreamMixer にリネーム(責務を明確化: イベントキューの合流・分配)docs/spec.md, docs/tutorial.md, docs/binding.md, docs/command.md, docs/config.md, docs/vim_diff.md の継続更新docs/config.md(設定一覧)docs/vim_diff.md(Vim との差分)docs/todo.md の P0-P2 項目の消化global_commands.rb(3931行)を7つのドメイン別モジュールに分割
commands/motion.rb — カーソル移動、スクロール、ワード移動、括弧マッチcommands/edit.rb — 挿入モード、削除、変更、結合、置換、インデント、undo/redo、テキストオブジェクトcommands/register.rb — ヤンク、ペースト、ビジュアルヤンク/削除、レジスタ操作commands/search.rb — 検索、置換、global、フィルタ、grepcommands/window.rb — ウィンドウ分割/フォーカス/クローズ/リサイズ、タブ操作commands/buffer.rb — バッファ管理、ファイルI/O、終了、マーク、ジャンプ、arglist、リッチビューcommands/meta.rb — メタコマンド(help, set, bindings, ruby eval, run, shell, define command, normal exec)commands/ex.rb を廃止し、ドメイン別モジュールに再配置
ex_ プレフィックスを全コマンドメソッドから除去(ドメイン名に変更)commands/search.rbcommands/edit.rbcommands/buffer.rbcommands/meta.rb(新規)ex_git/ex_gh → git_dispatch/gh_dispatch(commands/git/handler.rb, commands/gh.rb)ex_follow_toggle → follow_toggle(stream_mixer.rb)editor.rb(1769行→1176行)から5つのモジュールを抽出
editor/options.rb — オプションシステム(OPTION_DEFS、get/set/effective、型変換)editor/registers.rb — レジスタ管理(名前付き、番号付き、クリップボード連携)editor/marks_jumps.rb — マーク、ジャンプリスト、jump_to_locationeditor/quickfix.rb — quickfix / location list 管理editor/layout_tree.rb — レイアウトツリーヘルパー(split, remove, rects, leaves)key_handler.rb(1510行→816行)から3つのモジュールを抽出
key_handler/pending_state.rb — 保留状態マシン(operator, register, mark, jump, replace, find)key_handler/macro_dot.rb — マクロ録音/再生、ドットリピートkey_handler/insert_mode.rb — 挿入モードキー処理、オートインデント、バックスペース、タブgit/ → commands/git/、gh/link.rb → commands/gh.rb に移動
RuVim::Git → RuVim::Commands::Git、RuVim::Gh::Link → RuVim::Commands::Gh に変更gh/ ディレクトリ(単一ファイル)を commands/gh.rb にフラット化commands/yank_paste.rb → commands/register.rb(ドメイン名に変更)commands/buffer_file.rb → commands/buffer.rb(簡潔化)commands/runtime.rb → commands/meta.rb(メタコマンドとして明確化)Gh::HandlerMethods → Gh::Handler(Git::Handler と対称な構造に統一)repo_root を Commands::Git.repo_root として module_function で公開app.rb から register_builtins! + bind_default_keys! を app/defaults.rb に切り出し(約310行)key_handler.rb の git 系 Enter ハンドラを BUFFER_KIND_ENTER_COMMANDS テーブルに統合editor.rb から filetype 検出ロジックを editor/filetype.rb に切り出しlang/* の require を app.rb → lang/registry.rb に移動lang/tsv, lang/csv の require を app.rb → rich_view.rb に移動commands/git/* の require を app.rb → commands/git/handler.rb に移動Clipboard, Browser, SpellChecker, FileWatcher を autoload 化(起動時不要)lang/* モジュールを autoload 化(Registry に検出メタデータ集約、モジュール本体は遅延読込)buffer_defaults を Registry の register 引数から各 lang モジュールの BUFFER_DEFAULTS 定数に移動entry[:mod] 直接参照から Registry.resolve_module 経由に変更highlighter.rb を削除し、apply_regex + カラー定数を Lang::Base に移動lang/* の全モジュールを module X から class X < Base に変換(27ファイル)class << self を def self.method に変換(親クラス定数の可視性問題を解決)Buffer が lang_module を保持し、Screen が毎行の Registry lookup を回避def self.method) からインスタンスメソッド (def method) に変換BUFFER_DEFAULTS 定数を buffer_defaults インスタンスメソッドに変換(const_defined? 排除)Lang::Base.instance で frozen singleton インスタンスを提供(Registry の @instances キャッシュ削除)Tsv.detect? / Csv.detect? をクラスメソッド化(ステートレス検出)method_missing + autoload で遅延ロード化(app.rb から eager require 削除)