Vim操作 チートシート

cheatsheet

基本操作とモード

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コマンドライン / ノーマルファイルを保存して閉じる。:xZZ は変更があった場合のみ保存する。
: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
    

コメント

タイトルとURLをコピーしました