Vim入門 - 基本操作と実践テクニック

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   # 行末に挿入

最初のうちは io だけで十分。慣れたら 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 を巨大化させる → サーバごとに使い回せなくなる

次に読む