Neovim(nvim)は、Vimをベースにした高機能なテキストエディタです。この記事では、日常的に使用するコマンドからおすすめのキーマップ設定まで、網羅的に紹介します。
モード切り替え
Neovimには複数のモードがあり、それぞれ異なる操作ができます。
| キー | 説明 |
|---|
i | カーソル位置でInsertモード |
a | カーソルの次でInsertモード |
I | 行頭でInsertモード |
A | 行末でInsertモード |
o | 下に新しい行を作成してInsertモード |
O | 上に新しい行を作成してInsertモード |
v | Visualモード(文字選択) |
V | Visual Lineモード(行選択) |
Ctrl+v | Visual Blockモード(矩形選択) |
Esc / Ctrl+[ | Normalモードに戻る |
カーソル移動
基本移動
| キー | 説明 |
|---|
h j k l | 左・下・上・右 |
w | 次の単語の先頭 |
b | 前の単語の先頭 |
e | 単語の末尾 |
W / B / E | WORD単位(空白区切り)で移動 |
ge | 前の単語の末尾 |
0 | 行頭 |
^ | 行頭(空白除く) |
$ | 行末 |
gg | ファイル先頭 |
G | ファイル末尾 |
{数字}G | 指定行へ移動 |
行内移動
| キー | 説明 |
|---|
f[char] | 行内で指定文字へ移動 |
t[char] | 行内で指定文字の手前へ移動 |
F[char] | 行内で指定文字を後方検索 |
T[char] | 行内で指定文字の後ろへ後方移動 |
; | 直前のf/t/F/Tを繰り返す |
, | 直前のf/t/F/Tを逆方向に繰り返す |
% | 対応する括弧へ移動 |
画面スクロール
| キー | 説明 |
|---|
Ctrl+e | 画面を1行下にスクロール(カーソル固定) |
Ctrl+y | 画面を1行上にスクロール(カーソル固定) |
Ctrl+d | 半画面下にスクロール |
Ctrl+u | 半画面上にスクロール |
Ctrl+f | 1画面下にスクロール(forward) |
Ctrl+b | 1画面上にスクロール(backward) |
zz | カーソル行を画面中央に |
zt | カーソル行を画面上部に(top) |
zb | カーソル行を画面下部に(bottom) |
画面内移動
| キー | 説明 |
|---|
H | 画面上部へ移動(High) |
M | 画面中央へ移動(Middle) |
L | 画面下部へ移動(Low) |
[n]H | 画面上からn行目へ |
[n]L | 画面下からn行目へ |
折り返し行での移動
| キー | 説明 |
|---|
gj | 表示行で1行下へ(折り返し対応) |
gk | 表示行で1行上へ(折り返し対応) |
g0 | 折り返し行の先頭へ |
g$ | 折り返し行の末尾へ |
ジャンプ移動
| キー | 説明 |
|---|
Ctrl+o | ジャンプリストを戻る |
Ctrl+i / Tab | ジャンプリストを進む |
g; | 変更リストを戻る(前の編集位置) |
g, | 変更リストを進む |
gi | 最後にInsertモードだった位置でInsertモード |
gv | 最後のVisual選択を再選択 |
`. | 最後に変更した位置へ |
'' | 直前のジャンプ位置の行へ |
段落・文移動
| キー | 説明 |
|---|
{ / } | 前/次の段落へ |
( / ) | 前/次の文へ |
[[ / ]] | 前/次のセクション・関数へ |
編集
基本編集
| キー | 説明 |
|---|
x | 1文字削除 |
dd | 行削除 |
dw | 単語削除 |
d$ / D | カーソルから行末まで削除 |
yy | 行コピー |
yw | 単語コピー |
p | カーソルの後にペースト |
P | カーソルの前にペースト |
cc | 行を削除してInsertモード |
cw | 単語を削除してInsertモード |
r[char] | 1文字置換 |
R | 上書きモード |
u | Undo |
Ctrl+r | Redo |
. | 直前の操作を繰り返す |
>> / << | インデント増減 |
J | 下の行と結合 |
~ | 大文字/小文字切り替え |
テキストオブジェクト
テキストオブジェクトは、Visual モードや d/c/y などの Operator と組み合わせて使用します。
| キー | 説明 |
|---|
iw | 単語(inner word) |
aw | 単語+空白(a word) |
i" / i' | クォート内 |
a" / a' | クォート含む |
i( / i) | 括弧内 |
i{ / i} | 中括弧内 |
i[ / i] | 角括弧内 |
it | タグ内(HTML) |
ip | 段落内 |
使用例:
di" → ダブルクォート内を削除
ci( → 括弧内を変更
yaw → 単語+空白をコピー
vip → 段落を選択
大文字・小文字変換
| キー | 説明 |
|---|
~ | カーソル下の文字を大文字/小文字切り替え |
gU[motion] | 大文字に変換 |
gu[motion] | 小文字に変換 |
検索・置換
検索
| コマンド | 説明 |
|---|
/[pattern] | 前方検索 |
?[pattern] | 後方検索 |
n | 次の検索結果 |
N | 前の検索結果 |
* | カーソル下の単語を前方検索 |
# | カーソル下の単語を後方検索 |
:noh | 検索ハイライト消去 |
検索マッチ操作
| キー | 説明 |
|---|
gn | 次の検索マッチを選択してVisualモード |
gN | 前の検索マッチを選択してVisualモード |
dgn | 次の検索マッチを削除 |
cgn | 次の検索マッチを変更 |
置換
| コマンド | 説明 |
|---|
:s/old/new/ | 現在行で置換(最初の1つ) |
:s/old/new/g | 現在行で全置換 |
:%s/old/new/g | ファイル全体で置換 |
:%s/old/new/gc | 確認付きで置換 |
ファイル操作
| コマンド | 説明 |
|---|
:w | 保存 |
:w [filename] | 名前を付けて保存 |
:q | 終了 |
:q! | 保存せず終了 |
:wq / :x / ZZ | 保存して終了 |
:e [filename] | ファイルを開く |
:r [filename] | ファイル内容を挿入 |
バッファ操作
| コマンド | 説明 |
|---|
:ls | バッファ一覧 |
:bn / :bp | 次/前のバッファ |
:bd | バッファを閉じる |
:b [name] | 指定バッファへ移動 |
ウィンドウ操作
分割
| コマンド | 説明 |
|---|
:sp / Ctrl+w s | 水平分割 |
:vsp / Ctrl+w v | 垂直分割 |
:sp [file] | ファイルを水平分割で開く |
:vsp [file] | ファイルを垂直分割で開く |
ウィンドウ間移動
| キー | 説明 |
|---|
Ctrl+w h | 左のウィンドウへ |
Ctrl+w j | 下のウィンドウへ |
Ctrl+w k | 上のウィンドウへ |
Ctrl+w l | 右のウィンドウへ |
Ctrl+w w | 次のウィンドウへ |
ウィンドウ位置変更
| キー | 説明 |
|---|
Ctrl+w H | 左端に移動 |
Ctrl+w L | 右端に移動 |
Ctrl+w J | 下端に移動 |
Ctrl+w K | 上端に移動 |
Ctrl+w x | 隣のウィンドウと入れ替え |
Ctrl+w r | ウィンドウを順方向に回転 |
ウィンドウサイズ変更
| キー | 説明 |
|---|
Ctrl+w = | 均等にする |
Ctrl+w > / < | 幅を広げる/狭める |
Ctrl+w + / - | 高さを広げる/狭める |
Ctrl+w _ | 高さを最大化 |
Ctrl+w | | 幅を最大化 |
ウィンドウを閉じる
| キー | 説明 |
|---|
Ctrl+w q / :q | 現在のウィンドウを閉じる |
Ctrl+w c | 現在のウィンドウを閉じる |
Ctrl+w o | 他のウィンドウを全て閉じる |
タブ操作
| コマンド | 説明 |
|---|
:tabnew | 新規タブ |
:tabnew [file] | ファイルを新規タブで開く |
gt / gT | 次/前のタブ |
:tabclose | タブを閉じる |
マクロ
| キー | 説明 |
|---|
q[a-z] | マクロ記録開始(レジスタ指定) |
q | マクロ記録終了 |
@[a-z] | マクロ実行 |
@@ | 直前のマクロを再実行 |
[n]@[a-z] | n回マクロ実行 |
マーク
| キー | 説明 |
|---|
m[a-z] | マークを設定(ファイル内) |
m[A-Z] | グローバルマークを設定 |
'[a-z] | マーク行へ移動 |
`[a-z] | マーク位置へ移動(列も含む) |
:marks | マーク一覧 |
折りたたみ(Fold)
| キー | 説明 |
|---|
zo | 折りたたみを開く |
zc | 折りたたみを閉じる |
za | 折りたたみをトグル |
zO | 再帰的にすべて開く |
zC | 再帰的にすべて閉じる |
zR | ファイル全体の折りたたみを開く |
zM | ファイル全体を折りたたむ |
zj / zk | 次/前の折りたたみへ移動 |
ターミナル
| コマンド | 説明 |
|---|
:terminal | ターミナルを開く |
Ctrl+\ Ctrl+n | ターミナルモードから抜ける |
その他便利なコマンド
| コマンド | 説明 |
|---|
:![cmd] | 外部コマンド実行 |
:read ![cmd] | コマンド出力を挿入 |
Ctrl+g | ファイル情報表示 |
ga | カーソル下の文字コード表示 |
gf | カーソル下のファイルを開く |
gx | カーソル下のURLを開く |
Ctrl+a / Ctrl+x | 数字をインクリメント/デクリメント |
:set number | 行番号表示 |
:set relativenumber | 相対行番号表示 |
おすすめキーマップ設定
以下は、Neovimをより快適に使うためのおすすめ設定です。
Leaderキーによるウィンドウ操作
Ctrl+w より押しやすい設定です。
vim.g.mapleader = " " -- スペースをLeaderに
vim.keymap.set('n', '<Leader>h', '<C-w>h') -- 左ウィンドウ
vim.keymap.set('n', '<Leader>j', '<C-w>j') -- 下ウィンドウ
vim.keymap.set('n', '<Leader>k', '<C-w>k') -- 上ウィンドウ
vim.keymap.set('n', '<Leader>l', '<C-w>l') -- 右ウィンドウ
vim.keymap.set('n', '<Leader>s', ':split<CR>') -- 水平分割
vim.keymap.set('n', '<Leader>v', ':vsplit<CR>') -- 垂直分割
vim.keymap.set('n', '<Leader>w', ':w<CR>') -- 保存
vim.keymap.set('n', '<Leader>q', ':q<CR>') -- 終了
インサートモードでのカーソル移動
Escを押さずにカーソル移動できます。
vim.keymap.set('i', '<C-h>', '<Left>')
vim.keymap.set('i', '<C-j>', '<Down>')
vim.keymap.set('i', '<C-k>', '<Up>')
vim.keymap.set('i', '<C-l>', '<Right>')
コメントトグル
Comment.nvim等のプラグインと組み合わせて使用します。
-- Ctrl+/ でコメントトグル
vim.keymap.set('n', '<C-_>', 'gcc', { remap = true })
vim.keymap.set('v', '<C-_>', 'gc', { remap = true })
LSPキーマップ
vim.keymap.set('n', 'gd', vim.lsp.buf.definition) -- 定義へ
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration) -- 宣言へ
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation) -- 実装へ
vim.keymap.set('n', 'gr', vim.lsp.buf.references) -- 参照を表示
vim.keymap.set('n', 'grt', vim.lsp.buf.type_definition) -- 型定義へ
vim.keymap.set('n', 'grn', vim.lsp.buf.rename) -- リネーム
vim.keymap.set('n', 'gra', vim.lsp.buf.code_action) -- コードアクション
vim.keymap.set('n', 'K', vim.lsp.buf.hover) -- ホバー情報
vim.keymap.set('n', '<C-W>d', vim.diagnostic.open_float) -- 診断表示
Telescope(ファジーファインダー)
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<Leader>p', builtin.find_files) -- ファイル検索
vim.keymap.set('n', '<Leader>g', builtin.live_grep) -- 文字列検索
vim.keymap.set('n', '<Leader>r', builtin.resume) -- 検索再開
vim.keymap.set('n', '<Leader>H', builtin.help_tags) -- ヘルプ検索
スクロール設定
:set scrolloff=5 " カーソル上下に常に5行表示
:set sidescrolloff=5 " 横スクロール時の余白
おすすめ設定 TOP5
| 優先度 | 設定 | 理由 |
|---|
| 1 | <Leader>h/j/k/l | ウィンドウ移動が格段に楽になる |
| 2 | <C-h/j/k/l> (Insert) | Escを押す回数が減る |
| 3 | Telescope | ファイル・文字列検索が高速 |
| 4 | <C-_> コメント | VSCode風でわかりやすい |
| 5 | LSPリネーム grn | リファクタリングに必須 |
参考文献
まとめ
Neovimは多くのコマンドがありますが、最初は基本的な移動(h j k l)、編集(i、dd、yy、p)、保存・終了(:w、:q)を覚えるだけで十分です。慣れてきたら、テキストオブジェクト、マクロ、LSP連携などを活用すると、編集効率が大幅に向上します。