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 は大量のショートカットを一気に覚えるものではなく、作業パターンに沿って少しずつ体に覚えさせるものとして説明されている。
特に重視されているのは「移動」。
カーソルキーやマウスに頼らず、移動そのもののキータイプを減らすことで、編集全体の速度を上げる考え方。
覚える順番としては、以下が実用的。
- モード切り替え
- 保存・終了
h / j / k / l の基本移動
- 画面単位・半画面単位の移動
- 行頭・行末・単語単位の移動
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 = "終了" })