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


  • 文字列置換

例えばこんなファイルがあってpavement12344321tnemevapに変換します。置換はsubstituteのsです。

まずファイルを開く。
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でファイルを閉じて、また開きます。
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でファイルを閉じて、また開きます。
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
pavement1234
4321tnemevap5678
pavement9876
                                                                                                                 4,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/g
    現在使っているファイルの文字列"before"を"after"に置換。確認を表示させる。
:%s;/var/home;/usr/home;gc
    パス名などを置換するときは、"/"でなく、";"を区切り文字に使用
:63,79s /aaa/bbb/g
    特定範囲のみ置換。 63~79行目までの範囲にある"aaa"を"bbb"に一括置換。
  • スマイル
Escを押してコマンドラインモードに入り:smileを打つと、こうなります。

smile

続く

スポンサードリンク