Neovim の編集操作、レジスタ、プロジェクト探索

4 分で読了
このページの目次

編集は「どの範囲へ何をするか」を組み合わせると予測しやすい。大量のキーを先に覚えるより、基本操作をファイル探索へつなげる。

基礎は nvim --clean で練習できる。LazyVim やプラグインの上書きは :verbose nmap で調べる。

操作と範囲の組み合わせ

普通モードは命令、挿入モードは入力、可視モードは選択、: はコマンドラインを担当する。

入力意味
i / aカーソルの前/後へ挿入
ciw単語内部を変更
ci"二重引用符の内部を変更
dap段落と周辺範囲を削除
.直前の反復可能な編集を繰り返す
u / Ctrl+r取り消し/やり直し

ciw は c と iw の組み合わせである。編集後は Escape で戻り、結果を見る。局所的な文字編集はプロジェクト全体の参照を理解しないため、意味的な名前変更は LSPを使う。

削除後に貼り付け内容が変わる理由

既定ではコピー、削除、変更がレジスタへ影響する。内容を明示的に残すには名前付きレジスタを使う。

入力作用
"ayy行を a へコピー
"apa から貼り付け
"_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
  1. ci" で draft を ready に変える。
  2. keep の行を a にコピーする。
  3. remove の行をブラックホールへ削除し、a から貼る。
  4. 貼り付けを取り消してやり直し、範囲を見る。
  5. 同じ buffer を二つの窓で表示して TODO を探す。

題名、レジスタ保持、両窓の内容を確認する。詳細は導入版と一致する :help text-objects、registers、windows、quickfix を読む。