Vimの使い方

2013年1月10日

Vim

Vimの使い方を整理しました。使用頻度の低い機能はド忘れするので、自分用の備忘録です。

この記事の書式

  1. yy と書かれている場合、y キーを 2 回連続で押下することを意味します
  2. C-a と書かれている場合、control キーを押しながら a キーを押すことを意味します

目次

  1. ノーマルモードのカーソル移動
  2. ノーマルモードへ移動
  3. 挿入モード
  4. 削除
  5. 削除して挿入モードへ移動
  6. コピー
  7. 貼り付け
  8. インデント
  9. やりなおし
  10. 大文字小文字変換
  11. 更新
  12. ビジュアルモード
  13. 矩形選択モード
  14. 検索
  15. 置換
  16. 正規表現
  17. スクロール
  18. ウィンドウ
  19. タブ
  20. 折りたたみ
  21. diff
  22. レジスタ
  23. テキストオブジェクト
  24. マーク
  25. マクロ
  26. 履歴
  27. プラグインを書く時によく見るヘルプ

ノーマルモードのカーソル移動

モーションともいいます。詳細は :help motion.txt を参照。

モーションキーの前に数字を入力すると、数字の回数だけモーションを繰り返します。例えば、5j で 5 行下に移動します。

h
左へ移動

j
下へ移動

k
上へ移動

l
右へ移動

w
次の単語の先頭へ移動

b
前の単語の先頭へ移動

e
次の単語の末尾へ移動

W
次のスペースの末尾へ移動

B
前のスペースの末尾へ移動

^
行頭へ移動(インデント考慮)

0
行頭へ移動(インデント無視)

$
行末へ移動

gg
先頭に移動

G
行末に移動

10G
10行目へ移動

H
ウィンドウ内の先頭行へ移動

L
ウィンドウ内の末尾行へ移動

M
ウィンドウ内の中央へ移動

%
対応する括弧に移動

[(
外側にある一番近くの ( へ移動

])
外側にある一番近くの ) へ移動

[{
外側にある一番近くの { へ移動

]}
外側にある一番近くの } へ移動

f{char}
カーソルの右側にある {char} 文字に移動

F{char}
カーソルの左側にある {char} 文字に移動

t{char}
カーソルの右側にある {char} 文字の直前に移動

T{char}
カーソルの左側にある {char} 文字の直前に移動

;
上記 f, F, t, T キーによる移動を繰り返す

,
上記 f, F, t, T キーによる移動を逆方向に繰り返す

C-o
カーソル履歴のひとつ前に戻る(履歴が残るモーションは :help jump-motions を参照)

C-i
カーソル履歴のひとつ先に進む

ノーマルモードへ移動

挿入モードなど、各種モードからノーマルモードへ移動。

