コンテンツにスキップ

Vim と Neovim ショートカット設定

概要

Vim 標準の基本ショートカットと、この環境の Neovim / LazyVim ショートカットをまとめる。

Neovim は ~/.config/nvim に設定があり、LazyVim ベースで動いている。

  • 起点: ~/.config/nvim/init.lua
  • LazyVim 読み込み: ~/.config/nvim/lua/config/lazy.lua
  • ユーザー定義キーマップ: ~/.config/nvim/lua/config/keymaps.lua
  • LSP 追加設定: ~/.config/nvim/lua/plugins/lsp.lua
  • Diffview 追加設定: ~/.config/nvim/lua/plugins/diffview.lua

lua/config/keymaps.lua は現在ほぼ空で、基本的なショートカットは LazyVim のデフォルト設定を使っている。

Vim 標準ショートカット

参考記事からの観点

参考: さっさと帰りたい怠け者エンジニアは vim をマスターしましょう その1 - 基本と移動

この記事では、Vim は大量のショートカットを一気に覚えるものではなく、作業パターンに沿って少しずつ体に覚えさせるものとして説明されている。

特に重視されているのは「移動」。 カーソルキーやマウスに頼らず、移動そのもののキータイプを減らすことで、編集全体の速度を上げる考え方。

覚える順番としては、以下が実用的。

  1. モード切り替え
  2. 保存・終了
  3. h / j / k / l の基本移動
  4. 画面単位・半画面単位の移動
  5. 行頭・行末・単語単位の移動
  6. f / t / % などの狙い撃ち移動

モード切り替え

キー モード 内容
i Normal カーソル位置の前から Insert
a Normal カーソル位置の後ろから Insert
I Normal 行頭から Insert
A Normal 行末から Insert
o Normal 下に新しい行を作って Insert
O Normal 上に新しい行を作って Insert
v Normal Visual
V Normal 行選択 Visual
<C-v> Normal 矩形選択 Visual
Esc Insert / Visual Normal に戻る
<C-c> Insert / Command Normal に戻る
: Normal コマンドライン

移動

キー モード 内容
h Normal / Visual 左へ移動
j Normal / Visual 下へ移動
k Normal / Visual 上へ移動
l Normal / Visual 右へ移動
w Normal / Visual 次の単語の先頭へ移動
b Normal / Visual 前の単語の先頭へ移動
e Normal / Visual 単語の末尾へ移動
0 Normal / Visual 行頭へ移動
^ Normal / Visual 行頭の非空白文字へ移動
$ Normal / Visual 行末へ移動
gg Normal / Visual ファイル先頭へ移動
G Normal / Visual ファイル末尾へ移動
{行番号}G Normal 指定行へ移動
H Normal / Visual 画面上部へ移動
M Normal / Visual 画面中央へ移動
L Normal / Visual 画面下部へ移動
{数値}j Normal / Visual 指定行数だけ下へ移動
{数値}k Normal / Visual 指定行数だけ上へ移動
{ Normal / Visual 上の空行へ移動
} Normal / Visual 下の空行へ移動
% Normal / Visual 対応する括弧へ移動
f{文字} Normal / Visual 行内の次の文字へ移動
t{文字} Normal / Visual 行内の次の文字の手前へ移動
F{文字} Normal / Visual 行内の前の文字へ移動
T{文字} Normal / Visual 行内の前の文字の手前へ移動
; Normal / Visual 直前の f / F / t / T を繰り返す
, Normal / Visual 直前の f / F / t / T を逆方向に繰り返す

画面スクロール

キー モード 内容
<C-f> Normal 1 画面分進む
<C-b> Normal 1 画面分戻る
<C-d> Normal 半画面分進む
<C-u> Normal 半画面分戻る
<C-y> Normal カーソル位置を保ったまま画面を上へスクロール
<C-e> Normal カーソル位置を保ったまま画面を下へスクロール
zt Normal カーソル行を画面上部へ移動
zz Normal カーソル行を画面中央へ移動
zb Normal カーソル行を画面下部へ移動

