【※ 当記事は2020年7月2日時点の情報です】
ペイヴメント(@pavement1234)です。
Vimのコマンドラインモードでできることというページを発見。
Vimと言っていますが、ViというよりExコマンドのことを書いてますね。
そういえば1999年に入社したソフトウェアハウスは
UNIXでviを触れないと食っていけない会社だったので、
新人研修の資料に同じようなことが書いてあったのを思い出し、
非常に懐かしく感じました。
文字列置換
これからファイルの中のpavement1234を4321tnemevapに変換します。
置換は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のコマンドラインモードで文字列置換してみました。
小ネタがまとまったらまた発信します。