Esc または C-[
ノーマルモードへ移動

挿入モード

i
カーソルの位置で挿入モードへ移動

I
行頭で挿入モードへ移動

a
カーソルの次の位置で挿入モードへ移動

A
行末尾で挿入モードへ移動

o
下に行を追加して挿入モードへ移動

O
上に行を追加して挿入モードへ移動

C-o{motion}
挿入モードで、一度だけノーマルモードのモーションを実行して再び挿入モードに戻る

削除

削除した文字はレジスタに入り、後から貼り付けできます。削除というよりは切り取りのイメージです。

詳細は :help deleting を参照。

x
カーソル位置の右の文字を削除

X
カーソル位置の左の文字を削除

dd
カーソル行を削除

D
カーソル位置から行末までを削除

J
行を連結する

削除して挿入モードへ移動

詳細は :help delete-insert を参照。

cc
行を削除して挿入モードへ

C
カーソル位置から行末まで削除して挿入モードへ

cw
単語を削除して挿入モードへ( w 以外にも、様々なモーションを指定可能。例えば c$ でカーソル位置から行末まで削除して挿入モードへ。)

s
カーソル位置の文字を削除して挿入モードへ

S
カーソル行を削除して挿入モードへ

コピー

Vimではコピーのことをyank(ヤンク)と呼びます。

詳細は :help yank を参照。

yy
行をコピー

yw
単語をコピー
w 以外にも、様々なモーションを指定可能。例えば y$ でカーソル位置から行末までコピー。

貼り付け

詳細は :help put を参照。

p
カーソル右に貼り付け

P
カーソル左に貼り付け

C-r + "
コマンドラインモードでデフォルトレジスタから貼り付け

C-r + +
コマンドラインモードでクリップボードから貼り付け

:set paste
ペーストモード。貼り付け時、インデントがおかしくなる場合に使用。詳細は :help paste

インデント

詳細は :help shift-left-right を参照。

>>
インデントを一つ挿入

<<
インデントを一つ削除

やりなおし

詳細は :help undo-commands を参照。

u
やり直し

C-r
やり直しのやり直し

大文字小文字変換

詳細は :help case を参照。

~
カーソル下の文字の大文字小文字を切り替える

gUU
現在行を大文字にする

guu
現在行を小文字にする

U
ビジュアルモードで選択した文字を大文字にする

u
ビジュアルモードで選択した文字を小文字にする

更新

詳細は :help simple-change:help replacing を参照。

r{char}
カーソル下の文字を {char} に置き換える

R
更新モードへ移動してノーマルモードに戻るまで複数文字を書き換え

ビジュアルモード

文字の選択モードです。選択した文字列を対象に、削除・コピー・変更ができます。詳細は :help visual-mode を参照。

v
文字を選択

o
カーソルを選択領域の反対側に移動

V
行を選択

矩形選択モード

visual-block(矩形ビジュアル)モードとも呼びます。詳細は :help visual-mode を参照。

C-v
矩形選択

I{string} + Esc
矩形選択中に使用。矩形選択した範囲の前に{string}を挿入

A{string} + Esc
矩形選択中に使用。矩形選択した範囲の後に{string}を挿入

c{string} + Esc
矩形選択中に使用。矩形選択した範囲を{string}で置き換え

検索

詳細は :help pattern.txt:help usr_27.txt を参照。正規表現も使用できます。

/{pattern}
{pattern}を検索

?{pattern}
{pattern}を上方向へ検索

*
カーソル上の単語で下方向に検索

#
カーソル上の単語で上方向に検索

n
下方向に検索

N
上方向に検索

:set ic
検索時に大文字と小文字を区別しない

:set noic
検索時に大文字と小文字を区別する

置換

詳細は :help substitute を参照。置換には正規表現のキャプチャや後方参照も使用できます。

:s/{pattern}/{string}
カーソル行の{pattern}のマッチを{string}に1つだけ書き換える

:s/{pattern}/{string}/g
カーソル行の{pattern}のマッチを{string}にすべて書き換える

:%s/{pattern}/{string}/g
ファイル全体の{pattern}のマッチを{string}にすべて書き換える

:%s/{pattern}/{string}/gc
ファイル全体の{pattern}のマッチを{string}に確認しながらすべて書き換える

:'<,'>:s/{pattern}/{string}/g
選択した文字の{pattern}のマッチを{string}にすべて書き換える。ビジュアルモードにて : を押下して使用。

C-v + Enter
コマンドラインモードにて、置換後の文字列に改行を挿入する

正規表現

詳細は :help regexp を参照。

検索や置換で正規表現を使用できます。Vimの正規表現は基本正規表現なので、いくつかのメタキャラクタにエスケープが必要です。とりあえず以下の文字はエスケープが必要、と覚えておくとある程度の正規表現は書けます。Vimの正規表現補助プラグインがあるようですが、Vimの正規表現は書きまくっていれば慣れます。

+?()|{}/

使用例

</head> もしくは </body> の文字列を検索

/\(<\/head>\|<\/body>\)

d が 2 回以上くりかえされる文字列を検索

/d\{2,}

行頭と行末にシングルクォートを挿入

:%s/^\(.*\)$/'\1'/g

スクロール

C-d
半画面下に移動

C-u
半画面上に移動

C-f
全画面下に移動

C-b
全画面上に移動

zz
カーソル行をウィンドウの中心に移動

ウィンドウ

:new
垂直方向に新規ウィンドウ

:vnew
水平方向に新規ウィンドウ

:sp
水平方向に現在のファイルを分割

:vsp
垂直方向に現在のファイルを分割

C-w + h
左のウィンドウに移動

C-w + j
下のウィンドウに移動

C-w + k
上のウィンドウに移動

C-w + l
右のウィンドウに移動

C-w + r
ウィンドウを上下・左右のものと交換

C-w + H
現在のウィンドウを一番左に移動

C-w + J
現在のウィンドウを一番下に移動

C-w + K
現在のウィンドウを一番上に移動

C-w + L
現在のウィンドウを一番右に移動

C-w + >
現在のウィンドウの幅を増やす

C-w + <
現在のウィンドウの幅を減らす

C-w + +>
現在のウィンドウの幅を増やす

C-w + +<
現在のウィンドウの幅を減らす

タブ

:tabnew
新しいタブを開く

gt
右のタブへ移動する

gT
左のタブへ移動する

3gt
3個目のタブへ移動する

:tabm 3
現在のタブを3個目のタブの次に移動する

折りたたみ

詳細は :help usr_28.txt を参照。

zo
カーソルの下の折畳を一段階開く

zO
カーソルの下の折畳を再帰的に全て開く

zR
全ての折畳を開く

zc
カーソルの下の折畳を一段階閉じる

zC
カーソルの下の折畳を再帰的に全て閉じる

zM
全ての折畳を閉じる

diff

ターミナルから vimdiff filename1 filename2 コマンドで diff モードで Vim を開く。詳細は :help diff を参照。

]c
次の差分に移動

