ファイル操作

未変更のファイルを閉じる

:q / C-w q

変更を破棄してファイルを閉じる

:q! / ZQ

上書き保存

:w

上書き保存をして閉じる

:wq

変更されている場合は保存してから閉じる

:x / ZZ

ファイルを開く

:e [ファイル名]

カレントディレクトリのファイル一覧を表示

:e .

カーソル操作

左 / 上の行 / 下の行 / 右に移動

h / j / k / l

画面上での上の行 / 下の行に移動

gj / gk

ファイル先頭 / 末尾に移動

gg / G

指定行目に移動

[行数]G / :[行数]

行頭へ移動

0

行で最初の非空白文字へ移動

^

行末へ移動

$

カーソルより右にある指定文字に移動

f[文字]

F[文字]:カーソルより左にある指定文字に移動

カーソルより右にある指定文字の左に移動

t[文字]

T[文字]:カーソルより左にある指定文字の右に移動

直前の f F t T を繰り返す

;

直前の f F t T を逆方向に繰り返す

,

前 / 次の単語の先頭へ移動

b / w

前 / 次の単語の末尾へ移動

ge / e

前 / 次の段落へ移動

( / )

対応する括弧へ移動

%

if-endなどもプラグインによって可能。

前 / 次に編集した場所へ移動

g; / g,

カーソルのある行が画面の上 / 中央 / 下になるようにスクロールする

zt / zz / zb

画面の上 / 中央 / 下にカーソルを移動

H / M / L

Home / Middle / Last

半画面上 / 下にスクロールする

C-u / C-d

Up / Down

1画面上 / 下にスクロールする

C-b / C-f

Back / Forward

1行上 / 下にスクロールする

C-e / C-y

Back / Forward

検索 / 置換

下方向に検索

/[文字列]

正規表現が使用可能。

上方向に検索

?[文字列]

次 / 前の候補に移動

n / N

すべての行を置換

:%s/[置換前文字列]/[置換後文字列]/g

正規表現が使用可能。

スラッシュの代わりにセミコロンも使用可能。

選択範囲を置換

:'<,'>s/[置換前文字列]/[置換後文字列]/g

カーソルがある行を置換

:s/[置換前文字列]/[置換後文字列]/g

文字列の挿入 / 削除

カーソルの前に文字列を挿入(インサート)

i

カーソルの後に文字列を挿入(インサート)

a

行頭 / 行末に文字列を挿入(インサート)

I / A

現在行の上 / 下に新規行を挿入後、文字列を挿入(インサート)

o / O

カーソルの下の文字を置換

r[文字]

リプレースモードへ切り替え

R

インデントを増やす / 減らす

(インサート中) C-t / C-d

カーソルの下の文字列をカット

x

カーソルがある行をカット

dd

行末までカット

D

次の行と結合

J

gJ:間にスペースを入れない

インクリメント / デクリメント

C-a / C-x

数字を増やす / 減らす

ヤンク / ペースト

選択された範囲をヤンク

y

1行ヤンク

yy / Y

カーソルの後にペースト

p

ビジュアルモード

ビジュアルモードに切り替え

v

行単位ビジュアルモードに切り替え

V

短形ビジュアルモードに切り替え

C-v

インデントを増やす / 減らす

> / <

大文字 / 小文字を変換

~

大文字 / 小文字に変換

U / u

指定範囲を選択

(テキストオブジェクト)

自動インデント

=

選択範囲の先頭(末尾)にカーソルを移動

o

選択範囲の別の角にカーソルを移動

O

矩形選択時に実行

Undo / Redo

Undo

u

Redo

C-r

オペレータ / テキストオブジェクト

オペレータ

c 変更 change
d カット delete
y ヤンク yank

オペレータに続けて、テキストオブジェクトを入力する。

テキストオブジェクト

a:範囲/i:範囲の内部

aw iw 単語 aはスペースも含む
as is ピリオドで区切られた文
ap ip 段落 連続している行
a[ a] i[ i] []括弧
a( a) ab i( i) ib ()括弧
a{ a} ab i{ i} ib {}括弧
a< a> i< i> <>括弧
at it HTML/XMLタグ
a" i" ダブルクォーテーション
a' i' シングルクォーテーション
a` i` バッククォート

ウインドウ分割

ウインドウを横分割

:sp / C-w s

