Vim入門 - 基本操作と実践テクニック
この記事で解決できること
- Vim の モード を理解し、「抜け出せない」状態を回避できる
- 移動・編集・検索置換の 実務で使う最低限の型 が身につく
.vimrcで 快適な初期設定 ができる- サーバ作業で
viしか入っていなくても 怖くない
結論(実務の型)
- 起動したら まずノーマルモード(
Esc)を意識する - 編集は
i→ 編集 →Esc→:wの 4 ステップが基本 - 抜けられなくなったら
Escを 2 回押して:q!で強制終了 - 設定ファイル編集は
sudo vimではなくsudoeditを使う
前提(対象環境)
- OS:Ubuntu / 他 Linux 一般
- Vim 8 以降 または Neovim(vi 互換動作にも触れる)
- SSH 越しのリモートサーバ作業を主に想定
1. モード:これだけで 8 割解決
Vim が初心者を脱落させる最大の原因は モード の存在。逆に言えば、モードさえ理解できれば残りは「コマンドの暗記」だけ。
| モード | 入り方 | 何ができる |
|---|---|---|
| ノーマル | Esc |
移動・削除・コピー |
| 挿入 | i / a / o |
文字入力 |
| ビジュアル | v / V |
範囲選択 |
| コマンドライン | : |
保存・終了・置換 |
鉄則: 何か変なことが起きたら、まず Esc を 2 回押してノーマルモードに戻る。
1-1. 挿入モードへの入り方(使い分け)
i # カーソル位置の前に挿入 a # カーソル位置の後に挿入(行末で使う) o # 下に新規行を開いて挿入 O # 上に新規行を開いて挿入 I # 行頭に挿入 A # 行末に挿入
最初のうちは i と o だけで十分。慣れたら A(行末追記)が便利。
2. 保存と終了:最頻出の事故ポイント
「Vim から抜けられない」問題はここで全部解決する。
:w # 保存(write) :q # 終了(quit) :wq # 保存して終了 :x # 保存して終了(:wq と同じ。変更がなければ書き込まない) ZZ # ノーマルモードで :wq 相当 :q! # 保存せず強制終了 :w !sudo tee % # sudo で開き忘れたファイルを保存(後述)
:q だけだと「未保存の変更があります」で蹴られる。捨ててよいなら :q!、保存したいなら :wq。
2-1. sudo で開き忘れた事故の回復
/etc/ 配下を vim で開いて編集後、保存時に Permission denied で詰む定番事故。
:w !sudo tee % > /dev/null
%は現在開いているファイル名に展開されるteeで書き込み、> /dev/nullで標準出力を捨てる- 保存後
:q!(既にディスクへ書かれているため!でよい)
そもそも設定ファイル編集は sudoedit /etc/ssh/sshd_config(または sudo -e)が安全。一時ファイルで編集し、終了時に上書きされる。
3. 移動:マウスを使わずに飛ぶ
ノーマルモードで使う。挿入モードでは効かないので注意。
3-1. 1 文字単位
h j k l # 左 下 上 右
hjkl の覚え方:j が ↓(落ちる)、k が ↑(突き上げる)。
3-2. 単語・行・画面単位
w / b # 次の単語頭 / 前の単語頭 e # 単語末尾 0 / ^ / $ # 行頭 / 行頭(空白除く) / 行末 gg / G # ファイル先頭 / 末尾 :42 # 42 行目へジャンプ Ctrl-d / Ctrl-u # 半画面 下 / 上 Ctrl-f / Ctrl-b # 1画面 下 / 上
3-3. 検索ベース移動
/word # 前方検索 ?word # 後方検索 n / N # 次 / 前のマッチへ * # カーソル位置の単語を前方検索
実務 Tips: ログを見るときは G で末尾に飛び、?ERROR で後方検索すると早い。
4. 編集:最低限これだけ
x # 1 文字削除 dd # 1 行削除(クリップボードへ) 3dd # 3 行削除 dw # 単語削除 d$ / D # 行末まで削除 yy # 1 行コピー(yank) 3yy # 3 行コピー p / P # 貼り付け(後 / 前) u # 取り消し(undo) Ctrl-r # やり直し(redo) . # 直前の操作を繰り返し
最強コマンドは .(ドット)。直前の編集操作を再実行する。dw(単語削除)→ 別の場所で . で同じ削除が走る。
4-1. 数値プレフィックス
ほとんどのコマンドは数値を前置できる。
5j # 5 行下へ 10x # 10 文字削除 3yy # 3 行コピー
5. 検索と置換:実務で一番使う
5-1. 検索
/pattern # 前方検索(正規表現可) ?pattern # 後方検索 n / N # 次 / 前
5-2. 置換(最重要)
:s/foo/bar/ # 現在行の最初の foo を bar に :s/foo/bar/g # 現在行のすべて :%s/foo/bar/g # ファイル全体すべて :%s/foo/bar/gc # ファイル全体、確認しながら :5,10s/foo/bar/g # 5〜10 行目のすべて
:%s/foo/bar/g は強力。まず gc で確認モードにして、y(はい)/n(いいえ)/a(全て)/q(中止) で進めるのが安全。
5-3. 正規表現の罠
Vim の正規表現は POSIX 拡張正規表現と微妙に違う。
:%s/\v(\w+)\s+\1/\1/g # \v で very magic モード(標準的な正規表現に近づく)
\v を付けると () + ? のエスケープが不要になる。覚えておくと事故が減る。
6. 複数ファイル・ウィンドウ
6-1. バッファ(複数ファイル)
:e other.txt # 別ファイルを開く :ls # 開いているバッファ一覧 :b 2 # バッファ番号 2 へ :bn / :bp # 次 / 前のバッファ :bd # バッファを閉じる
6-2. 分割ウィンドウ
:sp file.txt # 水平分割 :vsp file.txt # 垂直分割 Ctrl-w w # ウィンドウ移動 Ctrl-w q # ウィンドウ閉じる Ctrl-w = # サイズ均等化
ログを片側、設定ファイルを片側で開きながら作業すると効率的。SSH 越しなら tmux と組み合わせるとさらに強い。
7. ビジュアルモード:範囲選択して操作
v # 文字単位の選択開始 V # 行単位の選択開始 Ctrl-v # 矩形(ブロック)選択
選択中に:
d # 削除 y # コピー > # インデント < # 逆インデント :s/a/b/ # 選択範囲内のみ置換
矩形選択の活用: 複数行の行頭に # を付ける(コメントアウト)操作は Ctrl-v → 行範囲選択 → I → # → Esc で一括処理できる。
8. .vimrc:最低限の設定
~/.vimrc に書く。新しいサーバに入るたびに 30 秒で書ける程度のミニマム設定。
" 基本
set number " 行番号表示
set ruler " カーソル位置表示
set showcmd " 入力中コマンド表示
set wildmenu " コマンド補完を強化
" 検索
set hlsearch " 検索結果ハイライト
set incsearch " インクリメンタルサーチ
set ignorecase " 大文字小文字無視
set smartcase " 大文字を含む検索は区別
" インデント
set autoindent " 自動インデント
set expandtab " Tab をスペースに
set tabstop=4 " Tab 幅
set shiftwidth=4 " 自動インデント幅
" 安全
set backup " バックアップ作成
set backupdir=~/.vim/backup,/tmp
set undofile " undo 履歴を保存
set undodir=~/.vim/undo
" UI
syntax on " シンタックスハイライト
set background=dark " 暗い背景前提
~/.vim/backup と ~/.vim/undo ディレクトリは事前に mkdir -p で作成しておく。
リモートサーバで vi しかない(Vim 互換モード)場合、set の一部が効かない。:version で確認可能。
9. 詰まったときの脱出術
実際に詰まる典型ケースと、機械的な脱出手順。
9-1. 抜けられない
Esc Esc :q!
ノーマルモードへ確実に戻ってから強制終了。
9-2. 保存できない(読み取り専用)
:set noreadonly :w
または :w !sudo tee % > /dev/null。
9-3. 画面が固まった
Ctrl-q # Ctrl-s で停止した端末を再開
Ctrl-s はターミナル側の出力停止。Vim の問題ではない。
9-4. ~ などゴミが見える
スワップファイル(.swp)が残っている。
ls -la .file.swp :recover # Vim 起動後に実行
不要なら rm .file.swp。
他人が編集中の可能性がある。ps aux | grep vim で確認してから削除する。
10. vi と Vim と Neovim
| 名前 | 実体 | 備考 |
|---|---|---|
| vi | 多くの場合 Vim の vi 互換モード | 一部設定が無効化される |
| Vim | Vi IMproved | デファクトスタンダード |
| Neovim | Vim のフォーク | Lua 設定・LSP 統合・モダンな実装 |
which vi # /usr/bin/vi ls -l $(which vi) # 多くの場合 vim や vim.basic への symlink
Ubuntu 最小構成だと vim-tiny しか入っていない場合がある。sudo apt install vim で full 版を入れる。
11. まとめ:明日から使う型
コピペ用:最低限の作業フロー
# 1. 開く vim file.txt # 2. ノーマルモードで移動 gg # 先頭へ /keyword # 検索 # 3. 挿入モードへ i # 編集開始 (編集) Esc # ノーマルへ戻る # 4. 保存して終了 :wq # 失敗した場合 :q! # 捨てて終了
やってはいけないこと
- 挿入モードのまま
:wqと打つ(本文に:wqが入る) sudo vim /etc/...で開いて保存時に詰む →sudoeditを使う- スワップファイルを脊髄反射で削除する → 他人の編集中の可能性
.vimrcを巨大化させる → サーバごとに使い回せなくなる