Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

vim (vi) でマッチした文字列の一部を置換

      2013/07/15

vim (vi)の置換のお話です。

全行のoldをnewに置換したい場合は普通こうしますよね。

:%s/old/new/g

しかしoldで始まってnewで終わる単語のoldをnewにしたい場合、つまりold○○○newoldxxxnewnew○○○newnewxxxnewに置換したい場合は置換対象の文字列に正規表現を使うため、上記のように単純な置換で実現できません。よって、○○○やxxxの部分を変数のように扱う必要がでてきます。これは以下のようにして実現できます。

:%s/old\(.*\)new/new\1new/g

“\(” と  “\)” で囲まれた部分はホールドバッファと呼び、9つまで使うことができ、\1~\9として呼び出すことができます。つまりold・・・・newの・・・・の部分を正規表現”.*”でマッチさせて\1として扱えるため、上記を実行するとnew・・・・newに置換されます。

ホールドバッファは何度でも呼びさせるため、以下のような置換もできます。

:%s/old\(.*\)new/new\1new\1/g

これでold○○○newoldxxxnewnew○○○new○○○newxxxnewxxxに置換されます。

 - IT技術

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
キル(コピー)した文字列の履歴をさかのぼってヤンク(貼り付け)する@bash

bashで、Ctrl-kでキル(コピー)した文字列をCtrl-yでヤンク(貼り付 …

no image
ソースコードのインデントを整形する@vim

vimでソースコードを編集していてインデントが崩れてしまった場合の整形の方法。 …

no image
akamaitechnologies.comってなに??

ふとWindowsでnetstatを叩くと、akamaitechnologies …

no image
viで制御コードの入力

.vimrcといった設定ファイルを書いていると、制御コードを入力したいときがあり …

no image
Raspberry Pi2でHDMIからmp3の音を出す@Ubuntu 14.04

Raspberry Pi2 にUbuntuをインストールして、コマンドラインから …

no image
KVMのコンソールに接続する@RHEL6 on Fedora14 KVM

KVM上で仮想OSを動かしている場合、コンソールに接続するには、少し設定を変更す …

no image
Acer AS1410 の無線LAN 11n設定

Acer AS1410購入しました。ついにで無線LANが11nに対応しているので …

no image
Suicaでネット決済@モバイルSuica

モバイルSuicaってネット決済できるみたい。 決済方法を見ると、ショッピングサ …

no image
オフラインファイルで特定のファイルの同期ができない

Windowsにはオフラインファイルという機能があります。この機能を用いることで …

no image
Windowsの管理機能を集約@Windows 7

Windows 7でフォルダ名に特殊名をつけると、コントロールパネルのよう、いや …