--help, --version-f(follow mode: ファイルを開いて末尾から tail -f 相当の追従モードで起動)--clean-d(diff mode placeholder, 未実装メッセージ表示)-q {errorfile}(quickfix startup placeholder。現状は未実装メッセージ表示)-S [session](session startup placeholder, 未実装メッセージ表示)-R-M-Z-n(現状 no-op)-o[N], -O[N], -p[N]-V[N], --verbose[=N]--startuptime FILE--cmd {cmd}(user config 読み込み前に Ex 実行)-u {path|NONE}-c {cmd}+{cmd}, +{line}, +補足(現状挙動):
cmd | ruvim
stdin を follow stream として開く([stdin] バッファ)Ctrl-c で stream 停止(上流プロセスには直接 SIGINT は送らない)Ctrl-z
SIGTSTP)fg 復帰後は alt screen を再有効化し、画面を全面再描画する:w / :write:w [path]path 指定時はそのパスに保存! 対応: :w!(現状は保存メッセージに反映、権限昇格などは未実装):q / :quit:q, :q!! なしでは拒否:qa / :qall:qa, :qa!! なしでは拒否:wq:wq, :wq!, :wq [path]:q 相当(window / tab / app を閉じる):wqa / :wqall / :xa / :xall:wqa, :wqa!:e / :edit:e[!] [path]! なしで拒否:e! は未保存変更を破棄して開き直す(undo/redo もクリア)[load/live]8MB を先に表示して、残りを後から追加RUVIM_ASYNC_FILE_THRESHOLD_BYTESRUVIM_ASYNC_FILE_PREFIX_BYTES:help:help [topic]:help:help regex:help options:help w:commands:commands:bindings:bindings [mode]bufferfiletypeappmode は任意(例: normal, insert, visual_line, command_line。短縮形 n, i, v, c なども可):vimgrep /pattern/
:lvimgrep /pattern/
:copen / :cclose
qf バッファで開く / 閉じる:cnext / :cn, :cprev / :cp
:lopen / :lclose
:lnext / :ln, :lprev / :lp
:grep pattern [path...]
grepprg)を実行して quickfix list を作成*.txt 等)は Ruby の Dir.glob で展開-Z(restricted mode)では無効:lgrep pattern [path...]
grepprg)を実行して location list を作成:grep と同じセキュリティ仕様Enter : 選択項目へジャンプ(一覧ウィンドウから元の編集ウィンドウへ戻る):make, :cfile, :lfile は未実装:git:git <subcommand> [args...]-Z(restricted mode)では無効blame : 現在ファイルの git blame を表示(read-only バッファ)
p 親コミットの blame / P 前の blame へ戻る / c コミット詳細status : git status を表示diff : git diff を表示log : git log を表示branch : ブランチ一覧を表示
Enter で :git checkout <branch> をコマンドラインにプリセット(確認ステップあり)checkout <branch> : 指定ブランチへチェックアウトcommit : コミットメッセージ入力バッファを開くgrep <pattern> [args...] : git grep -n を実行、結果バッファで Enter ジャンプ:! と同様に alternate screen でシェル実行(例: :git stash, :git rebase -i)Esc / Ctrl-c で閉じるgit help -a の出力から全サブコマンドを補完候補として提示(セッション内キャッシュ):gh:gh <subcommand> [args...]-Z(restricted mode)では無効link : 現在ファイル/選択範囲の GitHub URL を生成してクリップボードにコピーbrowse : 現在ファイルの GitHub URL をブラウザで開くpr : 現在ブランチの PR ページをブラウザで開く:! と同様に alternate screen でシェル実行(例: :gh issue list)gh help の出力からサブコマンドを補完候補として提示(セッション内キャッシュ):rich:rich [format]format に tsv または csv を指定可能(省略時は filetype / 内容から自動判定)| 区切り文字は ` | `(スペース+パイプ+スペース) |
Esc / Ctrl-C で Normal mode に戻る:filter:filter [/pattern/]:filter や g/ を使うと再帰的に絞り込める:q でフィルタバッファを閉じて前のバッファに戻るgr でテーブル表示可能)g/ キーバインドで実行可能:follow:followtail -f 相当)G で末尾に移動すれば追従が再開される:follow を再度実行すると停止Ctrl-C(ノーマルモード)で follow を停止[follow] と表示される(inotify 使用時は [follow/i]):e! で再読み込み可能):command:command Name ex_body:command! Name ex_body(上書き):command(引数なし)でユーザー定義コマンド一覧を表示:ruby / :rb:ruby <code>:rb <code>stdout / stderr に出力があった場合は [Ruby Output] 仮想バッファに表示(返り値も末尾に表示)ctx, editor, buffer, window:r / :read(ファイル・コマンド出力の挿入):r <file> または :r !<command>:3r file.txt(3行目の下に挿入):r !command で stderr が出た場合、最初の行をエラーメッセージとして表示します:w !(バッファ内容をコマンドへパイプ):w !<command> または :'<,'>w !<command>:w !wc -l(行数カウント)、:'<,'>w !sort(選択範囲をソート):!(shell 実行):!<command>shell exit N をステータス表示-Z(restricted mode)では無効:run(コマンド実行+結果バッファ):run [command][Shell Output] バッファにストリーム表示(PTY 経由でリアルタイム)[Shell Output] バッファは read-only で、最大1つ(再利用される)% は現在のファイル名に展開されるrunprg オプションの値を使用[run] command、完了後は [run/exit N] command)Ctrl-C で実行中のプロセスを停止runprg オプション: ファイルタイプごとのデフォルト実行コマンド
ruby -w %python3 %gcc -Wall -o /tmp/a.out % && /tmp/a.outg++ -Wall -o /tmp/a.out % && /tmp/a.outgosh %node %:ls / :buffers:ls:buffers%=current, #=alternate, +=modified のフラグを含む:bnext / :bn:bnext! 対応(未保存変更を無視して切替):bprev / :bp:bprev! 対応(未保存変更を無視して切替):buffer / :b:buffer <id|name|#>#(alternate)で切替! 対応(未保存変更を無視して切替):bdelete / :bd:bdelete [id|name|#]! 対応(未保存変更バッファを破棄):args:args[filename] 形式で表示される:next:next:prev:prev:first:first:last:last:split:split:vsplit:vsplit:tabnew:tabnew [path]path 指定時はそのファイルを開く:tabnext / :tabn:tabnext:tabprev / :tabp:tabprev:tabs:tabs> マーカーで示す:p / :print:{range}p:global のデフォルトコマンド:nu / :number:{range}nu:d / :delete:d [count], :{range}d:y / :yank:y [count], :{range}y:m / :move:{range}m {address}:{range}m$ で末尾に移動、:{range}m0 で先頭に移動:t / :copy / :co:{range}t {address}:j / :join:{range}j:> / :<:{range}>, :{range}<shiftwidth 分だけ右/左にシフトする:normal / :norm:{range}normal {keys}:g/pattern/normal A; のように :global と組み合わせて使える内部コマンドは主に key binding から使われ、RuVim::CommandRegistry に登録されます。
cursor.leftcursor.rightcursor.upcursor.downcursor.line_startcursor.line_endcursor.first_nonblankcursor.buffer_startcursor.buffer_endcursor.word_forwardcursor.word_backwardcursor.word_endmode.insertmode.appendmode.append_line_endmode.insert_nonblankmode.open_belowmode.open_abovemode.visual_charmode.visual_linewindow.splitwindow.vsplitwindow.focus_nextwindow.focus_leftwindow.focus_rightwindow.focus_upwindow.focus_downtab_newtab_nexttab_prevmode.command_linemode.search_forwardmode.search_backwardbuffer.delete_charbuffer.delete_linebuffer.delete_motionbuffer.change_motionbuffer.change_linebuffer.yank_linebuffer.yank_motionbuffer.paste_afterbuffer.paste_beforebuffer.visual_yankbuffer.visual_deletebuffer.undobuffer.redosearch.nextsearch.preveditor.buffer_nexteditor.buffer_prevbuffer.replace_charbuffer.substitute_charbuffer.swapcase_charbuffer.join_linesbuffer.indent_linesbuffer.indent_motionbuffer.visual_indentbuffer.visual_select_text_objectmode.visual_blockcursor.page_up / cursor.page_downcursor.page_up.default / cursor.page_down.defaultcursor.page_up.half / cursor.page_down.halfcursor.match_bracketwindow.scroll_up / window.scroll_downwindow.scroll_up.line / window.scroll_down.linewindow.cursor_line_top / window.cursor_line_center / window.cursor_line_bottomwindow.focus_or_split_left / window.focus_or_split_right / window.focus_or_split_up / window.focus_or_split_downnormal.register_pending_startnormal.operator_delete_start / normal.operator_yank_start / normal.operator_change_start / normal.operator_indent_startnormal.replace_pending_startnormal.find_char_forward_start / normal.find_char_backward_start / normal.find_till_forward_start / normal.find_till_backward_startnormal.find_repeat / normal.find_repeat_reversenormal.change_repeatnormal.macro_record_toggle / normal.macro_play_pending_startnormal.mark_pending_startnormal.jump_mark_linewise_pending_start / normal.jump_mark_exact_pending_startquickfix.next / quickfix.prev / quickfix.openstdin.stream_stopui.clear_messagerich.toggle検索は Ex コマンドではなく、command-line prefix / ? を使う入力経路です。
/pattern : 前方検索?pattern : 後方検索n : repeatN : reverse repeat* / # : カーソル下の単語検索(単語境界)g* / g# : カーソル下の単語検索(部分一致):vimgrep / :lvimgrep : 検索結果を quickfix/location list に積む:nohlsearch (:noh) : 検索ハイライトを一時的にクリア(次の検索で自動復帰):%s/.../.../[flags]:{range}s/.../.../)g(全置換), i(大文字小文字無視), I(大文字小文字区別), n(置換せずマッチ数表示), e(エラー抑制)c(確認)フラグ: y/n/a/q/l/Esc 対応:global / :vglobal:[range]g/pattern/command, :[range]v/pattern/commandg! は :vglobal と同義:v の場合はマッチしない)全行に対して Ex コマンドを実行:p(print)扱い:global / :vglobal のフルネーム形式にも対応u で全変更を元に戻せる)現状は delete / yank operator を実装:
d + motiony + motion(現状 yy, yw)c + motion / ccbuffer.delete_motiondd は linewise delete として扱うiw, aw, ip, ap(簡易)i", a", i`, a`(簡易)i), a), i], a], i}, a}(簡易)d, y, c から利用可能v / V / Ctrl-v で characterwise / linewise / blockwise Visual modebuffer.visual_yankbuffer.visual_deletey/d)Ctrl-z で shell へ suspend(fg で復帰). : 直前変更の repeat(拡張版)xdd, d{motion}p, Pr<char>i, a, A, I, o, O(Insert 入力列)cc, c{motion}(text object を含む). を押した場合、内部で再生されるキーは macro に混ざらない")、named register("a.."z)、append("A.."Z)"_)01-9(簡易回転)"+, "* は system clipboard register(利用可能環境のみ)p, P で paste(register prefix 対応):set, :setlocal, :setglobalnumber(window-local / 行番号表示)relativenumber(window-local / 相対行番号)ignorecase / smartcase / hlsearch(global / 検索系)tabstop(buffer-local / タブ展開幅)filetype(buffer-local / 自動検出 + ftplugin 用):w など)と内部コマンド名(file_write / buffer.undo など)を分離Symbol ベースで RuVim::GlobalCommands のメソッドに実装Proc の登録も可能KeymapManager の layered resolution(filetype / buffer / mode / global)で解決$XDG_CONFIG_HOME/ruvim/init.rb または ~/.config/ruvim/init.rb)から ConfigDSL 経由で command / ex command / key binding を追加可能Screen は行キャッシュを使った簡易差分描画を行うSIGWINCH + self-pipe + IO.select で入力待機中でもリサイズに即追従Ctrl-z suspend/fg 復帰後は Screen キャッシュを破棄し、全面再描画するCtrl-n / Ctrl-p の buffer words 補完を持つDisplayWidth の近似実装(tab 展開 + 一部全角幅2)Minitesttest/buffer_test.rbtest/dispatcher_test.rbtest/keymap_manager_test.rb