番号 | 記号 | 初期キー | 機能 |
---|---|---|---|
#56 | - | ^QA [F07] | 文字列の置換 |
文字列の置換。書式:#56 "検索文字列" #m "置換文字列" #m
ps(検索文字列ヒストリーバッファ)に検索文字列と置換文字列が順に格納され,コマンド実行終了後はps先頭の内容が直前の置換文字列になる。
戻り値 r:置換した文字列の数
無効
無効
無効
無効
次の例は,検索/置換履歴に残さずに置換処理をするものである。特定の文字列に係る部分やその周辺を続けて編集している途中で置換したい場合など,あるいは履歴を生かす必要のない置換などで,一連の作業のなかでは邪魔になる履歴を残したくない場合に便利だろう。所謂,バッファのすり替えという古典的な手法に,v1.6で追加された有用かつ特殊なシステム関数を利用することで短いコードになる。
56 ^QA "" ;敢えてキーアサインは乗っ取る(マクロ優先)
?. ;編集モード以外は終了
ps[=pa, ;psをpaにすり替える
#56 ;置換の実行後
&Cr ;編集モードになるまで次の命令を実行しない
ps], ;psを戻す
56 ^QA ""
?. #56 &Cr
(r+1)?{ &m("%u",r) }?{ &m("Cancel") }
#56の戻り値は置換した文字列の個数である。このため実行後にrを参照すれば,置換した文字列の個数がわかる。さらに応用するなら,検索文字列と置換文字列が同じであれば,その文字列の個数を数えることもできることになる。なお,#56を[ESC]でキャンセルしたとき戻り値に-1を返すので,その場合だけ「Cancel」と表示している。
整形マクロ等で特定の文字列を確認なしにすべて置換する場合の書式は次の通りで,応答を ay で再現する。ブロック指定により置換対象範囲が限定されている場合は全範囲を指示する a は不要だが,y/nの応答では無視されて y のみが通る。実際の編集時の手順を逐一なぞって再現させればよいのだ。
#56 "foo" #m "bar" #m "ay"
なお,ヌル置換(=削除)する場合は,次のように記述する。ヌルは省略できる。
#56 "foo" #m #m "ay"