開発環境/ツール

【Vim】コマンドラインモードで文字列置換してみる

Vimのコマンドラインモードでできることというページを発見。Vimと言っているが、ViというかExコマンドのことを書いてますね。そういえば1999年に入社したソフトウェアハウスはUNIXでviを触れないと食っていけない会社だったので、新人研修の資料に同じようなことが書いてあったのを思い出し、非常に懐かしく感じました。

この記事で解決できること

  • Vimのコマンドラインモードで文字列置換する方法が分かる。

文字列置換

vim 文字列置換 基本的な事vim置換 :s (subsutitute) まとめ ? パス置換の区切りはセミコロン ; をつかう!?を参考にしました。

 

これからファイルの中のpavement12344321tnemevapに変換します。置換はsubstituteのsです。

ファイルvimで開く。

pavement1234
pavement5678
pavement12345678
pavement-1234
pavement9876
"a" 6L, 71C                                                                       4,1          全て

Escを押してコマンドラインモード(:)に入り、s/pavement1234/4321tnemevapと入力。

pavement1234
pavement5678
pavement12345678
pavement-1234
pavement9876
:s/pavement1234/4321tnemevap

リターンを打つとファイル内のpavement1234のうち1行目だけ4321tnemevapに置換される。

4321tnemevap
pavement5678
pavement12345678
pavement-1234
pavement9876
:s/pavement1234/4321tnemevap 1,1 全て

:q!で保存せずファイルを閉じて、またvimで開きます。

pavement1234
pavement5678
pavement12345678
pavement-1234
pavement9876
"a" 6L, 71C                                                                       4,1          全て

Escを押してコマンドラインモードに入り、%s/pavement1234/4321tnemevap/gと入力。

pavement1234
pavement5678
pavement12345678
pavement-1234
pavement9876
:%s/pavement1234/4321tnemevap/g

リターンを打つとファイル内のpavement1234がすべて4321tnemevapに置換される。

4321tnemevap
pavement5678
4321tnemevap5678
pavement-1234
pavement9876
:%s/pavement1234/4321tnemevap/g 3,1 全て

:q!で保存せずファイルを閉じて、またvimで開きます。

pavement1234
pavement5678
pavement12345678
pavement-1234
pavement9876
"a" 6L, 71C                                                                       4,1          全て

Escを押してコマンドラインモードに入り、%s/pavement1234/4321tnemevap/gcと入力。

pavement1234
pavement5678
pavement12345678
pavement-1234
pavement9876
:%s/pavement1234/4321tnemevap/gc

リターンを打つと4321tnemevap に置換しますか? (y/n/a/q/l/^E/^Y)  と聞かれるのでyと打ちリターン。

pavement1234
pavement5678
pavement12345678
pavement-1234
pavement9876
4321tnemevap に置換しますか? (y/n/a/q/l/^E/^Y)                                    1,1          全て

1行目がpavement1234から4321tnemevapに置換される。まだ候補があるので再び4321tnemevap に置換しますか? (y/n/a/q/l/^E/^Y)  と聞かれるのでyと打ちリターン。

4321tnemevap
pavement5678
pavement12345678
pavement-1234
pavement9876
4321tnemevap に置換しますか? (y/n/a/q/l/^E/^Y)                                    1,1          全て

2つ目の候補もpavement1234から4321tnemevapに置換される。

4321tnemevap
pavement5678
4321tnemevap5678
pavement-1234
pavement9876
4321tnemevap に置換しますか? (y/n/a/q/l/^E/^Y)                                    1,1          全て

:q!で保存せずファイルを閉じて終わり。

 

置換コマンドをまとめた

:s/before/after カーソル行の文字列"before"を"after"に置換。
:s/before/after/g カーソル行の文字列"before"をすべて"after"に一括置換
:s/before/after/gc カーソル行の文字列"before"をすべて"after"に置換。確認を表示させる。
:%s/before/after/g 現在開いているファイルの文字列"before"を"after"に一括置換。
:%s/before/after/gc 現在使っているファイルの文字列"before"を"after"に置換。確認を表示させる。
:%s;/var/home;/usr/home;gc パス名などを置換するときは、"/"でなく、";"を区切り文字に使用
:63,79s /aaa/bbb/g 特定範囲のみ置換。 63~79行目までの範囲にある"aaa"を"bbb"に一括置換

 

おまけ(スマイル)

Escを押してコマンドラインモードに入り:smileと打つと、こうなります。

まとめ

Vimのコマンドラインモードで文字列置換してみる。

小ネタがまとまったらまた発信します。

  • この記事を書いた人
  • 最新記事

ペイヴメント

ペイヴメントのエンジニア塾(当ブログ)では20年以上の経験から得られたプログラミング系ノウハウについてベテランにも満足して頂けるような内容の濃いコンテンツを初心者にも分かりやすい形で日々発信しています。【経歴】ベンチャーのソフトハウスで4年勤務後、精密機器メーカーのソフト開発部門に勤務し今に至ります。

-開発環境/ツール

Copyright© ペイヴメントのエンジニア塾 , 2020 All Rights Reserved.