ウインドウを横分割

:vs / C-w v

ウインドウのフォーカスを移動

C-w h / j / k / l / w

ウインドウのフォーカスを移動

C-w h / j / k / l / w / W

アクティブなウインドウを移動

C-w H / J / K / L

タブ

新規タブ

:tabe (ファイル名)

次 / 前のタブに移動

gt / gT

アクティブなタブの移動

:tabm [数]

[数]は左から0から始まる。

折りたたみ

設定をしない場合、終了時に折りたたみ情報は削除される。

折りたたみを作成

zf

折りたたみを開閉

za

折りたたみを削除

zd

すべての折りたたみを開く

zR

すべての折りたたみを閉じる

zM

すべての折りたたみを削除

zD

キーマッピング / 短縮

キーマッピングを割り当て

:no[remap] / :nn[oremap] / :vn[oremap] / :xn[oremap] / :snor[emap] / :ono[remap] / :ino[remap] / :ln[oremap] / :cno[remap] [新] [元]

他のキーマッピングに影響しない。例:

[vim.rc]
nn <C-a> <C-x> " <C-a>に<C-x>の動作を割り当て
nn t <C-a> " tに<C-a>の動作を割り当て(<C-x>ではない)

キーマッピングを割り当て

:map / :nm[ap] / :vm[ap] / :xm[ap] / :smap / :om[ap] / :im[ap] / :lm[ap] / :cm[ap] [新] [元]

他のキーマッピングに影響する。例:

[vim.rc]
nm <C-a> <C-x> " <C-a>に<C-x>の動作を割り当て
nm t <C-a> " tに<C-x>の動作を割り当て(<C-a>ではない)

キーマッピングを解除

:unm[ap] / :nun[map] / :vu[nmap] / :xu[nmap] / :sunm[ap] / :ou[nmap] / :iu[nmap] / :lu[nmap] / :cu[nmap] [新] [元]

キーマッピングを確認

:map / :nm[ap] / :vm[ap] / :xm[ap] / :smap / :om[ap] / :im[ap] / :lm[ap] / :cm[ap]

noremap, mapの前につけるアルファベット

なし ノーマル・ビジュアル・セレクト・次コマンド待機
n ノーマル
v ビジュアル&セレクト
x ビジュアル
s セレクト(実行時に選択していたテキストが使われる)
o 次コマンド待機(d, y, cなどの後の待機時間)
i インサート
l インサート・コマンドライン
c コマンドライン

コマンドのエイリアスを作成

:ab[breviate]

コマンドのエイリアスを削除

:una[bbreviate]

その他

シェルを起動

:sh[ell]

シェルコマンドを実行

:![コマンド]

ヘルプを検索(英語)

:h [文字列]

マーク

マークを作成

m[a-z]

マークに移動

'[マーク] / `[マーク]

マークの一覧を表示

:marks

すべてのマークを削除

:delmarks!

Surround

選択中の文字列を、括弧/引用符/HTMLタグで囲う

ビジュアルモードで選択時に入力する。

元の文字列 コマンド 結果
foo S' 'foo'
foo S" "foo""
foo S[ [ foo ]
foo S( ( foo )
foo S{ { foo }
foo S] [foo]
foo S) (foo)
foo S} {foo}
foo S<p> <p>foo</p>

文字列を選択し、括弧/引用符/HTMLタグで囲う

ysの後に 選択する文字列 と その文字列を囲うもの を続けて指定する。

