覚えやすくまとめたVimコマンド
はじめに
VSCodeが物足りない人へ AstroNvimの紹介という記事を読んでVSCodeからVim(Neovim)へ乗り換えようと思い立ったのですが、Vimコマンドがどうも自分には覚えずらかったのでこの記事を書きました。特に、初心者向けに有用なコマンドをまとめてある記事を読んだところ、それぞれのコマンドが関連性なく書いてあるように見えてしまい上手く頭に入ってこなかったので、できるだけ体系的に覚えられるよう各種コマンドを類別し、ニーモニック付きでVimコマンドについてまとめてみました。
ニーモニックについては、Vim Mnemonic | Vim のコマンドの覚え方大全からかなり多くを引用しています。とてもわかりやすい記事だったので、おすすめです。
コマンドの文法
[count]
[command]
:count回commandを行う
ただし、countは省略することができ、その場合は原則としてcountを1とみなした動作を行う。
種類
この記事ではコマンドを以下のように類別した。ただし、モーション・オペレータ・スクロールコマンド・Exコマンド以外の名称はオフィシャルなものでは可能性がある。特に編集コマンド・ビジュアルコマンド・ウィンドウコマンドは筆者の造語である。また、この類別は完全ではなく、ここで取り上げていないコマンドも数多く存在する。
- モーション
- 例:
h
,j
,k
,l
,w
,e
- カーソルの移動を行う
- 例:
- オペレータ
- 例:
d
,y
,c
- 目的語としてモーションやテキストオブジェクトをとり、一定の範囲に対してある操作を行う
- 例:
- 挿入コマンド
- 例:
i
,a
,o
- Insert Modeへ移行する
- 例:
- 編集コマンド
- 例:
p
,r
,x
- オペレータでも挿入コマンドでもないが、テキストの編集を行う
- 例:
- ビジュアルコマンド
- 例:
v
,V
- Visual Modeへ移行する
- 例:
- 検索コマンド
- 例:
/
,?
- 検索を行う
- 例:
- スクロールコマンド
- 例:
Ctrl-u
,Ctrl-d
- スクロールを行う
- 例:
- undo/redo
- 例:
u
,Ctrl-r
- undo/redo
- 例:
- Exコマンド
- 例:
:q
,:w
-
:
から始まる
- 例:
- ウィンドウコマンド
- 例:
Ctrl-w
h
,Ctrl-w
+
-
Ctrl-w
から始まり、ウィンドウを操作する
- 例:
モーション
hjkl
^
k
< h l >
j
v
gk
, gj
で表示行上の上下移動をすることができる。
左右の移動
key | description | mnemonic |
---|---|---|
0 |
行頭へ | 正規表現と同じ |
^ |
行頭の非空白文字へ | |
$ |
行末へ | 正規表現と同じ |
g_ |
行末の非空白文字へ | |
g^ g$
|
^ $ のスクリーン行ver |
|
gm |
スクリーン行の真ん中 | middle |
f{char} |
次の{char}へ | find {char} |
F{char} |
前の{char}へ | |
t{char} |
次の{char}の1文字左 | till {char} |
T{char} |
前の{char}の1文字右 | |
; |
最後のf ,F ,t ,T を繰り返す |
|
, |
最後のf ,F ,t ,T を逆方向に繰り返す |
上下の移動
key | description |
---|---|
gg |
ファイルの[count]行目 |
G |
ファイルの下から[count]行目 |
{num}% |
ファイル中の{num}%の位置 |
単語単位の移動
以下の表において、wordやWORDは次を意味する。
- word:
\w+
または[^\s\w]+
- WORD:
\S+
ただし、\w
は[0-9a-zA-Z_]
、\s
は空白文字、\S
は非空白文字を表す文字クラスである。
key | description | mnemonic |
---|---|---|
w |
次のwordの先頭へ | next word |
W |
次のWORDの先頭へ | next WORD |
e |
次のwordの末尾へ | end of next word |
E |
次のWORDの末尾へ | End of next WORD |
b |
前のwordの先頭へ | backward |
B |
前のWORDの先頭へ | Backward |
ge |
前のwordの末尾へ | |
gE |
前のWORDの末尾へ |
オブジェクト単位の移動
行・段落・セクションの定義はドキュメントを参照のこと。ただし、難しいので筆者は覚えないことにした。
key | description |
---|---|
( )
|
文の開始・終了 |
{ }
|
段落の開始・終了 |
[ ]
|
セクションの開始・終了 |
様々な移動
key | description | mnemonic |
---|---|---|
% |
対応する記号((){}[] )へ |
|
[ |
対応しない記号((){}[] )へ |
|
go |
ファイル先頭から[count]byte目 | go |
H |
スクリーン最上行から[count]行目 | h(←) |
M |
スクリーン中央へ | middle |
L |
スクリーン最下行から[count]行目 | l(→) |
オペレータ
文法
[operator]
[motion]|[text object]
:指定した範囲に対してoperatorの動作を行う
目的語としてmotionをとる場合は現在のカーソル位置からmotionで指定した動きで到達する場所までをoperatorの操作範囲とし、text objectの場合はtext objectの示す範囲を操作範囲とする。
また、operatorを二つ重ねると操作の対象が行になる。
operator
key | description | mnemonic |
---|---|---|
c |
削除してInsert Modeへ | change |
d |
削除 | delete |
y |
コピー | yank |
gu |
小文字化 | |
gU |
大文字化 | |
g~ |
大文字・小文字をトグル | |
> |
インデントを増やす | |
< |
インデントを減らす | |
zf |
折りたたみを作成 |
テキストオブジェクト
以下の表の記号にはa,iのどちらかが前につき、下のような意味を付与する。
-
a
: 囲い記号を含んだ全体(arround) -
i
: 囲い記号を含まず、その内部(inner)
key | description | mnemonic |
---|---|---|
w |
wordを選択 | word |
W |
WORDを選択 | WORD |
s |
文を選択 | sentence |
p |
段落を選択 | paragraph |
t |
HTML, XMLタグを選択 | tag |
b ( )
|
()ブロックを選択 | bracket |
B { }
|
{}ブロックを選択 | Bracket |
[ ]
|
[]ブロックを選択 | |
< >
|
<>ブロックを選択 | |
" ' `
|
引用符の中身を選択 |
テキストオブジェクトはビジュアルモードでも使用することができる。
レジスタ
"{レジスタ名}
をy
,d
,p
の前に入力することで、ヤンク・削除・プットの際に使用するレジスタを選択することができる。
name | register | description |
---|---|---|
削除用レジスタ | _ |
d などで結果を破棄する場合に用いる |
無名レジスタ | デフォルトのレジスタ | |
名前付きレジスタ |
a ~z
|
ユーザが自由に指定することができる |
レジスタの中身は:reg
コマンドで確認することができる。
挿入コマンド
key | description | mnemonic |
---|---|---|
i |
カーソルの前でInsert Modeへ | insert |
I |
行頭の非空白文字でInsert Modeへ | |
a |
カーソルの後ろでInsert Modeへ | append |
A |
行末でInsert Modeへ | |
o |
下に改行してInsert Modeへ | open line |
O |
上に改行してInsert Modeへ | |
gi |
最後に入力がされた場所でInsert Modeへ |
編集コマンド
key | description | mnemonic |
---|---|---|
C |
行末まで削除してInsert Mode | c$ |
D |
行末まで削除 | d$ |
Y |
行をコピー | yy |
p |
ペースト | put |
P |
カーソルの前にペースト | Put |
x |
カーソル下の文字を削除 | dl |
X |
カーソル前の文字を削除 | dh |
s |
カーソル下の文字を削除してInsert Modeへ | substitute |
S |
カーソル前の文字を削除してInsert Modeへ | |
r |
カーソル下の文字を置き換える | replace |
R |
置換モードへ | |
J |
行を連結する | Join |
Y
が行末までのコピーではないのは、viとの互換性のため。
ビジュアルコマンド
ビジュアルモードではノーマルモードのコマンドの多くを使うことができる。視覚的に領域を選択し、その領域に対してコマンドを適用するという使い方ができる。
key | description | mnemonic |
---|---|---|
v |
文字単位のVisual Modeへ | visual mode |
V |
行単位のVisual Modeへ | |
Ctrl-v |
矩形選択のVisual Modeへ | |
gv |
最後に使用したのと同じ範囲選択のVisual Modeへ | |
v_o |
選択されたテキストのもう一方の端へ移動する | Go to other end |
v_O |
v_o と同じ/矩形選択モードでは行内のもう一方のコーナーに移動 |
検索コマンド
key | description | mnemonic |
---|---|---|
/{word} |
{word}を前方検索 | |
?{word} |
{word}を後方検索 |
? = Shift +/
|
* |
カーソル下のwordを前方検索 | |
# |
カーソル下のwordを後方検索 | |
g* g#
|
* # の部分一致ver |
|
n |
次の検索対象へ | next |
N |
前の検索対象へ |
スクロールコマンド
上/下方スクロール
key | description | mnemonic |
---|---|---|
Ctrl-e |
下へ[count]行スクロール | extra line |
Ctrl-y |
上へ[count]行スクロール | |
Ctrl-d |
下に半ページスクロール | scroll downwards |
Ctrl-u |
下に半ページスクロール | scroll upwards |
Ctrl-f |
下に1ページスクロール | scroll forwards |
Ctrl-b |
下に1ページスクロール | scroll backwards |
カーソル相関スクロール
key | description | mnemonic |
---|---|---|
zt |
[count]行(省略時は現在行)をウィンドウの最上行に | top |
zz |
[count]行(省略時は現在行)をウィンドウの中央に | |
zb |
[count]行(省略時は現在行)をウィンドウの最下行に | bottom |
undo/redo
key | description | mnemonic |
---|---|---|
u |
変更を戻す | undo |
Ctrl-r |
undoされた変更を戻す | redo |
Exコマンド
ウィンドウ作成
key | description | no {file} | mnemonic |
---|---|---|---|
:new {file} |
ウィンドウを水平分割して{file}を開く | 空のウィンドウを開く | new |
:vnew {file} |
ウィンドウを垂直分割して{file}を開く | 空のウィンドウを開く | vertical new |
:e {file} |
{file}を開く | 現在のファイルを開く | edit |
:sp {file} |
ウィンドウを水平分割して{file}を開く | 現在のファイルを開く | split |
:vs {file} |
ウィンドウを垂直分割して{file}を開く | 現在のファイルを開く | vertical split |
:tabnew |
新しいタブを作成する |
よく使うExコマンド
key | description | mnemonic |
---|---|---|
:q |
ファイルを閉じる | quit |
:q! |
変更を保存せずファイルを閉じる | |
:w |
変更をファイルに反映 | write |
:wq |
保存してファイルを閉じる |
:q +:w
|
:!{cmd} |
外部コマンドを実行 | |
:r!{cmd} |
外部コマンドの結果をバッファに挿入 | |
:reg |
レジスタ一覧を表示 | register |
:his |
コマンド履歴を表示 | history |
置換コマンド
文法
:[range]s/{pattern}/{string}/[flags]
{pattern}にマッチする文字列を{string}に置換する。{range}で範囲を指定することができる。
ただしこれは簡略化したものなので、正確な情報については:substituteのドキュメントを参照のこと。
range
- 省略: カレント行のみ
-
%
: バッファ全体 - {開始行},{終了行}: 指定した範囲
-
.
: カレント行 -
$
: バッファ末尾
-
-
'<,'>
: Visual Modeで選択した範囲
flags
-
g
: 該当するもの全てを置換(global) -
c
: 置換の際に毎回確認を行う(confirm)- 応答
-
y
: 置換を行う(yes) -
n
: 置換を行わない(no) -
l
: 置換を行い終了する(last) -
a
: 以降の全ての置換を行う(all) -
q
: 置換を終了する(quit) -
Ctrl-e
: 画面を上にスクロールする -
Ctrl-y
: 画面を下にスクロールする
-
- 応答
-
i
: 大文字小文字を区別しない(ignore case)- デフォルトではこのフラグが有効
-
I
: 大文字小文字を区別する
フラグは全て併用可能である
コマンドラインモードでの編集
command | operation |
---|---|
Shift-→ |
次の単語に移動 |
Shift-← |
前の単語に移動 |
Ctrl-w |
単語を削除 |
Ctrl-u |
カーソルより前の単語すべて削除 |
Ctrl-e |
最後尾に移動 |
Ctrl-b |
先頭に移動 |
Ctrl-p Ctrl-n
|
履歴の呼び出し |
Ctrl-f |
コマンドラインウィンドウを開く |
Ctrl-r-レジスタ名 |
レジスタの内容を挿入する |
ウィンドウコマンド
ウィンドウ間の移動
command | operation | mnemonic |
---|---|---|
Ctrl-w h
|
右のウィンドウへ |
h のウィンドウver |
Ctrl-w j
|
下のウィンドウへ |
j のウィンドウver |
Ctrl-w k
|
上のウィンドウへ |
k のウィンドウver |
Ctrl-w l
|
左のウィンドウへ |
l のウィンドウver |
Ctrl-w t
|
一番上のウィンドウへ | top |
Ctrl-w b
|
一番下のウィンドウへ | bottom |
ウィンドウサイズ調整
command | operation | mnemonic |
---|---|---|
Ctrl-w +
|
現在のウィンドウの高さを[count]行高くする | + |
Ctrl-w -
|
現在のウィンドウの高さを[count]行低くする | - |
Ctrl-w >
|
現在のウィンドウの幅を[count]桁増やす | > |
Ctrl-w <
|
現在のウィンドウの高さを[count]桁減らす | < |
Ctrl-w =
|
全てのウィンドウの幅と高さをほぼ同じにする | = |
ウィンドウを閉じる
command | operation | last window | Exコマンド | mnemonic |
---|---|---|---|---|
Ctrl-w q
|
現在のウィンドウを閉じる | Vimを終了する | :q |
quit |
Ctrl-w c
|
現在のウィンドウを閉じる | 閉じることができない | :close |
close |
Ctrl-w o
|
現在のウィンドウ以外を閉じる | :only |
only |
タブの移動
command | operation |
---|---|
gt |
次のタブへ |
gT |
前のタブへ |
コマンドの変化規則
コマンドの変化について、規則的なものを以下にまとめる。
- 大文字化
- モーション
- word/WORD対応:
w
,b
,e
,ge
- 操作が逆になる:
f
,t
- word/WORD対応:
- オペレータ
- 行末まで(
$
)の操作になる:c
,d
- 逆向きの操作になる:
gu
- 行末まで(
- 挿入コマンド
- 行単位の操作になる:
i
,a
- 逆向きの操作になる:
o
- 行単位の操作になる:
- その他
- 逆向きの操作になる:
p
,x
,s
,v
,gt
,n
- 逆向きの操作になる:
- モーション
- オペレータコマンドを重ねる
- 行単位の操作になる
おわりに
この記事に挙げているコマンドはVimコマンドのごく一部なので、全てのコマンドを確認したい方はvimindexを参照してください。
筆者はVim初心者なので不正確な表現や間違った情報が含まれている可能性があります。その際は、お手数ですがコメントで指摘していただけると幸いです。
Discussion