VSCode で書いていたメモ・コードを Neovim に移行するにあたって、毎回参照したい基本操作を 1 ページにまとめた。Normal モードを起点に「モード切替 → 移動 → 編集 → 検索 → ファイル/ウィンドウ → レジスタ・マクロ」の順で並べている。
表記: <C-x> は Ctrl+x、<S-x> は Shift+x。{N} は数値プレフィックス(例: 5j で 5 行下)。
1. モード
Neovim はモード型エディタで、入力するキーが「コマンド」か「文字」かはモードで決まる。Normal が起点で、編集やコマンド実行のためにモードを切り替えて戻ってくるのが基本リズム。
| モード | 役割 | 入り方 | 戻り方 |
|---|
| Normal | 移動・操作の起点 | 起動直後 / <Esc> / <C-[> | — |
| Insert | 文字を挿入 | i a I A o O | <Esc> |
| Visual | 文字単位で範囲選択 | v | <Esc> |
| Visual Line | 行単位で範囲選択 | V | <Esc> |
| Visual Block | 矩形選択 | <C-v> | <Esc> |
| Command-line | : コマンド入力 | : | <Esc> / <CR> 実行 |
| Replace | 上書き入力 | R | <Esc> |
| Terminal | 内蔵ターミナル | :terminal | <C-\><C-n> |
つまずきポイント: Insert で :wq と打つと文字列として入ってしまう。保存する前に必ず <Esc> で Normal に戻る。
2. 起動と終了
| キー / コマンド | 動作 |
|---|
nvim | 空のバッファで起動 |
nvim file.md | ファイルを開いて起動 |
:w | 保存 |
:w newname.md | 別名で保存 |
:q | 終了(未保存変更があれば拒否) |
:q! | 変更を破棄して終了 |
:wq / :x | 保存して終了 |
ZZ | 保存して終了(Normal、:wq の短縮) |
ZQ | 保存せず終了(Normal、:q! の短縮) |
:e file | バッファに別ファイルを開く |
:e! | 編集中バッファをディスクから再読込 |
3. カーソル移動
{N} プレフィックスで「N 回繰り返す」になる(例: 10j で 10 行下)。
文字・行単位
| キー | 動作 |
|---|
h j k l | 左 / 下 / 上 / 右 |
0 | 行頭(列1) |
^ | 行頭(最初の非空白) |
$ | 行末 |
単語単位
| キー | 動作 |
|---|
w | 次の単語の先頭へ |
b | 前の単語の先頭へ |
e | 現在/次の単語の末尾へ |
W B E | 大文字版(空白区切りでより大きな単語) |
ファイル単位 / 画面スクロール
| キー | 動作 |
|---|
gg | ファイル先頭 |
G | ファイル末尾 |
{N}G / :{N} | N 行目へ |
<C-d> / <C-u> | 半画面下/上 |
<C-f> / <C-b> | 1 画面下/上 |
H M L | 画面上端/中央/下端へ |
zz | カーソル行を画面中央へ |
対応括弧・ジャンプ
| キー | 動作 |
|---|
% | 対応する () [] {} へジャンプ |
* | カーソル下の単語を前方検索 |
# | カーソル下の単語を後方検索 |
<C-o> | ジャンプ履歴を戻る |
<C-i> | ジャンプ履歴を進む |
4. 編集(Insert への入り方と削除/コピー/貼り付け)
Insert モードへ入る
| キー | 動作 |
|---|
i | カーソル位置の前から挿入 |
a | カーソル位置の後ろから挿入 |
I | 行頭(非空白)から挿入 |
A | 行末から挿入 |
o | 下に新規行を作って挿入 |
O | 上に新規行を作って挿入 |
削除 / 置換 / 取り消し
| キー | 動作 |
|---|
x | カーソル下の 1 文字削除 |
X | カーソル左の 1 文字削除 |
r{c} | カーソル下の 1 文字を c に置換 |
R | Replace モード(上書き入力) |
dd | 1 行削除 |
D | 行末まで削除(d$ と等価) |
C | 行末まで削除して Insert(c$ と等価) |
u | 取り消し(undo) |
<C-r> | 取り消しのやり直し(redo) |
. | 直前の編集を繰り返す |
コピー / 貼り付け(ヤンク)
| キー | 動作 |
|---|
yy | 1 行ヤンク |
yw | 1 単語ヤンク |
y$ | 行末までヤンク |
p | カーソル後ろに貼り付け |
P | カーソル前に貼り付け |
Normal モードの d c x も内部レジスタにヤンクされる(切り取り扱い)。
5. 演算子 + モーション + テキストオブジェクト
Vim/Neovim 編集の中核。{演算子}{モーション or テキストオブジェクト} の組み合わせで覚える。
| 演算子 | 動作 |
|---|
d | 削除(delete) |
c | 削除して Insert(change) |
y | ヤンク(yank) |
> < | インデント増/減 |
= | 自動インデント |
組み合わせ例:
| コマンド | 意味 |
|---|
dw | 単語を削除 |
d$ | 行末まで削除 |
c3w | 3 単語を削除して Insert |
y% | 対応括弧までヤンク |
テキストオブジェクト(i=内側 / a=外側)
| 対象 | inner | a |
|---|
| 単語 | iw | aw |
| 文 | is | as |
| 段落 | ip | ap |
"..." | i" | a" |
(...) | i( / ib | a( / ab |
{...} | i{ / iB | a{ / aB |
[...] | i[ | a[ |
<...> | i< | a< |
| HTMLタグ | it | at |
例:
| コマンド | 意味 |
|---|
di" | "..." の中身を削除 |
ci( | (...) の中身を削除して Insert |
yap | 段落を空行込みでヤンク |
cit | HTMLタグの中身を削除して Insert |
6. 検索と置換
検索
| キー | 動作 |
|---|
/pattern | 前方検索 |
?pattern | 後方検索 |
n | 次のマッチ(検索方向そのまま) |
N | 前のマッチ(検索方向逆) |
* | カーソル下単語を前方検索 |
# | カーソル下単語を後方検索 |
:noh | 検索ハイライトを消す |
置換
| コマンド | 動作 |
|---|
:s/old/new/ | 現在行で最初の 1 件を置換 |
:s/old/new/g | 現在行で全件置換 |
:%s/old/new/g | ファイル全体で全件置換 |
:%s/old/new/gc | ファイル全体、確認しながら置換 |
:'<,'>s/old/new/g | Visual 選択範囲で置換 |
/-検索は正規表現が効く。\v を頭につけると Perl 風の very magic モード(例: /\v(foo|bar))。
7. ビジュアルモード
| キー | 動作 |
|---|
v | 文字単位で選択開始 |
V | 行単位で選択開始 |
<C-v> | 矩形(ブロック)選択開始 |
o | 選択中、選択の始端/終端を入れ替え |
gv | 直前の選択範囲を再選択 |
選択中に使えるキー: d(削除) / y(ヤンク) / c(削除して Insert) / > <(インデント) / =(自動整形) / ~(大文字小文字反転)。
矩形選択 → I でブロック先頭にまとめて挿入、A でブロック末尾にまとめて挿入(複数行コメントアウト等)。
8. ファイル / バッファ / ウィンドウ / タブ
| 概念 | イメージ |
|---|
| バッファ | メモリに読み込まれた 1 ファイル |
| ウィンドウ | バッファを表示する画面分割 |
| タブ | ウィンドウのレイアウトのまとまり(VSCode のタブとは違う) |
バッファ
| コマンド | 動作 |
|---|
:e file | 新規バッファで開く |
:ls / :buffers | バッファ一覧 |
:bn / :bp | 次/前のバッファへ |
:b {番号 or 名前} | 指定バッファへ |
:bd | 現在のバッファを閉じる |
ウィンドウ分割
| コマンド / キー | 動作 |
|---|
:sp [file] / <C-w>s | 横分割 |
:vsp [file] / <C-w>v | 縦分割 |
<C-w>h/j/k/l | 隣のウィンドウへ移動 |
<C-w>w | 次のウィンドウへ循環 |
<C-w>= | サイズを均等化 |
<C-w>_ / ` | ` |
<C-w>c / :close | ウィンドウを閉じる |
<C-w>o / :only | 他のウィンドウを閉じる |
タブ
| コマンド / キー | 動作 |
|---|
:tabnew [file] | 新規タブ |
gt / gT | 次/前のタブへ |
:tabclose | タブを閉じる |
:tabs | タブ一覧 |
9. レジスタ / マーク / マクロ
レジスタ
| 記法 | 意味 |
|---|
"a | 名前付きレジスタ a (a-z で 26 個) |
"+ | システムクリップボード |
"0 | 直近のヤンク専用 |
"_ | ブラックホール(削除しても他レジスタを汚さない) |
:reg | レジスタ内容一覧 |
例:
| コマンド | 動作 |
|---|
"ayy | 行を a レジスタへヤンク |
"ap | a レジスタの内容を貼り付け |
"+y "+p | システムクリップボード経由でコピー/貼り付け |
"_dd | レジスタを汚さずに行削除 |
マーク(位置の栞)
| キー | 動作 |
|---|
m{a} | 現在位置を a に保存(a-z はバッファローカル、A-Z はグローバル) |
'a | a の 行 へジャンプ |
`a | a の 位置(行+列) へジャンプ |
:marks | マーク一覧 |
マクロ
| キー | 動作 |
|---|
q{a} | a レジスタへの記録開始 |
q | 記録停止 |
@{a} | a の記録を再生 |
@@ | 直前のマクロを再生 |
{N}@{a} | N 回再生(例: 100@a) |
10. よく使う : コマンド早見表
| コマンド | 動作 |
|---|
:help {topic} | ヘルプを引く(:h) |
:set number / :set nu | 行番号表示 |
:set relativenumber / :set rnu | 相対行番号 |
:set hlsearch / :noh | 検索ハイライト ON / 消去 |
:set ignorecase :set smartcase | 大文字小文字無視 / 賢く判定 |
:set wrap / :set nowrap | 折り返し ON/OFF |
:set list | 不可視文字を表示 |
:%y+ | ファイル全体をシステムクリップボードへヤンク |
:terminal / :term | 内蔵ターミナル起動 |
:source % | 現在ファイルを設定として読み込む |
:checkhealth | 環境診断(クリップボード/プロバイダ等) |
11. 初心者がつまずくポイント
| 症状 | 原因 / 対処 |
|---|
Insert モード中に :wq と打って wq が文字列として入った | <Esc> で Normal に戻る癖をつける。挿入直後に : を打ちたくなったら反射的に <Esc> |
q! のつもりが q で「変更があるため終了できません」と言われる | :q! で破棄、:wq で保存 |
| 削除すると毎回クリップボードが上書きされる | デフォルトで内部レジスタを使うので問題ないが、"_dd で「捨てる削除」も覚えておく |
| Visual で選んだ範囲を再度選びたい | gv で直前の選択を復元 |
| 画面分割で迷子になる | <C-w>w で循環移動、<C-w>= でサイズ均等化 |
Ctrl+S で保存しようとして端末が固まった(XOFF) | <C-q> で復帰。Neovim の保存は :w または ZZ |
| ヘルプの引き方がわからない | :h {キー} :h {コマンド} 例: :h CTRL-W :h :substitute |
変更履歴