Neovim の編集操作、レジスタ、プロジェクト探索
このページの目次
編集は「どの範囲へ何をするか」を組み合わせると予測しやすい。大量のキーを先に覚えるより、基本操作をファイル探索へつなげる。
基礎は nvim --clean で練習できる。LazyVim やプラグインの上書きは :verbose nmap で調べる。
操作と範囲の組み合わせ
普通モードは命令、挿入モードは入力、可視モードは選択、: はコマンドラインを担当する。
| 入力 | 意味 |
|---|---|
i / a | カーソルの前/後へ挿入 |
ciw | 単語内部を変更 |
ci" | 二重引用符の内部を変更 |
dap | 段落と周辺範囲を削除 |
. | 直前の反復可能な編集を繰り返す |
u / Ctrl+r | 取り消し/やり直し |
ciw は c と iw の組み合わせである。編集後は Escape で戻り、結果を見る。局所的な文字編集はプロジェクト全体の参照を理解しないため、意味的な名前変更は LSPを使う。
削除後に貼り付け内容が変わる理由
既定ではコピー、削除、変更がレジスタへ影響する。内容を明示的に残すには名前付きレジスタを使う。
| 入力 | 作用 |
|---|---|
"ayy | 行を a へコピー |
"ap | a から貼り付け |
"_dd | 行を削除し内容を捨てる |
:registers | 中身を確認 |
"_ はブラックホールレジスタ。cutlass は一部の動作を変更するため導入前後を比較する。+ のシステム連携には provider が必要となる。遠隔入力
buffer、window、tabpage
buffer は文書、window はその表示領域、tabpage は窓の組である。同じ buffer を複数の窓で見られ、表示していない buffer も存在できる。
:edit notes.md
:vsplit notes.md
:ls
二つの窓は同じ文書を表示し、:ls が buffer 一覧を出す。片方での変更は同じ buffer に反映される。
Ctrl+w の後に h/j/k/l で移動、:close で窓を閉じ、:bnext で buffer を切り替える。窓を閉じてもファイルは削除されない。タブはプロジェクト、作業場所、LSP を自動隔離するものでもない。
検索から quickfix へ
文書内は /pattern と n/N。通常文字に近い検索には \V を使えるが、バックスラッシュには意味が残る。
Markdown が存在するプロジェクトルートで実行する。
:vimgrep /TODO/j **/*.md
:copen
quickfix はファイル、位置、メッセージを保存する。Enter で開き、:cnext / :cprevious で移動する。大きなリポジトリは生成物を無制限に走査せず、範囲を絞った rg や LazyVim の検索を使う。
picker はバージョンで変わるため which-key を確認する。現在ファイルのディレクトリとプロジェクトルートを区別する。
小さな編集課題
独立した notes.md を作る。
title = "draft"
TODO review the example
keep this line
remove this line
ci"で draft を ready に変える。- keep の行を a にコピーする。
- remove の行をブラックホールへ削除し、a から貼る。
- 貼り付けを取り消してやり直し、範囲を見る。
- 同じ buffer を二つの窓で表示して TODO を探す。
題名、レジスタ保持、両窓の内容を確認する。詳細は導入版と一致する :help text-objects、registers、windows、quickfix を読む。