リージョン内で置換

ども。
なんかエロってるタイトルだなぁと,書いた後で気付いて,
若干興奮している,なんでやねん whitypig です。


あるリージョン内でのみ一括置換をしたいわけです。

replace-string

replace-string で置換をしようとすると,
現在のポイントからバッファの終わりまでで,
置換をする。だもんで意図せずところで置換が起こってしまうことも。

query-replace-string

query-replace-string は便利で使うけど,一括で置換するときには,
少々不便。

これまでの方法

narrowing して replace-string するという,今思うとなんともかっこわるい方法。
もしくは,query-replace-string。

これからの方法

transient-mark-mode を C-SPC C-SPC で一時的に ON にして,
M-x replace-string。

過程

いいかげんなんとかせにゃならんぜよと思って,replace-string-in-region
とでもして,関数書くかと思って,replace-string のドキュメントを眺めていたら,
引数に START, END なるものが!!

一部抜粋
(replace-string FROM-STRING TO-STRING &optional DELIMITED START END)

In Transient Mark mode, if the mark is active, operate on the contents
of the region.  Otherwise, operate from point to the end of the buffer.

つまり,Transient Mark mode がオンになっていれば,
そのリージョン内で置換するよ,ということですね。
で,ワタシは通常,Transient Mark mode をオフってるので,
一時的にオンにするために,C-SPC C-SPC をするわけです。
そして,M-x replace-string すれば,万事解決!!

まとめ

仰々しく悴んでいる手で書き殴ってみましたが,なんのこたーない,
Transient Mark mode をオンにすれば,replace-string はリージョン内で
置換をしてくれるよ,ということです。


Transient Mark mode を常時オンにすることもちょい前に考えたんですが,
C-SPC でポジションを push, push, push して移動できるのは便利なので,
常時オフにしています。
それに,C-SPC C-SPC で臨時オンにできるしね。