【参考元: note tai様 感謝!!】
https://note.com/t_aksak/n/n842a7caf241f
Vim便利っていうけど、都合よく行の途中から後ろだけ消すコマンドはないだろう、
と思っていたら...ありましたね。
■特定の文字をキーワードにして、その文字から行末までを書き換えるコマンド
:(開始行),(終了行)s/(キーワード).*/(キーワード)と変更語の文字/gc
※具体例として、以降説明する画像ではこのコマンドは、
:604,635s/ =.*/.place(x= , y =)/gc
になります。
======ざっと解説========
604,635 -> ,で区切った開始行と終了行
次のs ->これが、文字列置き換えを示すコマンド
1つ目のスラッシュ/ -> これが、置き換えたい文字を示す
今回の例は「 =」より後ろを「.*」で行末まで全指定という意味
2つ目のスラッシュ/ ->これ以降は、置き換え後の文字を示す
3つ目のスラッシュ/ ->この後は、コマンド実行方法。
gcのうち、 gが複数マッチした時全部やるよ、という意味で、
cは、1件ごとに置き換えするか、しないでスキップするか選べるという実行モード
=====================
・プログラムコーディングでよくある、別のところコピーしてきて、=より後ろだけ消して
書き換えたい状況。しかもファイル全体ではなくて、今コピーしてきた604行から635行の中だけでやりたい。
例のコマンドを
:604,635s/ =.*
まで打つと置き換え対象範囲が決まる。
いい感じに、狙ったところがハイライト(白色付け)されている。
例のコマンドをすべて打ち終わった状態。
=から後ろを、一括で「.place(x=, y =)」に変更するよう指定
例のコマンド最後に「c」を指定したので、
1行毎に確認される。yがyes(置き換え実行),nがno(その行は何もしない)で、
きめ細かく決め打ちすることができる。
(y,nの他にもいろいろあるけど使ったこと無いなー。大抵はy or n で間に合う)
コマンド終了した様子。
=====================
特定の文字で決め打ちできる状態かどうかが鍵。
対象がハイライトされるので、ちゃんと意図した範囲化確認
しながら進められるのがとても良い。
作成日: 2025年7月25日23:32
更新日: 2025年7月25日23:57