[c
前の差分に移動

do
カーソル位置の差分をもう一方のファイルから取り込む

dp
カーソル位置の差分をもう一方のファイルに転送する

レジスタ

レジスタは、文字列に名前を付けて保存しておき、後から取り出すことができる機能です。名前には a-z を指定できます。yy
dd と普通に入力すると、無名レジスタに入ります。クリップボードのレジスタは + です。詳細は :help registers を参照。

"ay
a という名前のレジスタに選択範囲をコピー

"ayy
a という名前のレジスタに行をコピー

"ad
a という名前のレジスタに切り取り

"ap
a という名前のレジスタから貼り付け

テキストオブジェクト

テキストオブジェクトとは、記号などで囲まれたテキストをオブジェクトとして扱うことができる機能です。テキストオブジェクトを使うと、ある記号で囲まれたテキストをコピーしたり削除したりできます。テキストオブジェクトは、オペレータコマンド(
y,d,cなど)の後か、ビジュアルモード中に使用できます。

詳細は :help text-objects を参照。

di"
"" で囲まれた文字列を削除

di'
'' に囲まれた文字列を削除

da'
'' に囲まれた文字列を削除し、'' も削除。

di(
() に囲まれた文字列を削除

di{
{} に囲まれた文字列を削除

di[
[] に囲まれた文字列を削除

di<
<> に囲まれた文字列を削除

diw
単語を削除

dit
html タグの内側の文字列を削除

マーク

マークは、カーソルの位置を名前を付けて記録しておき、後からその場所に移動することができる機能です。名前には a-z を指定できます。

ma
a という名前のマークにカーソル位置を保存

'a
a という名前のマークに移動

:marks
マーク一覧を表示

マクロ

マクロとは、一連の操作を名前を付けて記録しておき、後からその操作を実行することができる機能です。名前にはa-zを指定できます。連続した操作を繰り返し実行するときに便利です。

qa
a という名前でマクロの記録を開始

q
マクロの記録を終了

@a
a という名前で記録したマクロを実行

10@a
a のマクロを10回実行

a の文字は a から z まで指定可能です。A を指定した場合、マクロに追加登録します。

履歴

q:
コマンドの実行履歴を表示

q/
検索履歴を表示

プラグインを書く時によく見るヘルプ

:help write-plugin
プラグインの書き方のヘルプ

:help functions
組み込み関数の一覧とヘルプ

:help eval.txt
Vimスクリプトのリファレンス

:help usr_41.txt
Vimスクリプトのリファレンスその2

-技術ブログ
-