103.8標準
viで現在行にoldが複数回現れる。
現在行だけを対象に、すべてのoldをnewへ置換する。
適切なexコマンドはどれか。
× 不正解
:sは既定で現在行を対象にし、末尾のgフラグでその行にあるすべての一致を置換する。
詳細解説
正しい
:s/old/new/g範囲省略で現在行を対象とし、gで行内の全一致を置換する。
正解。現在行のすべてのoldを置換する。
誤り
:s/old/new/現在行の最初の一致だけを置換する。
最初のoldだけを置換する。
誤り
:%s/old/new/ファイル全行が対象になり、かつ各行の最初の一致だけになる。
全行を対象にするが各行最初だけである。
誤り
:g/old/new/:gは一致行へexコマンドを適用する構文で、この形は置換指定ではない。
正しい置換構文になっていない。
実際に確かめる
一時的な検証環境で実行できる例です。
printf 'old and old\nold next\n' > sample.txt; vim -Nu NONE -n -es sample.txt -c '1s/old/new/g' -c 'wq'; cat sample.txt期待される結果
new and new
old next理解のポイント
- :sは現在行
- gは行内の全一致
- :%sは全行
確認時の注意
- 確認環境: Vim 9.x(vi互換exコマンド)
基礎のおさらい
範囲指定
:%sはファイル全体、:sは現在行を既定範囲にする。
置換フラグ
末尾gがなければ対象行の最初の一致だけを置換する。
問題IDKP-103-124
確認環境Vim 9.x(vi互換exコマンド)
最終技術確認2026-08-12
誤り・権利侵害を報告