vim のデフォルトキーマッピングのチートシート(ノーマルモード)


ノーマルモードのデフォルトのキーマッピング一覧

デフォルトのキーマッピングを一言で説明した表です

  • <C-a>コントロールキー + a という意味です.
  • g, z, Z, [, ], <c-w> は続くキー次第で内容が多岐にわたるので prefix とさせていただきました
  • word は空白もしくはアンダーバーを除く特殊文字で区切られたひと単語でを表現していて, WORD は空白区切りのひとまとまりを表現しています.
  • c, d, y は続くオペレーター(テキストオブジェクトや移動コマンド)によって動作が変わるので, 共通する動作 change, delete, yank と書きました.
キー 内容
a カーソルの後ろに挿入
A 行末に挿入
<C-a> インクリメント
b word のはじめに後方移動
B WORD のはじめに後方移動
<C-b> 1ページ上にスクロール
c change
C 行末まで変更
<C-c> 現在の(検索)コマンドを中止
d delete
D 行末まで削除
<C-d> 半ページ下にスクロール
e word の終わりに前方移動
E WORD の終わりに前方移動
<C-e> ページを下に1行スクロール
f 指定した char へ前方移動
F 指定した char へ後方移動
<C-f> 1ページ下にスクロール
g prefix
G 指定した行へジャンプ
<C-g> ステータスを表示
h カーソルを左へ移動
H 画面の1番上の行に移動
<C-h> カーソルを左に移動
i カーソルの前に挿入
I 行頭に挿入(非空白)
<C-i> <Tab> と同じキーコード
j カーソルを下に移動
J カーソル行と下の行を結合
<C-j> 1行下に移動
k カーソルを上に移動
K カーソル下の word を man
<C-k> ダイグラフの入力
l カーソルを右へ移動
L 画面の1番下の行に移動
<C-l> 画面を再描画
m マーク
M 画面の中央に移動
<C-m> <CR> と同じキーコード
n 前方の検索結果に移動
N 後方の検索結果に移動
<C-n> 次の行に移動
o カーソル行の下に行を挿入
O カーソル行の上に行を挿入
<C-o> 前のジャンプ位置にジャンプ
p 前方にペースト
P 後方にペースト
<C-p> 前の行に移動
q マクロ登録
Q Ex モードに切り替え
<C-q> ビジュアル矩形モード
r 1文字置き換え
R 置き換えモード
<C-r> やり直し
s 1文字削除して挿入モード
S 1行削除して挿入モード
<C-s> 特になし?
t 指定した char の前へ前方移動
T 指定した char の後へ後方移動
<C-t> 次のタグにジャンプ
u 取り消し
U 変更ありの取り消し
<C-u> 半ページ上にスクロール
v ビジュアルモード
V 1行ビジュアルモード
<C-v> 矩形ビジュアルモード
w word のはじめに前方移動
W WORD のはじめに前方移動
<C-w> ウィンドウ関連の prefix
x カーソル下の文字を削除
X カーソルの前の文字を削除
<C-x> ディクリメント
y yank
Y 1行ヤンク
<C-y> ページを上へ1行スクロール
z prefix
Z prefix
<C-z> vim をサスペンド
<Esc> <Esc>
<Tab> 次のジャンプ位置にジャンプ
<S-Tab> 特になし?
<BS> カーソルを左に移動
<CR> 下の行頭の非空白文字に移動
<Space> カーソルを右に移動
! 外部のプログラムを実行
@ マクロの再生
# カーソル下の単語を後方検索
$ 行末に移動
% 対応するかっこに移動
^ 行頭に移動(非空白)
& 置き換えを繰り返す
* カーソル下の単語を前方検索
( 文後方に移動
) 文前方に移動
0 行頭に移動(空白でも)
- 上の行頭の非空白文字に移動
_ -1 行下の非空白文字に移動
= インデントを揃える
+ 下の行頭の非空白文字に移動
\ デフォルト <LocalLeader>
| カーソル行の指定した列へ移動
` マーク位置へジャンプ
~ 大文字,小文字を切り替え
[ 後方移動系コマンドの prefix
] 前方移動系コマンドの prefix
{ 段落後方に移動
} 段落前方に移動
; f char の順方向繰り返し
: コマンドラインモード
' マーク位置の行頭へジャンプ
" レジスタの指定
, f char の逆方向繰り返し
. 繰り返し
< インデントを左にずらす
> インデントを右にずらす
/ 前方検索
? 後方検索
<Down> カーソルを下に移動
<Up> カーソルを上に移動
<Right> カーソルを右に移動
<Left> カーソルを左に移動
<S-Down> 1ページ下にスクロール
<S-Up> 1ページ上にスクロール
<S-Right> word のはじめに前方移動
<S-Left> word のはじめに後方移動
<C-Down> 特になし
<C-Up> 特になし
<C-Right> WORD のはじめに前方移動
<C-Left> WORD のはじめに後方移動
<C-S-Down> 特になし
<C-S-Up> 特になし
<C-S-Right> 特になし
<C-S-Left> 特になし
<C-@> <C-Space> と同じキーコード
<C-[> <C-#> <esc> と同じキーコード
<C-\> <C-$> 特になし?
<C-]> <C-%> カーソル下の定義にジャンプ
<C-^> 1個前のファイルに戻る
<C-_> <C-&> <C-/> 特になし?
<C-*> <BS> と同じキーコード

デフォルトのマッピングを調べる方法

コマンドラインで以下のコマンドを実行すればそのキーにどのような処理が割り当てられているか調べることができます.ちなみに hhelp という意味です.

以下のコマンドでノーマルモードで q Q <C-q> <Tab> を押したときの動作が調べられます.

:h q
:h Q
:h CTRL-q
:h <Tab>

以下のコマンドでインサートモードで <C-q> <Tab> を押したときの動作が調べられます.
(当たり前ですがインサートモードで q Q を押したときは q Q が入力されます)

:h i_CTRL-q
:h i_<Tab>

ビジュアルモードは上のコマンドの i_ の部分を v_ に変えれば調べることができます.
コマンドラインモードについても c_ に変えれば調べることができます.

マッピングについて

vim は ~/.vimrc に以下のような記述を(もしくはコマンドラインで実行)することで
<キー> を押したときに <処理> を実行することができます.

" ノーマルモード
nnoremap <キー> <処理>
" インサートモード
inoremap <キー> <処理>
" ヴィジュアルモード
xnoremap <キー> <処理>
" コマンドラインモード
cnoremap <キー> <処理>

詳しくは日本語ドキュメントを参照して欲しいのですが,ともかくあるキーに特定の処理をさせることができます.

nnoremapnmap とすると <処理> が再マップされ,マップを入れ子にしたり再帰的にすることができます.

しかし vim にはデフォルトでほとんどのキーに動作が割り振られています.よって自分のオリジナルマッピングの際にどのキーを使えばいいのかがわかりにくいです.表で使わないなと判断したキーにマッピングを割り振るといいと思います.