Dance with Agents

vimコマンド一覧・応用編

基本編の先へ。検索・置換、範囲選択、画面分割、設定ファイル、そして「変な警告が出た」ときの対処まで。

vimコマンド一覧・基本編で開いて直して保存できるようになったら、次はこのあたり。ここから先は「覚えると楽になる」もので、知らなくても作業は進む。

検索と置換

ファイルの中を探すのはvimの得意分野。grepがファイルをまたいで探すのに対し、こちらは開いているファイルの中を探す。

コマンド やること
/文字列 下方向に検索する(Enterで実行)
?文字列 上方向に検索する
n / N 次の一致へ/前の一致へ
* カーソル位置にある単語をそのまま検索する
:noh 検索結果のハイライトを消す
:%s/前/後/g ファイル全体を置換する
:%s/前/後/gc 1件ずつ確認しながら置換する(yで置換、nで飛ばす)

:%s/前/後/gの%はファイル全体、gは各行のすべての一致を意味する。置換は一気に実行されるので、不安なときはcを付けて確認しながら進めるのが安全。やり直しはuで戻せる。

行番号とジャンプ

コマンド やること
:set number 行番号を表示する(:set nonumberで消す)
:42 42行目へ飛ぶ(42Gでも同じ)
Ctrl+f / Ctrl+b 1画面分、下へ/上へ
Ctrl+d / Ctrl+u 半画面分、下へ/上へ
% 対応する括弧へ飛ぶ((と)、{と}など)

エラーメッセージに「32行目」と出たときは:32が最短。

回数を指定する・繰り返す

vimが速いと言われる理由がこのあたり。数字を先に打つと「その回数だけ」実行される。

コマンド やること
3dd 3行まとめて削除する
5j 5行下へ移動する
10yy 10行コピーする
. 直前にやった変更を、もう一度繰り返す

.(ドット)は地味だが繰り返しが速い。1か所直したあと、次の場所にカーソルを移して.を押せば同じ修正が入る。

ビジュアルモード(範囲選択)

マウスでドラッグする代わりに、キーボードで範囲を選ぶモード。

コマンド やること
v 文字単位で選択を開始する
V 行単位で選択を開始する
Ctrl+v 矩形(長方形)で選択を開始する

選択した状態で、yでコピー、dで削除、>または<でインデントの増減。抜けるのはEsc。

コピペとクリップボード

vimのyy/pはvim内部の控えを使うので、そのままでは他のアプリと行き来できない。パソコン全体のクリップボードを使うには、"+(プラスレジスタ)を頭に付ける。

コマンド やること
"+yy 1行をパソコンのクリップボードにコピーする
"+p パソコンのクリップボードから貼り付ける
:set paste 貼り付けが階段状にずれるときの対処(終わったら:set nopaste)

"+が使えるかどうかはvimのビルドによる。vim --versionと打って+clipboardと出ていれば使える(-clipboardなら非対応)。macOSに最初から入っているvimは対応している(管理人のMac、macOS 26.2での実測)。

複数ファイルと画面分割

コマンド やること
:e ファイル名 別のファイルを開く
:sp ファイル名 画面を上下に分割して開く
:vs ファイル名 画面を左右に分割して開く
Ctrl+w → h j k l 分割した画面の間を移動する
Ctrl+w → q 今いる画面を閉じる
:tabnew ファイル名 タブで開く
gt / gT 次のタブへ/前のタブへ

Ctrl+wは「ウィンドウ操作の合図」で、押したあとに続けてもう1キー打つ。

よくあるトラブル

「ATTENTION / Found a swap file」と出た

vimを開いたら英語の警告が出て止まった、というやつ。前回vimが正常に終了しなかったか、同じファイルを別の場所で開いているときに出る。vimが作業用の控え(スワップファイル)を見つけて確認してきている。

選択肢が並ぶので、目的に応じて頭文字のキーを押す。

  • O(Open Read-Only):とりあえず読むだけ。中身を確認したいならこれが無難
  • E(Edit anyway):そのまま編集する。同じファイルを二重に開いているときは、片方の編集が消えることがある
  • R(Recover):前回の編集途中の内容を復元する
  • Q(Quit):やめる。迷ったらこれで一度出て、状況を確認する

同じファイルを別のターミナルやセッションで開いていないか(tmuxを使っているとやりがち)を、まず疑うとよい。

保存できない

:wが拒否されるパターンは主に2つ。

  • 読み取り専用として開いている(:q!で出たあとOで開き直した場合など)。:w!で上書きできる
  • そもそもファイルの権限が無い。この場合は:w!でも保存できない。いったん:q!で出て、chmodや置き場所を確認する

画面が固まった

Ctrl+s(保存のつもり)を押すと、ターミナルの表示が止まることがある。これはvimではなくターミナル側の機能で、Ctrl+qを押せば復帰する。

設定ファイル(.vimrc)

毎回:set numberと打つのが面倒になったら、ホームディレクトリの~/.vimrcに書いておくと、次からは最初からその状態で開く。

set number          " 行番号を表示する
syntax on           " 色分けする
set tabstop=2       " タブの幅を2にする
set expandtab       " タブをスペースに置き換える
set ignorecase      " 検索で大文字小文字を区別しない

"から行末までがコメント(vimの設定ファイルでは#ではなく")。ファイルが無ければ新規に作ればよい。

シェルの設定を~/.zshrcに書き溜めていくのと同じ発想で、「毎回打っているな」と思ったら設定ファイルに移すのが定石(→aliasという救世主)。

ヘルプの引き方

コマンド やること
:help ヘルプを開く
:help :w 特定のコマンドのヘルプを開く

ヘルプも1つの画面として開くので、閉じるのは:q。ここでも「開いたものからは:qで出る」の原則は同じ。

ターミナル / UNIXコマンドの記事

ターミナル / UNIXコマンドのページへ →