設定ファイルを開いて1か所だけ直したいとき、削除の範囲を誤った瞬間に手が止まってしまう——そういった場面は現場でよく起きます。vim(vi)には単語単位・行単位での削除と、それを即座に取り消すアンドゥ機能が備わっています。まず使うコマンドを先に示します。
すぐ使える削除とアンドゥのコマンド早見表
以下はすべてノーマルモード(Esc を押した状態)で動作します。インサートモードのままでは機能しないため、操作前に Esc を押す習慣をつけてください。
# 単語削除
dw # カーソル位置から次の単語の先頭まで削除
d2w # カーソル位置から2単語分削除
d3w # カーソル位置から3単語分削除
# 行削除
dd # カーソル行を1行削除
3dd # カーソル行から3行削除
# 文字削除
x # カーソル位置の1文字を削除
5x # カーソル位置から5文字削除
# アンドゥとリドゥ
u # 直前の操作を1ステップ取り消す
Ctrl+r # アンドゥを取り消す(リドゥ)
U # カーソル行への変更をすべて取り消す
単語単位で削除する:dw と d数字w
dw はカーソル位置から次の単語の先頭直前まで(単語本体+直後のスペース)を削除します。数字を組み合わせた d2w は2単語、d3w は3単語を一度に消せます。
たとえば次のような行があるとします。
ServerName www.example.com example.net
www.example.com にカーソルを合わせて d2w を実行すると、www.example.com example.net の2単語が削除されて ServerName だけが残ります。削除数を数字で指定できるため、マウスなしで目的の範囲をまとめて消せます。
dw は「単語+後続スペース」を対象にしますが、行末の単語ではスペースが残らない挙動になります。末尾の単語を単語末まで削除したい場合は de を使うと制御しやすくなります。
行ごと削除する:dd と数字dd
不要なコメント行や廃止済みのオプション行をまとめて消すには dd が効率的です。先頭に数字を付けた 3dd はカーソル行から3行分を一括削除します。
# /etc/ssh/sshd_config から廃止済み設定を3行まとめて削除する例
# カーソルを対象の先頭行に置いて実行
3dd
削除した行は内部バッファに保持されます。p を押すとカーソル行の直後に貼り付け、P を押すとカーソル行の前に貼り付けられます。「削除して別の場所に移動する」操作も dd→p で完結するため、アンドゥを多用せずに済みます。
ミスをすぐ取り消す:u と Ctrl+r
削除しすぎたときや誤った編集をしたとき、ノーマルモードで u を押すと直前の操作を1ステップずつ取り消せます。連続して押すことで複数ステップ遡れます。取り消しすぎた場合は Ctrl+r でリドゥ(やり直し)します。
# 削除を誤った → u で取り消す(複数回押すとさらに遡れる)
u
# 取り消しすぎた → Ctrl+r でやり直す
Ctrl+r
vimのデフォルトのアンドゥ履歴は1000ステップ保持されます。U(大文字)はカーソル行への変更をすべてまとめて取り消しますが、この操作自体もアンドゥ対象になるため履歴が複雑になりがちです。通常は小文字の u を繰り返す方が直感的に扱えます。
vimには永続アンドゥ(undofile)機能があります。~/.vimrc に以下を追加しておくと、ファイルを閉じた後もアンドゥ履歴が残り、次回起動時に取り消し操作を継続できます。
# ~/.vimrc に追記
set undofile
set undodir=~/.vim/undo
# 履歴保存先ディレクトリを作成(初回のみ)
mkdir -p ~/.vim/undo
単語を書き換える:cw と c数字w
「削除してすぐ別の値に打ち替えたい」場面では cw が効果的です。dw と異なり、削除直後にインサートモードへ自動で切り替わるため、Esc→i の手間が省けます。
# 例:ServerName の値を書き換える
# カーソルを www.example.com に置いて実行
cw
# → 単語が消えてインサートモードになる
# 新しい値を入力して Esc でノーマルモードへ戻る
c2w で2単語分の書き換えも可能です。設定値が複数のトークンで構成されている場合に使えます。cw で誤った内容を入力してしまった場合も、Esc で抜けてから u を押せばもとの状態に戻せます。
実務での使い方:設定ファイル修正の一連の流れ
ある運用現場では、Nginxのupstream設定を緊急で修正する際に次の手順を踏んでいます。
# 編集前にバックアップを取る(本番では必須)
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# ファイルを開く
sudo vim /etc/nginx/nginx.conf
# 目的の行に移動(:行番号 または / で検索)
:42
# または検索で移動
/upstream_backend
# 誤った値のある単語にカーソルを合わせて cw で書き換え
cw
192.168.1.20
# Esc を押してノーマルモードへ
# 書き換え結果を確認し、問題があれば u で取り消す
u
# 問題なければ保存して終了
:wq
# Nginxの設定構文確認
sudo nginx -t
# 問題なければリロード(サービス停止なし)
sudo systemctl reload nginx
バックアップを先に取っておくと、アンドゥでは戻りきれない大規模な変更や、:wq 後の取り消しにも対応できます。特に本番サーバーでは cp または rsync によるバックアップをセットにして編集作業を進めることが望ましいです。
なお、sudo vim を多用する環境では sudoedit(sudo -e)の利用も検討してください。sudoedit は一時コピーを編集してから書き戻す方式のため、sudo 権限でエディタプロセスを丸ごと動かすよりも権限の分離が明確になります。systemdベースの環境ではサービスリロード後に systemctl status でエラーログを確認する手順も合わせて習慣にしておくと、設定ミスの早期発見につながります。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
