ruvim 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +4 -0
- data/AGENTS.md +84 -0
- data/CLAUDE.md +1 -0
- data/docs/binding.md +29 -0
- data/docs/command.md +101 -0
- data/docs/config.md +203 -84
- data/docs/done.md +21 -0
- data/docs/lib_cleanup_report.md +79 -0
- data/docs/plugin.md +13 -15
- data/docs/spec.md +195 -33
- data/docs/todo.md +183 -10
- data/docs/tutorial.md +1 -1
- data/docs/vim_diff.md +94 -171
- data/lib/ruvim/app.rb +1543 -172
- data/lib/ruvim/buffer.rb +35 -1
- data/lib/ruvim/cli.rb +12 -3
- data/lib/ruvim/clipboard.rb +2 -0
- data/lib/ruvim/command_invocation.rb +3 -1
- data/lib/ruvim/command_line.rb +2 -0
- data/lib/ruvim/command_registry.rb +2 -0
- data/lib/ruvim/config_dsl.rb +2 -0
- data/lib/ruvim/config_loader.rb +21 -5
- data/lib/ruvim/context.rb +2 -7
- data/lib/ruvim/dispatcher.rb +153 -13
- data/lib/ruvim/display_width.rb +28 -2
- data/lib/ruvim/editor.rb +622 -69
- data/lib/ruvim/ex_command_registry.rb +2 -0
- data/lib/ruvim/global_commands.rb +1386 -114
- data/lib/ruvim/highlighter.rb +16 -21
- data/lib/ruvim/input.rb +52 -29
- data/lib/ruvim/keymap_manager.rb +83 -0
- data/lib/ruvim/keyword_chars.rb +48 -0
- data/lib/ruvim/lang/base.rb +25 -0
- data/lib/ruvim/lang/csv.rb +18 -0
- data/lib/ruvim/lang/json.rb +18 -0
- data/lib/ruvim/lang/markdown.rb +170 -0
- data/lib/ruvim/lang/ruby.rb +236 -0
- data/lib/ruvim/lang/scheme.rb +44 -0
- data/lib/ruvim/lang/tsv.rb +19 -0
- data/lib/ruvim/rich_view/markdown_renderer.rb +248 -0
- data/lib/ruvim/rich_view/table_renderer.rb +176 -0
- data/lib/ruvim/rich_view.rb +93 -0
- data/lib/ruvim/screen.rb +851 -119
- data/lib/ruvim/terminal.rb +18 -1
- data/lib/ruvim/text_metrics.rb +28 -0
- data/lib/ruvim/version.rb +2 -2
- data/lib/ruvim/window.rb +37 -10
- data/lib/ruvim.rb +15 -0
- data/test/app_completion_test.rb +174 -0
- data/test/app_dot_repeat_test.rb +13 -0
- data/test/app_motion_test.rb +110 -2
- data/test/app_scenario_test.rb +998 -0
- data/test/app_startup_test.rb +197 -0
- data/test/arglist_test.rb +113 -0
- data/test/buffer_test.rb +49 -30
- data/test/config_loader_test.rb +37 -0
- data/test/dispatcher_test.rb +438 -0
- data/test/display_width_test.rb +18 -0
- data/test/editor_register_test.rb +23 -0
- data/test/fixtures/render_basic_snapshot.txt +7 -8
- data/test/fixtures/render_basic_snapshot_nonumber.txt +1 -2
- data/test/fixtures/render_unicode_scrolled_snapshot.txt +6 -7
- data/test/highlighter_test.rb +121 -0
- data/test/indent_test.rb +201 -0
- data/test/input_screen_integration_test.rb +65 -14
- data/test/markdown_renderer_test.rb +279 -0
- data/test/on_save_hook_test.rb +150 -0
- data/test/rich_view_test.rb +478 -0
- data/test/screen_test.rb +470 -0
- data/test/window_test.rb +26 -0
- metadata +37 -2
data/docs/spec.md
CHANGED
|
@@ -89,10 +89,10 @@ RuVim は Vim と同様に、用途ごとに座標系を分けています。
|
|
|
89
89
|
エディタ全体の実行状態です。
|
|
90
90
|
|
|
91
91
|
- buffers / windows 管理
|
|
92
|
-
-
|
|
93
|
-
- tabpages 管理(タブごとに
|
|
92
|
+
- layout tree(ネストしたウィンドウ分割をツリーで管理)
|
|
93
|
+
- tabpages 管理(タブごとに layout tree / current window を保持)
|
|
94
94
|
- current window の管理
|
|
95
|
-
- mode 管理(`:normal`, `:insert`, `:command_line`)
|
|
95
|
+
- mode 管理(`:normal`, `:insert`, `:command_line`, `:rich`)
|
|
96
96
|
- ステータスメッセージ
|
|
97
97
|
- コマンドライン状態
|
|
98
98
|
|
|
@@ -166,7 +166,8 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
166
166
|
2. `RuVim::App` が mode ごとに処理を分岐
|
|
167
167
|
3. Normal mode のキーは `RuVim::KeymapManager` で解決
|
|
168
168
|
4. `RuVim::Dispatcher` が内部コマンド or Ex コマンドを実行
|
|
169
|
-
5.
|
|
169
|
+
5. Insert mode でキー処理後、stdin に未読データが残っていればレンダリングをスキップして追加のキーを読み取り・処理する(ペースト高速化)
|
|
170
|
+
6. `RuVim::Screen` が再描画
|
|
170
171
|
|
|
171
172
|
## 起動オプション(CLI, 現状)
|
|
172
173
|
|
|
@@ -189,7 +190,8 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
189
190
|
- `-Z`
|
|
190
191
|
- restricted mode(現状)
|
|
191
192
|
- user config / ftplugin を読み込まない
|
|
192
|
-
- `:ruby` を禁止する
|
|
193
|
+
- `:ruby` / `:rb` を禁止する
|
|
194
|
+
- `:!` を禁止する
|
|
193
195
|
- `-n`
|
|
194
196
|
- 現状は no-op(将来の swap / 永続 undo / session 互換の先行予約)
|
|
195
197
|
- `-o[N]`, `-O[N]`, `-p[N]`
|
|
@@ -210,6 +212,17 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
210
212
|
- `+{cmd}`, `+{line}`, `+`
|
|
211
213
|
- 起動後の Ex 実行 / 行ジャンプ / 最終行ジャンプ
|
|
212
214
|
|
|
215
|
+
補足(現状実装):
|
|
216
|
+
|
|
217
|
+
- `stdin` が non-TTY で、起動引数ファイルがない場合は `stdin` を follow stream として開く
|
|
218
|
+
- バッファ名は `[stdin]`
|
|
219
|
+
- status line に `[stdin/live]`, `[stdin/closed]`, `[stdin/error]` を表示
|
|
220
|
+
- Normal mode の `Ctrl-c` はデフォルトバインドで `stdin` stream stop(上流 PID へ直接 signal は送らない)
|
|
221
|
+
- `Ctrl-z` は全モード共通で suspend
|
|
222
|
+
- suspend 前に terminal を cooked + main screen に戻す
|
|
223
|
+
- `SIGTSTP` を自身に送って停止
|
|
224
|
+
- `fg` 復帰後に raw + alt screen を再有効化して再描画
|
|
225
|
+
|
|
213
226
|
起動時コマンド(`-c`, `+...`)は、初期 buffer / file open / intro screen 構築の後に実行します。
|
|
214
227
|
`--cmd` はそれより前で、user config 読み込み前に実行します。
|
|
215
228
|
|
|
@@ -252,6 +265,7 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
252
265
|
- `p`, `P`: paste
|
|
253
266
|
- `r<char>`: 1文字置換
|
|
254
267
|
- `c` + motion / `cc`: change(削除して Insert mode)
|
|
268
|
+
- `=` + motion / `==`: auto-indent(Ruby filetype でインデント自動調整。`=j`, `=G` 等)
|
|
255
269
|
- `v`: Visual (characterwise)
|
|
256
270
|
- `V`: Visual (linewise)
|
|
257
271
|
- `Ctrl-v`: Visual (blockwise, 最小)
|
|
@@ -262,6 +276,7 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
262
276
|
- `N`: 直前検索を逆方向に繰り返し
|
|
263
277
|
- `1..9` + 動作: count(例: `3j`, `2x`)
|
|
264
278
|
- 矢印キー: 移動
|
|
279
|
+
- `Ctrl-z`: shell へ suspend(`fg` で復帰)
|
|
265
280
|
|
|
266
281
|
### Insert mode
|
|
267
282
|
|
|
@@ -272,6 +287,7 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
272
287
|
- `Esc`: Normal mode に戻る
|
|
273
288
|
- `Ctrl-c`: Normal mode に戻る(終了しない)
|
|
274
289
|
- 矢印キー: 移動
|
|
290
|
+
- `Ctrl-z`: shell へ suspend(`fg` で復帰)
|
|
275
291
|
|
|
276
292
|
### Visual mode(現状)
|
|
277
293
|
|
|
@@ -283,8 +299,20 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
283
299
|
- `d`: 選択範囲を delete
|
|
284
300
|
- `i`/`a` + object: text object を選択(`iw`, `aw`, `ip`, `ap`, `i"`, `a"`, ``i` ``, ``a` ``, `i)`, `a)`, `i]`, `a]`, `i}`, `a}`)
|
|
285
301
|
- `Esc` / `Ctrl-c`: Normal mode に戻る
|
|
302
|
+
- `Ctrl-z`: shell へ suspend(`fg` で復帰)
|
|
286
303
|
- blockwise の text object 選択 / paste の Vim 互換挙動は未対応
|
|
287
304
|
|
|
305
|
+
### Rich mode
|
|
306
|
+
|
|
307
|
+
- `:rich [format]` / `gr` で入る(トグル)
|
|
308
|
+
- 同一バッファ上で動作(仮想バッファを作らない)
|
|
309
|
+
- Normal mode とほぼ同じキーバインドが使える(移動・検索・yank 等)
|
|
310
|
+
- バッファを変更する操作(insert/delete/change/paste/replace)はブロック
|
|
311
|
+
- `Esc` / `Ctrl-C` で Normal mode に戻る
|
|
312
|
+
- ステータスラインに `-- RICH --` を表示
|
|
313
|
+
- 描画時に表示行をテーブル整形(`TableRenderer` を利用)
|
|
314
|
+
- wrap は強制 OFF
|
|
315
|
+
|
|
288
316
|
### Command-line mode
|
|
289
317
|
|
|
290
318
|
- `:` で入る
|
|
@@ -296,27 +324,53 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
296
324
|
- `Tab` (`Ctrl-i`) で Ex 補完
|
|
297
325
|
- コマンド名
|
|
298
326
|
- 一部引数(path / buffer / option)
|
|
327
|
+
- `Ctrl-z` で shell へ suspend(`fg` で復帰)
|
|
328
|
+
|
|
329
|
+
### Hit-enter prompt(複数行メッセージ表示)
|
|
330
|
+
|
|
331
|
+
`:ls` や `:set`(引数なし)など、複数行にわたる出力を行うコマンドの結果を表示するモード。
|
|
332
|
+
|
|
333
|
+
- 画面下部にメッセージ行をオーバーレイ描画
|
|
334
|
+
- 最下行に「Press ENTER or type command to continue」を反転表示
|
|
335
|
+
- ステータスラインは非表示(Vim と同様)
|
|
336
|
+
- 対象コマンド: `:ls` / `:buffers`, `:args`, `:set`(引数なし), `:command`(引数なし)
|
|
337
|
+
- 1行以下の出力時は通常の `echo` を使用
|
|
338
|
+
|
|
339
|
+
#### キー操作
|
|
340
|
+
|
|
341
|
+
- `Enter` / `Space` / `Escape` / `Ctrl-C` / その他のキー → dismiss(通常モードに戻る)
|
|
342
|
+
- `:` → dismiss して Command-line mode に入る
|
|
343
|
+
- `/` / `?` → dismiss して検索 Command-line mode に入る
|
|
299
344
|
|
|
300
345
|
## Ex コマンド仕様(現状 builtin)
|
|
301
346
|
|
|
302
347
|
- `:w [path]` / `:write [path]`
|
|
303
348
|
- `:q[!]` / `:quit[!]`
|
|
349
|
+
- `:qa[!]` / `:qall[!]`
|
|
304
350
|
- `:wq[!] [path]`
|
|
351
|
+
- `:wqa[!]` / `:wqall[!]` / `:xa[!]` / `:xall[!]`
|
|
305
352
|
- `:e <path>` / `:edit <path>`
|
|
306
353
|
- `:e[!] [path]` / `:edit[!] [path]`
|
|
307
354
|
- `:help [topic]`
|
|
308
355
|
- `:commands`
|
|
356
|
+
- `:bindings [mode]`
|
|
309
357
|
- `:command[!] <Name> <ex-body>`
|
|
310
358
|
- `:ruby <code>` / `:rb <code>`
|
|
359
|
+
- `:!<command>`
|
|
311
360
|
- `:ls` / `:buffers`
|
|
312
361
|
- `:bnext` / `:bn`
|
|
313
362
|
- `:bprev` / `:bp`
|
|
314
363
|
- `:buffer <id|name|#>` / `:b <id|name|#>`
|
|
364
|
+
- `:bdelete[!] [id|name|#]` / `:bd[!] [id|name|#]`
|
|
315
365
|
- `:split`
|
|
316
366
|
- `:vsplit`
|
|
317
367
|
- `:tabnew [path]`
|
|
318
368
|
- `:tabnext` / `:tabn`
|
|
319
369
|
- `:tabprev` / `:tabp`
|
|
370
|
+
- `:vimgrep`, `:lvimgrep`
|
|
371
|
+
- `:copen`, `:cclose`, `:cnext` / `:cn`, `:cprev` / `:cp`
|
|
372
|
+
- `:lopen`, `:lclose`, `:lnext` / `:ln`, `:lprev` / `:lp`
|
|
373
|
+
- `:rich [format]`
|
|
320
374
|
|
|
321
375
|
## 検索仕様(現状)
|
|
322
376
|
|
|
@@ -341,10 +395,20 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
341
395
|
- `:q` は未保存変更があると拒否
|
|
342
396
|
- `:q` は Vim 寄りに、複数 window 時は current window を閉じる(window が1つで tab が複数なら current tab を閉じる)
|
|
343
397
|
- `:q!` は強制的に window / tab / app を閉じる
|
|
398
|
+
- `:qa` は全ウィンドウ/タブを無視して一括終了(未保存バッファがあると拒否、`:qa!` で強制)
|
|
399
|
+
- `:wqa` は全バッファを保存して一括終了
|
|
344
400
|
- `:e` は未保存変更があると拒否(`!` で破棄可)
|
|
345
401
|
- `:e!`(引数なし)は現在ファイルの再読込(undo/redo クリア)
|
|
346
402
|
- `:buffer!`, `:bnext!`, `:bprev!` は未保存変更があっても切替
|
|
347
403
|
- `:w!` は現状 `:w` と同等に受理(権限昇格などは未実装)
|
|
404
|
+
- `:bindings` は current buffer 文脈の有効 key binding を layer 別(`buffer`, `filetype`, `app`)に一覧表示
|
|
405
|
+
- 任意で mode filter を受ける(例 `:bindings normal`)
|
|
406
|
+
- 大きいファイルを開くときは、閾値以上で段階読み込みになる場合がある
|
|
407
|
+
- status line に `[load/live]`(失敗時 `[load/error]`)
|
|
408
|
+
- デフォルト実装は先頭 `8MB` を先に表示し、残りをバックグラウンド読み込み後に反映
|
|
409
|
+
- 環境変数:
|
|
410
|
+
- `RUVIM_ASYNC_FILE_THRESHOLD_BYTES`
|
|
411
|
+
- `RUVIM_ASYNC_FILE_PREFIX_BYTES`
|
|
348
412
|
|
|
349
413
|
### `:command`(現状仕様)
|
|
350
414
|
|
|
@@ -362,7 +426,15 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
362
426
|
- `editor`
|
|
363
427
|
- `buffer`
|
|
364
428
|
- `window`
|
|
365
|
-
-
|
|
429
|
+
- `stdout` / `stderr` に出力があれば `[Ruby Output]` 仮想バッファに表示(返り値も表示)
|
|
430
|
+
- 出力がない場合、返り値をステータスラインに表示(`inspect`)
|
|
431
|
+
|
|
432
|
+
### `:!`(shell 実行, 最小)
|
|
433
|
+
|
|
434
|
+
- `:!<command>` で shell コマンドを同期実行
|
|
435
|
+
- `stdout` / `stderr` があれば `[Shell Output]` 仮想バッファに表示(終了ステータスを含む)
|
|
436
|
+
- 出力がない場合は `shell exit N` をステータス表示
|
|
437
|
+
- restricted mode(`-Z`)では禁止
|
|
366
438
|
|
|
367
439
|
### バッファ管理 Ex コマンド(現状仕様)
|
|
368
440
|
|
|
@@ -373,6 +445,7 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
373
445
|
- 数値ID
|
|
374
446
|
- パス名 / basename
|
|
375
447
|
- `#`(alternate buffer)
|
|
448
|
+
- `:bdelete` / `:bd` : バッファ削除(未保存は `!` 必須)
|
|
376
449
|
|
|
377
450
|
### alternate buffer(`#`)
|
|
378
451
|
|
|
@@ -380,6 +453,16 @@ RuVim::ExCommandRegistry.instance.register(
|
|
|
380
453
|
- バッファ切替時に直前バッファを更新
|
|
381
454
|
- `:buffer #` で切替可能
|
|
382
455
|
|
|
456
|
+
### arglist(引数リスト)
|
|
457
|
+
|
|
458
|
+
- `Editor#arglist` と `Editor#arglist_index` を保持
|
|
459
|
+
- 起動時に複数ファイル引数があるとarglistが初期化される
|
|
460
|
+
- 複数ファイル起動時、レイアウトオプション未指定でも全ファイルをバッファとして読み込む(`:ls` に表示される)
|
|
461
|
+
- `:args` : arglistを表示(現在の引数は `[filename]` で表示)
|
|
462
|
+
- `:next` / `:prev` : arglist内を移動
|
|
463
|
+
- `:first` / `:last` : arglistの最初/最後に移動
|
|
464
|
+
- arglist移動時にalternate bufferも更新される
|
|
465
|
+
|
|
383
466
|
## 画面描画仕様(現状)
|
|
384
467
|
|
|
385
468
|
ANSI エスケープシーケンスによる再描画です。
|
|
@@ -387,24 +470,31 @@ ANSI エスケープシーケンスによる再描画です。
|
|
|
387
470
|
- 代替スクリーン (`?1049h / ?1049l`)
|
|
388
471
|
- カーソル非表示/表示 (`?25l / ?25h`)
|
|
389
472
|
- 行キャッシュによる簡易差分描画(同サイズ時)
|
|
390
|
-
-
|
|
391
|
-
-
|
|
473
|
+
- フッターは 2 行固定:
|
|
474
|
+
- 最下段: command line / error message 用
|
|
475
|
+
- 1つ上: status line
|
|
476
|
+
- Command-line mode 時も status line は維持し、最下段だけを入力行として使う
|
|
392
477
|
- ファイル未指定起動時は Vim 風 intro screen を表示(RuVim では intro 用の read-only 特殊バッファ)
|
|
393
478
|
- カーソル位置の文字を反転表示(見やすさ向上)
|
|
394
479
|
|
|
395
|
-
### split UI
|
|
480
|
+
### split UI
|
|
396
481
|
|
|
397
482
|
- `:split` / `:vsplit` で複数 window を作成
|
|
398
|
-
-
|
|
399
|
-
- `
|
|
400
|
-
- `
|
|
401
|
-
-
|
|
483
|
+
- レイアウトはツリー構造(ネストした分割に対応)
|
|
484
|
+
- `hsplit`: 上下分割
|
|
485
|
+
- `vsplit`: 左右分割
|
|
486
|
+
- 例: vsplit 後に右ウィンドウを split すると、右カラムだけが上下分割される
|
|
487
|
+
- 同方向の分割は親ノードにマージ(hsplit の中で hsplit しても 1 レベルに統合)
|
|
488
|
+
- `close_window` でツリーを簡略化(子が 1 個になった分割ノードは子に置き換え)
|
|
489
|
+
- `focus_window_direction` は正規化座標空間で最近接ウィンドウを選択
|
|
402
490
|
- 各 window は cursor / scroll を独立して保持
|
|
403
491
|
|
|
404
492
|
### Tabpage(現状)
|
|
405
493
|
|
|
406
494
|
- `:tabnew [path]` で新しいタブを作成
|
|
407
495
|
- `:tabnext`, `:tabprev` で移動
|
|
496
|
+
- `:tabs` で全タブ一覧を表示(各タブのウィンドウとバッファ名)
|
|
497
|
+
- ステータスラインに `tab:n/m` を表示(タブが2つ以上のとき)
|
|
408
498
|
- 各タブは以下を独立に保持
|
|
409
499
|
- window list(表示中 window 群)
|
|
410
500
|
- current window
|
|
@@ -417,6 +507,12 @@ ANSI エスケープシーケンスによる再描画です。
|
|
|
417
507
|
- 入力待機は `stdin + resize通知` を `IO.select` で待つ
|
|
418
508
|
- 描画ごとに `winsize` を再取得して viewport を再計算
|
|
419
509
|
|
|
510
|
+
### suspend / resume(現状)
|
|
511
|
+
|
|
512
|
+
- `Ctrl-z` 入力は app レベルで処理し、モードに関係なく suspend する
|
|
513
|
+
- suspend 時は terminal を cooked + main screen に戻してから `SIGTSTP` を送る
|
|
514
|
+
- `fg` 復帰時は alt screen を再有効化し、`Screen` キャッシュを破棄して全面再描画する
|
|
515
|
+
|
|
420
516
|
### Command-line 改善(現状)
|
|
421
517
|
|
|
422
518
|
- prefix ごとの履歴保持(`:` `/` `?`)
|
|
@@ -501,12 +597,15 @@ Vim 完全互換ではなく、まずは扱いやすい粒度を優先した仕
|
|
|
501
597
|
- `diw`, `daw` : text object word(簡易)
|
|
502
598
|
- `di"`, `da"`, `di)`, `da)` : delimiter text object(簡易・同一行中心)
|
|
503
599
|
|
|
504
|
-
設計上は operator-pending 状態機械を導入しており、`d/y/c
|
|
600
|
+
設計上は operator-pending 状態機械を導入しており、`d/y/c/=` を同じ流れで扱います。
|
|
505
601
|
|
|
506
602
|
補足:
|
|
507
603
|
|
|
508
604
|
- 現状 `y` operator も実装済み(`yy`, `yw`)
|
|
509
605
|
- 現状 `c` operator も実装済み(`cw`, `cc`, `c$`, `ciw`, `caw` など)
|
|
606
|
+
- 現状 `=` operator も実装済み(`==`, `=j`, `=k`, `=G`, `=gg`、Visual `=`)
|
|
607
|
+
- Ruby filetype の場合にネスト構造に基づく自動インデントを適用
|
|
608
|
+
- 他の filetype はフォールバック(現在のインデント維持)
|
|
510
609
|
|
|
511
610
|
### text object(現状)
|
|
512
611
|
|
|
@@ -573,12 +672,12 @@ Vim 完全互換ではなく、まずは扱いやすい粒度を優先した仕
|
|
|
573
672
|
- `:set`
|
|
574
673
|
- `:setlocal`
|
|
575
674
|
- `:setglobal`
|
|
576
|
-
- 実装済み option
|
|
577
|
-
|
|
578
|
-
-
|
|
579
|
-
- `ignorecase`
|
|
580
|
-
-
|
|
581
|
-
-
|
|
675
|
+
- 実装済み option は `RuVim::Editor::OPTION_DEFS` に定義(現状 `49` 個)
|
|
676
|
+
- 代表例:
|
|
677
|
+
- window-local: `number`, `relativenumber`, `wrap`, `linebreak`, `breakindent`, `cursorline`, `scrolloff`, `sidescrolloff`
|
|
678
|
+
- global: `ignorecase`, `smartcase`, `hlsearch`, `incsearch`, `splitbelow`, `splitright`, `hidden`, `clipboard`, `timeoutlen`
|
|
679
|
+
- buffer-local: `tabstop`, `expandtab`, `shiftwidth`, `softtabstop`, `autoindent`, `smartindent`, `filetype`, `onsavehook`
|
|
680
|
+
- 詳細な一覧・実装状況は `docs/config.md` を参照
|
|
582
681
|
|
|
583
682
|
## Filetype / ftplugin(現状の基礎)
|
|
584
683
|
|
|
@@ -591,19 +690,82 @@ Vim 完全互換ではなく、まずは扱いやすい粒度を優先した仕
|
|
|
591
690
|
- `setlocal` / `setglobal` / `set`(DSL)で option 変更可
|
|
592
691
|
- 同一 buffer の同一 filetype ftplugin は一度だけ読み込む
|
|
593
692
|
|
|
693
|
+
## Lang モジュール on_save フック
|
|
694
|
+
|
|
695
|
+
- Lang モジュールに `on_save(ctx, path)` ライフサイクルフックを定義
|
|
696
|
+
- `:w` でファイル保存後、`onsavehook` オプションが有効(デフォルト `true`)なら `buffer.lang_module.on_save(ctx, target)` を呼び出す
|
|
697
|
+
- `Lang::Base.on_save` はデフォルトで何もしない(no-op)
|
|
698
|
+
- `Lang::Ruby.on_save` は `ruby -wc` で構文チェックを実行し、エラー/警告を quickfix list に展開する
|
|
699
|
+
- エラー出力を `filename:line:` 形式でパースし quickfix items に変換
|
|
700
|
+
- 複数エラー時はヒント `(]q to see next, N total)` を表示
|
|
701
|
+
- 正常時は quickfix list を空にクリアする
|
|
702
|
+
- `:set noonsavehook` で無効化可能
|
|
703
|
+
|
|
594
704
|
## シンタックスハイライト(最小)
|
|
595
705
|
|
|
596
706
|
- 描画時に filetype ごとの regex ベース highlighter を適用
|
|
597
707
|
- 現状の対応 filetype:
|
|
598
708
|
- `ruby`
|
|
599
709
|
- `json`
|
|
710
|
+
- `markdown`(見出し・フェンス・HR・ブロック引用・インライン装飾)
|
|
600
711
|
- 優先度(高 -> 低):
|
|
601
712
|
- cursor / visual
|
|
602
713
|
- search highlight
|
|
603
714
|
- syntax highlight
|
|
604
|
-
- 実装は `lib/ruvim/highlighter.rb`
|
|
715
|
+
- 実装は `lib/ruvim/highlighter.rb`(ディスパッチャ)+ `lib/ruvim/lang/markdown.rb`(言語固有ロジック)
|
|
605
716
|
- Vim の syntax / treesitter 相当の互換性はない(最小実装)
|
|
606
717
|
|
|
718
|
+
## Rich mode(構造化データ表示)
|
|
719
|
+
|
|
720
|
+
構造化データ(TSV/CSV)や Markdown を見やすく整形して表示するモードです。
|
|
721
|
+
Visual mode と同様に Normal mode の上に乗るモードとして設計されています。
|
|
722
|
+
|
|
723
|
+
- **アーキテクチャ**: filetype ごとにレンダラーを登録できる汎用フレームワーク
|
|
724
|
+
- `RuVim::RichView` モジュール(`lib/ruvim/rich_view.rb`)
|
|
725
|
+
- レンダラー登録: `RichView.register(filetype, renderer)`
|
|
726
|
+
- レンダラー: `TableRenderer`(TSV/CSV)、`MarkdownRenderer`(Markdown)
|
|
727
|
+
- **起動方法**:
|
|
728
|
+
- `:rich [format]` Ex コマンド(トグル)
|
|
729
|
+
- `gr` Normal mode キーバインド(トグル)
|
|
730
|
+
- **モード仕様**:
|
|
731
|
+
- 同一バッファ上で動作(仮想バッファを作成しない)
|
|
732
|
+
- `Editor#rich_state` に format/delimiter を保持
|
|
733
|
+
- Normal mode とほぼ同じキーバインドが使える(移動・検索・yank 等)
|
|
734
|
+
- バッファを変更する操作(insert/delete/change/paste/replace)はブロック
|
|
735
|
+
- `Esc` / `Ctrl-C` で Normal mode に戻る
|
|
736
|
+
- ステータスラインに `-- RICH --` を表示
|
|
737
|
+
- wrap は強制 OFF
|
|
738
|
+
- **レンダリング**:
|
|
739
|
+
- `Screen` の `plain_window_render_rows` で `editor.rich_mode?` を判定
|
|
740
|
+
- Rich mode の場合、表示行だけを `RichView.render_visible_lines` で整形
|
|
741
|
+
- バッファ内容は変更せず、描画パイプラインでの変換のみ
|
|
742
|
+
- `render_rich_view_line_sc` は ANSI エスケープシーケンスを幅ゼロとして扱い、横スクロール時もスタイルを正しく維持
|
|
743
|
+
- **横スクロール**:
|
|
744
|
+
- 表示カラム(display column)ベースでスクロール量を管理(`@rich_col_offset_sc`)
|
|
745
|
+
- `renderer.cursor_display_col` で raw バッファの `cursor_x` を整形後の表示カラムに変換し、スクロールオフセットを決定
|
|
746
|
+
- `render_rich_view_line_sc` で各行を同じ表示カラム数だけスキップして描画(CJK/ASCII 混在でも列揃えが保たれる)
|
|
747
|
+
- ワイド文字がビューポート左端をまたぐ場合はスペースで置換(部分表示は不可)
|
|
748
|
+
- カーソルの画面位置も整形後の表示カラム座標で計算
|
|
749
|
+
- **テーブルレンダラー仕様**:
|
|
750
|
+
- 区切り表示: ` | `(スペース+パイプ+スペース)
|
|
751
|
+
- 列幅は画面に見えている行だけから計算(大規模ファイルでも高速)
|
|
752
|
+
- CJK 文字の表示幅を `DisplayWidth.display_width` で正確に計算
|
|
753
|
+
- CSV は最小限の quoted field パース対応
|
|
754
|
+
- 列が1つしかない場合は元の行をそのまま返す
|
|
755
|
+
- **Markdown レンダラー仕様**:
|
|
756
|
+
- インラインマーカー(`#`, `**`, `*`, `` ` `` 等)は残し、ANSI スタイルを重ねる
|
|
757
|
+
- 見出し H1-H6: レベル別 bold + 色
|
|
758
|
+
- インライン装飾: `**bold**`, `*italic*`, `` `code` ``, `[text](url)`, チェックボックス
|
|
759
|
+
- コードブロック: `` ``` ``/`~~~` フェンスで状態追跡、内容を暖色表示
|
|
760
|
+
- コードフェンス状態は `pre_context_lines` で表示領域前の行から引き継ぎ
|
|
761
|
+
- テーブル: `|...|` パターンを検出し、列幅揃え + box-drawing 罫線(`│`, `─`, `┼`, `├`, `┤`)
|
|
762
|
+
- HR: `---`/`***`/`___` を `─` 線に置換
|
|
763
|
+
- ブロック引用: `>` で始まる行を cyan 表示
|
|
764
|
+
- テーブル行のカーソルマッピングはパディング後の位置を計算
|
|
765
|
+
- **filetype 検出**:
|
|
766
|
+
- `.tsv` → `tsv`, `.csv` → `csv`, `.md` → `markdown`
|
|
767
|
+
- `:rich`(引数なし)は filetype から判定、不明なら内容を見て自動推測
|
|
768
|
+
|
|
607
769
|
## シングルトン方針
|
|
608
770
|
|
|
609
771
|
グローバルに共有して良い「定義系」だけシングルトンにしています。
|
|
@@ -641,15 +803,15 @@ Vim 完全互換ではなく、まずは扱いやすい粒度を優先した仕
|
|
|
641
803
|
- `test/dispatcher_test.rb`
|
|
642
804
|
- `test/keymap_manager_test.rb`
|
|
643
805
|
|
|
644
|
-
## 既知の未実装 /
|
|
645
|
-
|
|
646
|
-
-
|
|
647
|
-
-
|
|
648
|
-
-
|
|
649
|
-
-
|
|
650
|
-
-
|
|
651
|
-
-
|
|
652
|
-
-
|
|
653
|
-
-
|
|
654
|
-
-
|
|
655
|
-
-
|
|
806
|
+
## 既知の未実装 / 今後の仕様候補(現状)
|
|
807
|
+
|
|
808
|
+
- 永続 undo(`undofile` / `undodir` 相当)
|
|
809
|
+
- session 保存/復元(`-S` / `:mksession` 相当の実体)
|
|
810
|
+
- `:grep` / `:make` / `:cfile` / `:lgrep` / `:lfile` など quickfix 入口
|
|
811
|
+
- Ex range/address(`:1,10d`, `:.,$s/.../.../` など)
|
|
812
|
+
- `:substitute` フラグ拡張(`c`, `i`, `I`, `n`, `e` など)
|
|
813
|
+
- arglist(複数ファイル起動 + `:args`, `:next`, `:prev` 等)
|
|
814
|
+
- `Ctrl-w` resize / close-others / equalize など window 操作拡張
|
|
815
|
+
- `:set` 高度構文(`+=`, `-=`, `:set all`, 短縮名)
|
|
816
|
+
- tag jump / folds / `:global` / `:normal`
|
|
817
|
+
- LSP / diagnostics / fuzzy finder など中長期機能
|
data/docs/todo.md
CHANGED
|
@@ -18,28 +18,144 @@
|
|
|
18
18
|
- `docs/config.md`
|
|
19
19
|
- `docs/vim_diff.md`
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## 直近の優先順(推奨)
|
|
22
|
+
|
|
23
|
+
1. Vim 互換性の精度向上(word/paste/visual/scroll 細部)
|
|
24
|
+
2. 永続化(`undofile` / session)
|
|
25
|
+
3. option system の残件(P0/P1 の `PARTIAL` を詰める)
|
|
26
|
+
4. P2 option(永続化/外部連携系)
|
|
27
|
+
5. P3 長期機能(LSP / fuzzy finder)
|
|
28
|
+
|
|
29
|
+
## 次の1週間の実装順(提案・改訂版)
|
|
30
|
+
|
|
31
|
+
### Day 1: quickfix を「使える入口」までつなぐ
|
|
32
|
+
|
|
33
|
+
- `[DONE]` `quickfix` / `location list` バッファで `Enter` ジャンプ
|
|
34
|
+
- qf 行フォーマット -> location 解決
|
|
35
|
+
- cursor 行の項目へ移動(window 復帰含む)
|
|
36
|
+
- docs 更新
|
|
37
|
+
- `docs/command.md`, `docs/vim_diff.md`
|
|
38
|
+
|
|
39
|
+
### Day 2: quickfix 入口コマンド(P0)
|
|
40
|
+
|
|
41
|
+
- `:grep`, `:lgrep`(外部 grep -> qf/loclist)
|
|
42
|
+
- `:cfile`, `:lfile`(ファイルから qf/loclist 読み込み)
|
|
43
|
+
- `:make` は `makeprg/errorformat` 最小の雛形まで(全部入りは後回し)
|
|
44
|
+
- まずは「動く最小」優先(精度は P2 option 実装と一緒に詰める)
|
|
45
|
+
|
|
46
|
+
### Day 3: Ex 基盤(range + substitute flags の前段)
|
|
47
|
+
|
|
48
|
+
- Ex 範囲指定(address / range)の基礎
|
|
49
|
+
- `.` / `%` / 行番号
|
|
50
|
+
- `:1,10d`, `:%y`, `:.,$...`
|
|
51
|
+
- `:substitute` の range 連携準備(既存 `:%s` パーサの拡張)
|
|
52
|
+
|
|
53
|
+
### Day 4: `:substitute` フラグ拡張 + scroll 細部
|
|
54
|
+
|
|
55
|
+
- `:substitute` フラグ(`i`, `I`, `n`, `e`, `c` の主要)
|
|
56
|
+
- `Ctrl-e` / `Ctrl-y` / `Ctrl-d` / `Ctrl-u` の細部調整
|
|
57
|
+
- count, 端での挙動, row_offset/cursor_y の整合
|
|
58
|
+
- docs 更新
|
|
59
|
+
- `docs/command.md`, `docs/binding.md`
|
|
60
|
+
|
|
61
|
+
### Day 5: paste / visual の互換性詰め
|
|
62
|
+
|
|
63
|
+
- `p`, `P` のカーソル位置ルール調整(charwise / linewise)
|
|
64
|
+
- Visual mode の端点/inclusive ルール整理
|
|
65
|
+
- Visual block の最小 blockwise paste(`p`)
|
|
66
|
+
- テスト追加(操作シナリオ + snapshot)
|
|
67
|
+
|
|
68
|
+
### Day 6: word motion 精度 + `iskeyword` 連携の詰め
|
|
69
|
+
|
|
70
|
+
- `w`, `b`, `e` の境界判定を Vim に寄せる
|
|
71
|
+
- `iskeyword` との整合(word motion / text object / `*`)
|
|
72
|
+
- 日本語/記号混在ケースの回帰テスト追加
|
|
73
|
+
|
|
74
|
+
### Day 7: 永続化の第一段(undofile 先行)
|
|
75
|
+
|
|
76
|
+
- `undofile`, `undodir` option 実体化
|
|
77
|
+
- 保存時/終了時の undo dump(最小)
|
|
78
|
+
- ファイル再オープン時の undo restore(path ベース)
|
|
79
|
+
- エラー時の degrade(読めない/壊れた undo file は無視してメッセージ)
|
|
80
|
+
- docs 更新
|
|
81
|
+
- `docs/config.md`, `docs/spec.md`, `docs/vim_diff.md`
|
|
82
|
+
|
|
83
|
+
### 次の週に回す候補(この週の続き)
|
|
84
|
+
|
|
85
|
+
- session file(`-S [session]` placeholder 実体化)
|
|
86
|
+
- `wrap` / `linebreak` / `breakindent` / `showbreak` の整合性
|
|
87
|
+
- `wildmenu` / `completeopt` / `pumheight` の UI コンポーネント寄せ
|
|
88
|
+
- arglist 残件(`:args/:next/:prev` の挙動精度向上)
|
|
89
|
+
|
|
90
|
+
### この順番の理由(依存)
|
|
91
|
+
|
|
92
|
+
- `quickfix` は既に内部モデルがあるので、入口(`Enter`, `:grep` 系)を先に作ると体験改善が大きい
|
|
93
|
+
- Ex range と `:substitute` flags は同じパーサ/Dispatcher 周辺を触るので連続でやる方が安全
|
|
94
|
+
- `paste/visual/word motion` は互換性テストをまとめて増やしやすい
|
|
95
|
+
- `undofile` は session より独立度が高く、先に基盤化するとその後の作業でも安全
|
|
96
|
+
|
|
97
|
+
## TODO Vim 互換性の精度向上(精度・挙動の詰め)
|
|
22
98
|
|
|
23
99
|
- Vim 互換性の精度向上(word motion / paste / visual 挙動)
|
|
24
100
|
- `w`, `b`, `e` の境界判定を Vim に寄せる
|
|
25
101
|
- `p`, `P` のカーソル位置ルールを調整
|
|
26
102
|
- Visual mode の端点/inclusive ルールを整理
|
|
103
|
+
- Visual block の blockwise paste / text object
|
|
104
|
+
- `Ctrl-e` / `Ctrl-y` / `Ctrl-d` / `Ctrl-u` の細部挙動(Vim との差分詰め)
|
|
105
|
+
|
|
106
|
+
## TODO Vim 差分で実用上効く追加機能(未着手)
|
|
107
|
+
|
|
108
|
+
### P0: すぐ効く(既存機能の入口/使い勝手を補う)
|
|
109
|
+
|
|
110
|
+
- quickfix / location list の入口コマンド拡張
|
|
111
|
+
- `:grep`, `:lgrep`(外部 grep -> qf/loclist)
|
|
112
|
+
- `:make`(`makeprg` + `errorformat` の最小連携)
|
|
113
|
+
- `:cfile`, `:lfile`(ファイルから qf/loclist 読み込み)
|
|
114
|
+
- Ex 範囲指定(address / range)の基礎
|
|
115
|
+
- `:1,10d`, `:%y`, `:.,$s/.../.../` など
|
|
116
|
+
- まずは行範囲 + 現在行 (`.`) + 全体 (`%`) を優先
|
|
117
|
+
- `:substitute` フラグ拡張(Ruby regex 方針のまま)
|
|
118
|
+
- `c`, `i`, `I`, `n`, `e` などの主要フラグ
|
|
119
|
+
- range 指定との組み合わせ
|
|
120
|
+
|
|
121
|
+
### P1: Vim 運用でよく触る基盤(あると詰まりにくい)
|
|
122
|
+
|
|
123
|
+
- `Ctrl-w` window 操作の拡張
|
|
124
|
+
- `Ctrl-w c`(window close)
|
|
125
|
+
- `Ctrl-w o`(only / 他 window を閉じる)
|
|
126
|
+
- `Ctrl-w =`(equalize)
|
|
127
|
+
- resize 系(`+`, `-`, `<`, `>`, `_`, `|` の最小)
|
|
128
|
+
- `:set` 構文の拡張
|
|
129
|
+
- `+=`, `-=`, `^=`, `&`, `<`
|
|
130
|
+
- option 名短縮(例: `nu`, `ts`)
|
|
131
|
+
- `:set all` / もう少し見やすい一覧表示
|
|
132
|
+
- register 拡張(実用寄り)
|
|
133
|
+
- `"-`(small delete register)
|
|
134
|
+
- delete/yank の register 更新ルールを Vim に寄せる
|
|
135
|
+
|
|
136
|
+
### P2: 中長期で効くが依存が広い
|
|
137
|
+
|
|
138
|
+
- tags / tag jump(最小)
|
|
139
|
+
- `Ctrl-]`, `Ctrl-t`, `:tag`, `:tselect`
|
|
140
|
+
- tags file 読み込み + jump stack
|
|
141
|
+
- Ex の追加制御コマンド
|
|
142
|
+
- `:global` / `:vglobal`
|
|
143
|
+
- `:normal` / `:normal!`
|
|
144
|
+
- folds(最小)
|
|
145
|
+
- `za`, `zc`, `zo`
|
|
146
|
+
- 表示・カーソル移動・検索の整合
|
|
27
147
|
|
|
28
148
|
## TODO 永続化
|
|
29
149
|
|
|
30
150
|
- 永続 undo / セッション
|
|
31
|
-
-
|
|
32
|
-
- session file(開いている buffer / cursor
|
|
151
|
+
- `undofile` / `undodir` 実体(保存・復元)
|
|
152
|
+
- session file(開いている buffer / cursor 位置 / tab/window レイアウト)
|
|
153
|
+
- `-S [session]` の実体化(現在 placeholder)
|
|
33
154
|
|
|
34
155
|
## TODO 長期(規模大)
|
|
35
156
|
|
|
36
157
|
### P3: 長期(人気はあるが規模大)
|
|
37
158
|
|
|
38
|
-
- LSP / diagnostics(中長期)
|
|
39
|
-
- language server 起動管理
|
|
40
|
-
- diagnostics 表示
|
|
41
|
-
- definition / references ジャンプ
|
|
42
|
-
|
|
43
159
|
- LSP diagnostics + jump(最小)
|
|
44
160
|
- 効果: 高
|
|
45
161
|
- コスト: 高
|
|
@@ -56,8 +172,65 @@
|
|
|
56
172
|
- grep/検索基盤
|
|
57
173
|
- preview(任意)
|
|
58
174
|
|
|
59
|
-
##
|
|
175
|
+
## TODO option system 拡張(残件のみ)
|
|
176
|
+
|
|
177
|
+
注記:
|
|
178
|
+
- 実装済みの `number`, `relativenumber`, `ignorecase`, `smartcase`, `hlsearch`, `tabstop`, `filetype` は除外
|
|
179
|
+
- 完了済みの option 実装は `docs/done.md` と `docs/config.md` を参照
|
|
180
|
+
- ここには `PARTIAL` / 未着手のみを残す
|
|
181
|
+
|
|
182
|
+
### P0: 日常編集の体験差が大きい(残件)
|
|
183
|
+
|
|
184
|
+
- `[PARTIAL]` `wrap`(長い行を折り返す)
|
|
185
|
+
- `[PARTIAL]` `linebreak`(単語境界寄りで折り返す)
|
|
186
|
+
- `[PARTIAL]` `breakindent`(折り返し行のインデント)
|
|
187
|
+
- 折り返し時の検索ハイライト/Visual/カーソル表示の整合性
|
|
188
|
+
- `showbreak` / `breakindent` との組み合わせ挙動
|
|
189
|
+
|
|
190
|
+
### P1: 使う人が多い / UI と編集体験を整える(残件)
|
|
191
|
+
|
|
192
|
+
- `[PARTIAL]` `showbreak`(折り返し行の先頭表示)
|
|
193
|
+
- `[PARTIAL]` `signcolumn`(サイン列の表示: `yes` の幅予約のみ)
|
|
194
|
+
- `[PARTIAL]` `matchtime`(`showmatch` のメッセージ表示時間に反映)
|
|
195
|
+
- `[PARTIAL]` `backspace`(Insert mode での BS 挙動: `start/eol` 最小)
|
|
196
|
+
- `[PARTIAL]` `whichwrap`(左右移動が行をまたぐ条件: `h/l` 最小)
|
|
197
|
+
- `[PARTIAL]` `virtualedit`(`onemore`, `all` の最小: 左右移動と描画)
|
|
198
|
+
- `[PARTIAL]` `iskeyword`(単語境界の定義: word motion / 補完 / 一部 textobj)
|
|
199
|
+
- `[PARTIAL]` `completeopt`(補完 UI の挙動: `menu/menuone/noselect` の最小)
|
|
200
|
+
- `[PARTIAL]` `pumheight`(補完候補 UI の高さ: メッセージ表示件数に反映)
|
|
201
|
+
- `[PARTIAL]` `wildmode`(コマンドライン補完の挙動: `list/full/longest` の最小)
|
|
202
|
+
- `[PARTIAL]` `wildmenu`(コマンドライン補完 UI: メッセージ行ベースの簡易表示)
|
|
203
|
+
- `[PARTIAL]` `path`(`gf` の最小パス探索)
|
|
204
|
+
- `[PARTIAL]` `suffixesadd`(`gf` の拡張子補完)
|
|
205
|
+
|
|
206
|
+
補足(P1 実装の観点):
|
|
207
|
+
- `PARTIAL` の定義は `docs/config.md` 側で詳細化する
|
|
208
|
+
- `signcolumn` は diagnostics/LSP と一緒に拡張する方が効率がよい
|
|
209
|
+
- `wildmenu` / `completeopt` / `pumheight` は UI コンポーネント化でまとめて詰める
|
|
210
|
+
|
|
211
|
+
### P2: 実用性は高いが依存が増えやすい / 実装範囲が広い
|
|
212
|
+
|
|
213
|
+
- `undofile`(永続 undo の ON/OFF)
|
|
214
|
+
- `undodir`(永続 undo の保存先)
|
|
215
|
+
- `updatetime`(アイドル更新間隔。診断/自動処理にも関係)
|
|
216
|
+
- `swapfile`(swap file の ON/OFF)
|
|
217
|
+
- `backup`(バックアップ保存)
|
|
218
|
+
- `writebackup`(書き込み時バックアップ)
|
|
219
|
+
- `autoread`(外部更新の再読込)
|
|
220
|
+
- `[PARTIAL]` `autowrite`(特定コマンド時の自動保存: buffer切替/`:e`/`gf`/`:tabnew` の最小)
|
|
221
|
+
- `confirm`(確認ダイアログ相当の確認フロー)
|
|
222
|
+
- `grepprg`(外部 grep コマンド)
|
|
223
|
+
- `grepformat`(grep 結果のパース形式)
|
|
224
|
+
- `makeprg`(外部 build コマンド)
|
|
225
|
+
- `errorformat`(quickfix のパース形式)
|
|
226
|
+
- `formatoptions`(自動整形/コメント継続の挙動)
|
|
227
|
+
- `textwidth`(自動改行幅)
|
|
228
|
+
- `spell`(スペルチェック ON/OFF)
|
|
229
|
+
- `spelllang`(スペルチェック言語)
|
|
230
|
+
- `[PARTIAL]` `termguicolors`(検索/`cursorline`/`colorcolumn` 背景色の最小 truecolor 対応)
|
|
231
|
+
|
|
232
|
+
## メモ(実装方針)
|
|
60
233
|
|
|
61
234
|
- Vim 完全互換の CLI を目指すより、よく使うフラグから互換寄りに実装する
|
|
62
235
|
- Ruby DSL 前提なので、Vim の `-u NONE` / `-U NONE` は RuVim 向けに意味を再定義してよい
|
|
63
|
-
|
|
236
|
+
- UI/Unicode/折り返し系は `TextMetrics` と `Screen` の責務を増やしすぎないように分割する
|
data/docs/tutorial.md
CHANGED
|
@@ -27,7 +27,7 @@ ruvim path/to/file.txt
|
|
|
27
27
|
- `-S Session.vim`(session startup placeholder。現状は未実装メッセージのみ)
|
|
28
28
|
- `-R`(readonly で開く。現在バッファの `:w` を拒否)
|
|
29
29
|
- `-M`(modifiable off 相当。編集操作を拒否し、あわせて readonly)
|
|
30
|
-
- `-Z`(restricted mode。config/ftplugin を読まず、`:ruby` を無効化)
|
|
30
|
+
- `-Z`(restricted mode。config/ftplugin を読まず、`:ruby` と `:!` を無効化)
|
|
31
31
|
- `-n`(現状 no-op。将来の swap/永続機能向け互換フラグ)
|
|
32
32
|
- `-o[N]` / `-O[N]` / `-p[N]`(複数ファイルを split / vsplit / tab で開く)
|
|
33
33
|
- `-V[N]` / `--verbose[=N]`(起動/設定/Ex のログを stderr に出す)
|