単語移動

キー モード 内容
w Normal / Visual 次の単語の先頭へ移動
b Normal / Visual 前の単語の先頭へ移動
e Normal / Visual 単語の末尾へ移動
W Normal / Visual 記号をまたいで次の単語の先頭へ移動
B Normal / Visual 記号をまたいで前の単語の先頭へ移動
E Normal / Visual 記号をまたいで単語の末尾へ移動

括弧ジャンプ

キー モード 内容
% Normal / Visual 対応する () / {} / [] へ移動
[{ Normal 外側の { へ移動
]} Normal 外側の } へ移動
[( Normal 外側の ( へ移動
]) Normal 外側の ) へ移動

編集

キー モード 内容
x Normal 1 文字削除
dd Normal 1 行削除
dw Normal 単語を削除
D Normal カーソル位置から行末まで削除
yy Normal 1 行コピー
yw Normal 単語をコピー
p Normal 後ろに貼り付け
P Normal 前に貼り付け
u Normal undo
<C-r> Normal redo
r{文字} Normal 1 文字置換
cw Normal 単語を変更
cc Normal 行全体を変更
ciw Normal カーソル位置の単語を変更
ci" Normal " の内側を変更
di" Normal " の内側を削除
. Normal 直前の変更を繰り返す

検索・置換

キー モード 内容
/文字列 Normal 前方検索
?文字列 Normal 後方検索
n Normal 次の検索結果
N Normal 前の検索結果
* Normal カーソル下の単語を前方検索
# Normal カーソル下の単語を後方検索
:%s/古い文字/新しい文字/g Command ファイル全体で置換
:%s/古い文字/新しい文字/gc Command 確認しながら置換

ファイル・終了

キー モード 内容
:w Command 保存
:q Command 終了
:wq Command 保存して終了
:q! Command 保存せず終了
:e {file} Command ファイルを開く
:bn Command 次のバッファ
:bp Command 前のバッファ
:bd Command バッファを閉じる

ウィンドウ

キー モード 内容
<C-w>s Normal 横分割
<C-w>v Normal 縦分割
<C-w>h Normal 左のウィンドウへ移動
<C-w>j Normal 下のウィンドウへ移動
<C-w>k Normal 上のウィンドウへ移動
<C-w>l Normal 右のウィンドウへ移動
<C-w>c Normal 現在のウィンドウを閉じる
<C-w>o Normal 現在のウィンドウ以外を閉じる
<C-w>= Normal ウィンドウサイズを揃える

Neovim / LazyVim ショートカット

Leader キー

キー 内容
<Space> leader
\ localleader

以降の <leader> は Space キーを意味する。

例: <leader>ff は Space のあとに ff と打つ。

この環境で追加されているショートカット

LSP

LSP が有効なバッファでは以下が設定される。

キー モード 内容
gd Normal 定義へジャンプ
gD Normal 宣言へジャンプ
gr Normal 参照一覧
K Normal hover 表示

Diffview

キー モード 内容
<leader>hd Normal 前のコミットとの差分を開く
<leader>hf Normal 現在ファイルの履歴を開く
<leader>hc Normal Diffview を閉じる

LazyVim デフォルトでよく使うショートカット

ファイル・検索

キー モード 内容
<leader><Space> Normal ルートディレクトリからファイル検索
<leader>ff Normal ルートディレクトリからファイル検索
<leader>fF Normal カレントディレクトリからファイル検索
<leader>fg Normal Git 管理ファイル検索
<leader>fr Normal 最近開いたファイル
<leader>fR Normal カレントディレクトリの最近開いたファイル
<leader>/ Normal grep
<leader>sg Normal ルートディレクトリで grep
<leader>sG Normal カレントディレクトリで grep
<leader>sk Normal キーマップ一覧
<leader>sh Normal ヘルプ検索
<leader>sd Normal 診断一覧

Explorer・バッファ