元の文字列 コマンド 結果
'foo b|ar' ysaw( 'foo ( bar )'
'foo b|ar' ysi'( '( foo bar )'
'foo b|ar' ysa'( ( 'foo bar' )

上の表の|はカーソルを表している。

文字列を囲っている、括弧/引用符/HTMLタグを削除・変更

d(削除)またはc(変更)に続いてsを入力し、さらに続いて入力する。

元の文字列 コマンド 結果
'foo' ds' foo
( foo ) ds( foo
<p>foo</p> dst foo
'foo' cs'" "foo"
'foo' cs'( ( foo )
foo S{ { foo }
'foo' cs'<p> <p>foo</p>

Alignta

通常は:Alignコマンドを使用するが、Alignプラグインがインストールされている場合は:Aligntaコマンドを使用する。

指定文字のの縦を合わせ、左右にスペースをはさむ

:'<,'>Align [文字列]
+-------------+-------------+
| Original    | :Align =    |
+-------------+-------------+
| a = 1       | a     = 1   |
| bbb = 10    | bbb   = 10  |
| ccccc = 100 | ccccc = 100 |
+-------------+-------------+

複数指定

:'<,'>Align [文字列] [文字列2] ...
+---------------------+-------------------------+
| Original            | :Align = /* */          |
+---------------------+-------------------------+
| a = 1 /* AAAAA */   | a     = 1   /* AAAAA */ |
| bbb = 10 /* BBB */  | bbb   = 10  /* BBB   */ |
| ccccc = 100 /* C */ | ccccc = 100 /* C     */ |
+---------------------+-------------------------+

回数指定

:'<,'>Align [文字列]/[回数]
+-----------------------------+---------------------------------+
| Original                    | :Align =/2                      |
+-----------------------------+---------------------------------+
| a = bbbbb = c = ddddd = 1   | a     = bbbbb = c = ddddd = 1   |
| aaa = bbb = ccc = ddd = 10  | aaa   = bbb   = ccc = ddd = 10  |
| aaaaa = b = ccccc = d = 100 | aaaaa = b     = ccccc = d = 100 |
+-----------------------------+---------------------------------+

書式指定

:'<,'>Align [左][中](右) [文字列]

(右)を省略した場合、[左]と同じになる。

文字 意味
< 左揃え
| 中央揃え
> 右揃え
= 保持
+-------------+----------------+
| Original    | :Align << =    |
+-------------+----------------+
| a =  1      | a     = 1      |
|  bbb = 10   | bbb   = 10     |
| ccccc = 100 | ccccc = 100    |
+-------------+----------------+
+-------------+----------------+
| Original    | :Align >> =    |
+-------------+----------------+
| a =  1      |     a =   1    |
|  bbb = 10   |   bbb =  10    |
| ccccc = 100 | ccccc = 100    |
+-------------+----------------+
+-------------+-----------------+
| Original    | :Align <|> =    |
+-------------+-----------------+
| a =  1      | a     =   1     |
|  bbb = 10   | bbb   =  10     |
| ccccc = 100 | ccccc = 100     |
+-------------+-----------------+
+-------------+-----------------+
| Original    | :Align <|> =    |
+-------------+-----------------+
| a =  1      |     a = 1       |
|  bbb = 10   |   bbb = 10      |
| ccccc = 100 | ccccc = 100     |
+-------------+-----------------+

空白数を指定

:'<,'>Align [数] [文字列]
+-------------+------------------+
| Original    | :Align <<0:0 =   |
|             | :Align <<00 =    |
|             | :Align <<0 =     |
+-------------+------------------+
| a = 1       | a    =1          |
| bbb = 10    | bbb  =10         |
| ccccc = 100 | ccccc=100        |
+-------------+------------------+
+-------------+------------------+
| Original    | :Align <<3:1 =   |
|             | :Align <<31 =    |
+-------------+------------------+
| a = 1       | a       = 1      |
| bbb = 10    | bbb     = 10     |
| ccccc = 100 | ccccc   = 100    |
+-------------+------------------+

パターンの開始位置を揃える

:'<,'>Align <- [文字列]
+--------------------+--------------------+
| Original           | :Align <- b        |
+--------------------+--------------------+
| a        b c       | a      b c         |
| aaa       bbb  ccc | aaa    bbb  ccc    |
| aaaaa  bbbbb ccccc | aaaaa  bbbbb ccccc |
+--------------------+--------------------+

書式指定

:'<,'>Align [書式] [文字列]
文字 意味
<- 最左の位置で揃える
-> 最右の位置で揃える
+--------------------+--------------------+
| Original           | :Align <- b        |
+--------------------+--------------------+
| a        b c       | a      b c         |
| aaa       bbb  ccc | aaa    bbb  ccc    |
| aaaaa  bbbbb ccccc | aaaaa  bbbbb ccccc |
+--------------------+--------------------+
+--------------------+-----------------------+
| Original           | :Align -> b           |
+--------------------+-----------------------+
| a        b c       | a         b c         |
| aaa       bbb  ccc | aaa       bbb  ccc    |
| aaaaa  bbbbb ccccc | aaaaa     bbbbb ccccc |
+--------------------+-----------------------+