基本操作とモード
Vimの基本的な考え方とモード切り替え
Vimにはいくつかの操作モードがあります。主要なモードとその切り替え方法を理解することが重要です。
- ノーマルモード (Normal Mode): 起動時のデフォルトモード。コマンド入力でテキスト操作を行います。
- 挿入モード (Insert Mode): テキストを入力するモード。ノーマルモードから
i
,a
,o
などで移行します。 - ビジュアルモード (Visual Mode): テキストを選択するモード。ノーマルモードから
v
,V
,Ctrl+v
で移行します。 - コマンドラインモード (Command-Line Mode): ノーマルモードから
:
,/
,?
を入力すると画面下部に表示されるモード。高度なコマンドや検索、置換を行います。
どのモードからでも、通常は Esc
キーを押すことでノーマルモードに戻ることができます。
カーソル移動 🧭
テキスト内を効率的に移動するためのコマンド
キー | モード | 説明 |
---|---|---|
h | ノーマル | 左に1文字移動 |
j | ノーマル | 下に1行移動 |
k | ノーマル | 上に1行移動 |
l | ノーマル | 右に1文字移動 |
w | ノーマル | 次の単語の先頭に移動 (単語は英数字または記号の連続) |
W | ノーマル | 次の単語 (スペース区切り) の先頭に移動 |
b | ノーマル | 前の単語の先頭に移動 |
B | ノーマル | 前の単語 (スペース区切り) の先頭に移動 |
e | ノーマル | 現在の単語または次の単語の末尾に移動 |
E | ノーマル | 現在の単語 (スペース区切り) または次の単語の末尾に移動 |
0 (ゼロ) | ノーマル | 行の先頭 (最初の文字) に移動 |
^ | ノーマル | 行の最初の非空白文字に移動 |
$ | ノーマル | 行の末尾に移動 |
gg | ノーマル | ファイルの先頭行に移動 |
G | ノーマル | ファイルの最終行に移動 ([N]G でN行目に移動) |
[N]G or :[N] | ノーマル | N行目に移動 (例: 10G or :10 で10行目へ) |
H | ノーマル | 画面の最上行 (High) に移動 |
M | ノーマル | 画面の中央行 (Middle) に移動 |
L | ノーマル | 画面の最下行 (Low) に移動 |
Ctrl + f | ノーマル | 1画面分下にスクロール (Forward) |
Ctrl + b | ノーマル | 1画面分上にスクロール (Backward) |
Ctrl + d | ノーマル | 半画面分下にスクロール (Down) |
Ctrl + u | ノーマル | 半画面分上にスクロール (Up) |
zz | ノーマル | カーソル行が画面中央に来るようにスクロール |
zt | ノーマル | カーソル行が画面上端に来るようにスクロール (Top) |
zb | ノーマル | カーソル行が画面下端に来るようにスクロール (Bottom) |
% | ノーマル | 対応する括弧 () , {} , [] に移動 |
* | ノーマル | カーソル下の単語を前方検索 |
# | ノーマル | カーソル下の単語を後方検索 |
f[char] | ノーマル | 現在の行で前方にある文字 [char] に移動 |
F[char] | ノーマル | 現在の行で後方にある文字 [char] に移動 |
t[char] | ノーマル | 現在の行で前方にある文字 [char] の手前に移動 |
T[char] | ノーマル | 現在の行で後方にある文字 [char] の後ろに移動 |
; | ノーマル | 最後の f, F, t, T コマンドを繰り返す |
, | ノーマル | 最後の f, F, t, T コマンドを逆方向に繰り返す |
テキスト編集 ✏️
テキストの挿入、変更、削除、コピー、貼り付けなど
キー | モード | 説明 |
---|---|---|
i | ノーマル → 挿入 | カーソルの前から挿入モード (Insert) |
I | ノーマル → 挿入 | 行の最初の非空白文字の前から挿入モード |
a | ノーマル → 挿入 | カーソルの後から挿入モード (Append) |
A | ノーマル → 挿入 | 行の末尾から挿入モード |
o | ノーマル → 挿入 | 現在の行の下に新しい行を挿入して挿入モード (Open line below) |
O | ノーマル → 挿入 | 現在の行の上に新しい行を挿入して挿入モード (Open line above) |
Esc or Ctrl+[ | 挿入/ビジュアル → ノーマル | ノーマルモードに戻る |
r[char] | ノーマル | カーソル下の1文字を指定した文字 [char] で置換 (Replace) |
R | ノーマル → 置換 | 置換モードに入る (連続して文字を上書き) |
c[motion] | ノーマル → 挿入 | 指定範囲 [motion] を削除し、挿入モード (Change) (例: cw で次の単語の先頭まで変更) |
cc or S | ノーマル → 挿入 | 現在の行全体を削除し、挿入モード |
C | ノーマル → 挿入 | カーソル位置から行末までを削除し、挿入モード |
s | ノーマル → 挿入 | カーソル下の1文字を削除し、挿入モード (Substitute) |
x | ノーマル | カーソル下の1文字を削除 (dl と同等) |
X | ノーマル | カーソル前の1文字を削除 (dh と同等) |
d[motion] | ノーマル | 指定範囲 [motion] を削除 (Delete) (例: dw で次の単語の先頭まで削除, d$ で行末まで削除) |
dd | ノーマル | 現在の行全体を削除 |
D | ノーマル | カーソル位置から行末までを削除 (d$ と同等) |
J | ノーマル | 現在の行と次の行を連結 (間にスペースを挿入) |
gJ | ノーマル | 現在の行と次の行を連結 (スペースを挿入しない) |
y[motion] | ノーマル | 指定範囲 [motion] をコピー (ヤンク – Yank) (例: yw , y$ ) |
yy or Y | ノーマル | 現在の行全体をコピー |
p | ノーマル | カーソルの後にコピー/削除した内容を貼り付け (Put) (行全体の場合は次の行に貼り付け) |
P | ノーマル | カーソルの前にコピー/削除した内容を貼り付け (行全体の場合は前の行に貼り付け) |
gp | ノーマル | p と同様だが、貼り付け後にカーソルを貼り付けたテキストの末尾に移動 |
gP | ノーマル | P と同様だが、貼り付け後にカーソルを貼り付けたテキストの末尾に移動 |
u | ノーマル | 操作を元に戻す (Undo) |
Ctrl + r | ノーマル | 元に戻した操作をやり直す (Redo) |
. (ドット) | ノーマル | 直前の変更操作 (挿入、削除、変更など) を繰り返す |
>> | ノーマル | 現在の行をインデント (右にシフト) |
<< | ノーマル | 現在の行を逆インデント (左にシフト) |
== | ノーマル | 現在の行を自動インデント |
>[motion] | ノーマル | 指定範囲 [motion] をインデント |
<[motion] | ノーマル | 指定範囲 [motion] を逆インデント |
=[motion] | ノーマル | 指定範囲 [motion] を自動インデント |
~ | ノーマル | カーソル下の文字の大文字/小文字を切り替えて右に移動 |
Ctrl + a | ノーマル | カーソル下またはカーソル以降の最初の数値をインクリメント (+1) |
Ctrl + x | ノーマル | カーソル下またはカーソル以降の最初の数値をデクリメント (-1) |
💡 Tip:
多くのノーマルモードコマンドは、先頭に数字 [N]
を付けることで、その操作をN回繰り返すことができます。(例: 3j
で3行下に移動, 5dd
で5行削除, 2dw
で2単語削除)
検索と置換 🔍
テキスト内のパターン検索と一括置換
キー/コマンド | モード | 説明 |
---|---|---|
/ | ノーマル → コマンドライン | を前方検索 |
? | ノーマル → コマンドライン | を後方検索 |
n | ノーマル | 次の検索結果に移動 (最後の / または ? と同じ方向) |
N | ノーマル | 前の検索結果に移動 (最後の / または ? と逆方向) |
* | ノーマル | カーソル下の単語全体を前方検索 (単語境界を含む) |
# | ノーマル | カーソル下の単語全体を後方検索 (単語境界を含む) |
g* | ノーマル | カーソル下の単語の一部を含むパターンを前方検索 (単語境界を含まない) |
g# | ノーマル | カーソル下の単語の一部を含むパターンを後方検索 (単語境界を含まない) |
:s//[replace]/ | コマンドライン | 現在の行で最初に見つかった を [replace] に置換 |
:s//[replace]/g | コマンドライン | 現在の行の全ての を [replace] に置換 (global) |
:%s//[replace]/g | コマンドライン | ファイル全体の全ての を [replace] に置換 |
:%s//[replace]/gc | コマンドライン | ファイル全体の全ての を [replace] に置換。置換前に確認を求める (confirm) |
:[range]s//[replace]/g | コマンドライン | 指定範囲 [range] 内の全ての を [replace] に置換 (例: :10,20s/.../g , :'<,'>s/.../g ビジュアル選択範囲) |
:set hlsearch (:set hls ) | コマンドライン | 検索結果をハイライト表示する |
:set nohlsearch (:set nohls ) | コマンドライン | 検索結果のハイライトを一時的に解除する |
:set incsearch (:set is ) | コマンドライン | 入力中に検索結果を逐次表示する (インクリメンタルサーチ) |
:set ignorecase (:set ic ) | コマンドライン | 検索時に大文字/小文字を区別しない |
:set smartcase (:set scs ) | コマンドライン | ignorecase がオンの時、検索パターンに大文字が含まれていれば大文字/小文字を区別する |
💡 正規表現:
検索パターン や置換パターン
[replace]
では、Vim独自の正規表現メタ文字が利用できます。例えば:
.
: 任意の一文字*
: 直前の要素の0回以上の繰り返し\+
: 直前の要素の1回以上の繰り返し\?
: 直前の要素の0回または1回の繰り返し^
: 行頭$
: 行末\<
: 単語の始まり\>
: 単語の終わり[...]
: 角括弧内のいずれかの文字\(\)
: グループ化 (置換で\1
,\2
などで参照可能)
より詳細は :help pattern
で確認できます。
ビジュアルモード ✨
テキストを選択して操作を実行
キー | モード | 説明 |
---|---|---|
v | ノーマル → ビジュアル (文字単位) | 文字単位のビジュアルモードを開始。カーソル移動で選択範囲を拡張/縮小。 |
V | ノーマル → ビジュアル (行単位) | 行単位のビジュアルモードを開始。カーソル移動で選択行を増減。 |
Ctrl + v | ノーマル → ビジュアル (矩形選択) | 矩形選択モードを開始。カーソル移動で矩形範囲を選択。 |
Esc or Ctrl+[ | ビジュアル → ノーマル | ビジュアルモードを終了し、ノーマルモードに戻る。 |
o | ビジュアル | 選択範囲の開始点と終了点を入れ替える。 |
d or x | ビジュアル | 選択範囲を削除。 |
c or s | ビジュアル → 挿入 | 選択範囲を削除し、挿入モードを開始。矩形選択の場合は、各行の選択範囲の先頭で挿入モードになる。 |
y | ビジュアル | 選択範囲をコピー (ヤンク)。 |
> | ビジュアル | 選択範囲をインデント。 |
< | ビジュアル | 選択範囲を逆インデント。 |
= | ビジュアル | 選択範囲を自動インデント。 |
~ | ビジュアル | 選択範囲の大文字/小文字を反転。 |
U | ビジュアル | 選択範囲を大文字に変換。 |
u | ビジュアル | 選択範囲を小文字に変換。 |
J | ビジュアル (行単位) | 選択した行を連結 (スペース区切り)。 |
gJ | ビジュアル (行単位) | 選択した行を連結 (スペースなし)。 |
: | ビジュアル → コマンドライン | 選択範囲に対してコマンドを実行する準備 (自動的に :'<,'> が入力される)。例: :'<,'>s/foo/bar/g |
I | ビジュアル (矩形選択) → 挿入 | 選択範囲の各行の先頭にテキストを挿入。テキスト入力後 Esc で確定。 |
A | ビジュアル (矩形選択) → 挿入 | 選択範囲の各行の末尾にテキストを挿入。テキスト入力後 Esc で確定。 |
ウィンドウとタブ操作 📑
複数のファイルやビューを同時に扱う
キー/コマンド | モード | 説明 |
---|---|---|
:sp [filename] | コマンドライン | ウィンドウを水平分割 (split)。[filename] を指定するとそのファイルを開く。省略すると同じファイルを開く。 |
:vs [filename] | コマンドライン | ウィンドウを垂直分割 (vsplit)。[filename] を指定するとそのファイルを開く。省略すると同じファイルを開く。 |
Ctrl+w s or Ctrl+w Ctrl+s | ノーマル | :sp と同じ。 |
Ctrl+w v or Ctrl+w Ctrl+v | ノーマル | :vs と同じ。 |
Ctrl+w q or :q | ノーマル / コマンドライン | 現在のウィンドウを閉じる。 |
Ctrl+w o or :only | ノーマル / コマンドライン | 現在のウィンドウ以外をすべて閉じる。 |
Ctrl+w h/j/k/l | ノーマル | 左/下/上/右のウィンドウに移動。 |
Ctrl+w w or Ctrl+w Ctrl+w | ノーマル | 次のウィンドウに移動 (順繰り)。 |
Ctrl+w p | ノーマル | 前の (直前にいた) ウィンドウに移動。 |
Ctrl+w = | ノーマル | すべてのウィンドウサイズを均等にする。 |
Ctrl+w + | ノーマル | 現在のウィンドウの高さを1行増やす。 |
Ctrl+w - | ノーマル | 現在のウィンドウの高さを1行減らす。 |
Ctrl+w > | ノーマル | 現在のウィンドウの幅を1列増やす。 |
Ctrl+w < | ノーマル | 現在のウィンドウの幅を1列減らす。 |
Ctrl+w _ | ノーマル | 現在のウィンドウの高さを最大にする。 |
Ctrl+w | | ノーマル | 現在のウィンドウの幅を最大にする。 |
:tabnew [filename] | コマンドライン | 新しいタブを開く。[filename] を指定するとそのファイルを開く。 |
:tabe [filename] | コマンドライン | 現在のタブで新しいファイル [filename] を開く (タブ内のウィンドウで :e と似ている)。 |
:tabclose or :tabc | コマンドライン | 現在のタブを閉じる。 |
:tabonly or :tabo | コマンドライン | 現在のタブ以外をすべて閉じる。 |
gt or :tabn | ノーマル / コマンドライン | 次のタブに移動 (next)。 |
gT or :tabp | ノーマル / コマンドライン | 前のタブに移動 (previous)。 |
[N]gt | ノーマル | N番目のタブに移動 (1始まり)。 |
:tabm [N] | コマンドライン | 現在のタブをN番目 (0始まり) の後ろに移動。:tabm 0 で最初のタブに移動。 |
ファイル操作 💾
ファイルの保存、終了、読み込み、切り替えなど
コマンド | モード | 説明 |
---|---|---|
:w | コマンドライン | 現在のファイルを保存 (write)。 |
:w [filename] | コマンドライン | 指定したファイル名 [filename] で保存。 |
:w !sudo tee % | コマンドライン | 権限がないファイルに書き込む (外部コマンドを利用)。 |
:q | コマンドライン | 現在のファイル/ウィンドウ/タブを閉じる (quit)。未保存の変更があると失敗する。 |
:q! | コマンドライン | 変更を破棄して強制的に閉じる。 |
:wq or :x or ZZ | コマンドライン / ノーマル | ファイルを保存して閉じる。:x と ZZ は変更があった場合のみ保存する。 |
:wq! | コマンドライン | 強制的に保存して閉じる (書き込み権限がない場合など)。 |
ZQ | ノーマル | 変更を破棄して強制的に閉じる (:q! と同等)。 |
:e [filename] | コマンドライン | 新しいファイル [filename] を編集 (edit)。未保存の変更があると失敗する。 |
:e! | コマンドライン | 現在のファイルの変更を破棄し、最後に保存された状態を読み込み直す。 |
:e# or Ctrl+^ | コマンドライン / ノーマル | 直前に編集していたファイルに切り替える。 |
:r [filename] | コマンドライン | 指定したファイル [filename] の内容をカーソル位置に読み込む (read)。 |
:r !command | コマンドライン | 外部コマンド command の実行結果をカーソル位置に読み込む。 |
:bn | コマンドライン | バッファリストの次のファイルに移動 (buffer next)。 |
:bp | コマンドライン | バッファリストの前のファイルに移動 (buffer previous)。 |
:bd | コマンドライン | 現在のバッファをリストから削除 (buffer delete)。ファイルは閉じられるがVimは終了しない。 |
:ls | コマンドライン | 現在開いているバッファ (ファイル) の一覧を表示。 |
:b[N] or :buffer [N] | コマンドライン | :ls で表示される番号Nのバッファに切り替える。 |
:f or Ctrl+g | コマンドライン / ノーマル | 現在のファイル名と状態 (行数、カーソル位置など) を表示。 |
マクロ記録と再生 🤖
一連の操作を記録して繰り返し実行
キー | モード | 説明 |
---|---|---|
q[レジスタ名] | ノーマル | [レジスタ名] (a-z) にマクロの記録を開始。画面下部に “recording @[レジスタ名]” と表示される。 |
q | ノーマル (記録中) | マクロの記録を終了。 |
@[レジスタ名] | ノーマル | [レジスタ名] に記録されたマクロを1回再生。 |
@@ | ノーマル | 最後に実行したマクロを再度再生。 |
[N]@[レジスタ名] | ノーマル | [レジスタ名] に記録されたマクロをN回再生。 |
💡 マクロのコツ:
- マクロ記録開始前に、再現可能な開始位置にカーソルを移動させておく(例: 行頭
0
や^
)。 - マクロの最後には、次の繰り返しに適した位置にカーソルを移動させる(例: 次の行の先頭
j^
)。 - レジスタ名は大文字 (A-Z) を使うと、既存のマクロに追加記録できる。
- 複雑な操作を一度に記録するのではなく、短い操作を記録して
.
(繰り返し) や他のマクロと組み合わせると良い。 - 記録中に間違えた場合、
q
で一旦停止し、u
で戻ってから再度記録を開始するか、気にせず最後まで記録して後でレジスタの内容を編集することも可能(例::let @a='...'
)。
その他の便利なコマンド 💡
覚えておくと役立つ様々な機能
キー/コマンド | モード | 説明 |
---|---|---|
:help [keyword] | コマンドライン | Vimのヘルプを開く。[keyword] を指定すると関連するヘルプを表示 (例: :help motion , :help :s )。 |
K | ノーマル | カーソル下のキーワードに関するmanページやドキュメントを開く (通常はシステムの keywordprg 設定に依存)。 |
Ctrl+o | ノーマル | ジャンプリストの前の位置に戻る (Older position)。 |
Ctrl+i or Tab | ノーマル | ジャンプリストの次の位置に進む (Newer position)。 |
:jumps | コマンドライン | ジャンプリスト (カーソルが大きく移動した履歴) を表示。 |
:changes | コマンドライン | 変更リスト (アンドゥ可能な変更箇所) を表示。 |
g; | ノーマル | 変更リストの前の位置に移動。 |
g, | ノーマル | 変更リストの次の位置に移動。 |
:! | コマンドライン | 外部シェルコマンド を実行。 |
:[range]! | コマンドライン | 指定範囲 [range] を外部コマンド の標準入力とし、その出力で範囲を置き換える (例: :%!sort でファイル全体をソート)。 |
gf | ノーマル | カーソル下のファイル名にジャンプ (ファイルが存在する場合)。 |
Ctrl+wf | ノーマル | カーソル下のファイル名を新しい分割ウィンドウで開く。 |
ga | ノーマル | カーソル下の文字のASCIIコード、16進数、8進数を表示。 |
g Ctrl+g | ノーマル | 現在のカーソル位置に関する詳細情報 (文字数、単語数、バイト数など) を表示。 |
:set number (:set nu ) | コマンドライン | 行番号を表示する。 |
:set nonumber (:set nonu ) | コマンドライン | 行番号を非表示にする。 |
:set relativenumber (:set rnu ) | コマンドライン | 相対行番号を表示する。 |
:set norelativenumber (:set nornu ) | コマンドライン | 相対行番号を非表示にする。 |
:syntax on | コマンドライン | シンタックスハイライトを有効にする。 |
:syntax off | コマンドライン | シンタックスハイライトを無効にする。 |
:set paste / :set nopaste | コマンドライン | ペーストモードの切り替え。外部からテキストを貼り付ける際に自動インデントなどを無効にする。 |
:colorscheme [name] | コマンドライン | カラースキームを変更する。Tab で補完可能。 |
:registers or :reg | コマンドライン | 全レジスタの内容を表示。 |
:history or :his | コマンドライン | コマンドラインの履歴を表示。 |
q: | ノーマル | コマンドライン履歴を編集・実行するためのウィンドウを開く。 |
q/ or q? | ノーマル | 検索履歴を編集・実行するためのウィンドウを開く。 |
簡単な設定例 (.vimrc)
~/.vimrc
(または Neovim の場合は ~/.config/nvim/init.vim
) に設定を記述することで、Vimの挙動をカスタマイズできます。
" コメントはダブルクォーテーションから始まる
" シンタックスハイライトを有効に
syntax on
" ファイルタイプの検出とプラグインを有効に
filetype plugin indent on
" 行番号を表示
set number
" 相対行番号も表示 (組み合わせることで現在行以外が相対表示になる)
set relativenumber
" 検索時に大文字小文字を区別しない
set ignorecase
" 検索パターンに大文字が含まれている場合は区別する
set smartcase
" 検索結果をハイライト
set hlsearch
" 入力中に検索結果を逐次表示
set incsearch
" タブや空白文字を視覚的に表示
set list
set listchars=tab:>-,trail:-,nbsp:%
" タブ幅をスペース4つ分に設定
set tabstop=4
set shiftwidth=4
" タブの代わりにスペースを挿入
set expandtab
" 自動インデントを有効に
set autoindent
set smartindent
" 対応する括弧をハイライト表示
set showmatch
" コマンドラインの高さを2行に
set cmdheight=2
" バックアップファイルを作成しない
set nobackup
set nowritebackup
set noswapfile
" 文字コードをUTF-8に
set encoding=utf-8
set fileencodings=utf-8,iso-2022-jp,euc-jp,cp932
" カラースキームを設定 (例: desert)
" colorscheme desert
コメント