キー モード 内容
<leader>e Normal Explorer を開く
<leader>E Normal カレントディレクトリで Explorer を開く
<S-h> Normal 前のバッファへ移動
<S-l> Normal 次のバッファへ移動
[b Normal 前のバッファへ移動
]b Normal 次のバッファへ移動
<leader>bb Normal 直前のバッファへ切り替え
<leader>bd Normal バッファを削除
<leader>bo Normal 他のバッファを削除

ウィンドウ・タブ

キー モード 内容
<C-h> Normal 左のウィンドウへ移動
<C-j> Normal 下のウィンドウへ移動
<C-k> Normal 上のウィンドウへ移動
<C-l> Normal 右のウィンドウへ移動
<C-Up> Normal ウィンドウの高さを増やす
<C-Down> Normal ウィンドウの高さを減らす
<C-Left> Normal ウィンドウの幅を減らす
<C-Right> Normal ウィンドウの幅を増やす
<leader>- Normal 下に分割
<leader>\| Normal 右に分割
<leader>wd Normal ウィンドウを閉じる
<leader><Tab><Tab> Normal 新しいタブ
<leader><Tab>] Normal 次のタブ
<leader><Tab>[ Normal 前のタブ
<leader><Tab>d Normal タブを閉じる

編集・保存

キー モード 内容
<C-s> Insert / Visual / Normal / Select 保存
<Esc> Insert / Normal / Select 検索ハイライト解除と Escape
<A-j> Normal / Insert / Visual 行を下へ移動
<A-k> Normal / Insert / Visual 行を上へ移動
< Visual インデントを下げて選択維持
> Visual インデントを上げて選択維持
gc Normal / Visual コメント切り替え
gcc Normal 行コメント切り替え
gco Normal 下にコメント行を追加
gcO Normal 上にコメント行を追加

LSP・診断・フォーマット

キー モード 内容
<leader>cf Normal / Visual フォーマット
<leader>cd Normal カーソル行の診断を表示
[d Normal 前の診断へ移動
]d Normal 次の診断へ移動
[e Normal 前のエラーへ移動
]e Normal 次のエラーへ移動
[w Normal 前の警告へ移動
]w Normal 次の警告へ移動
gra Normal / Visual code action
grn Normal rename
grr Normal references
gri Normal implementation
grt Normal type definition

Git

キー モード 内容
<leader>gs Normal Git status
<leader>gd Normal Git diff hunks
<leader>gD Normal origin との差分
<leader>gl Normal Git log
<leader>gL Normal カレントディレクトリの Git log
<leader>gb Normal Git blame line
<leader>gf Normal 現在ファイルの履歴
<leader>gB Normal / Visual Git browse を開く
<leader>gY Normal / Visual Git browse の URL をコピー

Trouble・Quickfix

キー モード 内容
<leader>xx Normal 診断を Trouble で開く
<leader>xX Normal 現在バッファの診断を Trouble で開く
<leader>xq Normal Quickfix list
<leader>xl Normal Location list
[q Normal 前の Quickfix へ移動
]q Normal 次の Quickfix へ移動

ターミナル・セッション・その他

キー モード 内容
<leader>ft Normal ルートディレクトリでターミナル
<leader>fT Normal カレントディレクトリでターミナル
<C-/> Normal / Terminal ルートディレクトリでターミナル
<leader>l Normal Lazy を開く
<leader>cm Normal Mason を開く
<leader>qq Normal すべて終了
<leader>qs Normal セッション復元
<leader>qS Normal セッション選択
<leader>ql Normal 最後のセッションを復元

設定を追加する場所

独自ショートカットを追加する場合は、基本的に ~/.config/nvim/lua/config/keymaps.lua に書く。

leader キーは LazyVim デフォルトの Space を使っている。

例:

vim.keymap.set("n", "<leader>w", "<cmd>write<cr>", { desc = "保存" })
vim.keymap.set("n", "<leader>q", "<cmd>quit<cr>", { desc = "終了" })