2019年2月1日金曜日

searchでひっかかった文字列を取得したい

 searchでひっかかった文字列を取得したい。
 文章にしてみて矛盾していることに気づいた。検索する文字は最初からわかっているのだからわざわざ、バッファから取得する必要はないじゃないか。
 もちろんそうじゃない。
 検索文字列に正規表現を使うこともあるからだ。
 というわけで。
 「search-forward-regexp」で検索して「thing-at-point 'line」で一行、選択してそこから……とツールをつくっていてなんかかったるいなぁ、と思っていてふと、自分の馬鹿さ加減に気づいた。

 昔からちょっと疑問だったのだ。
 「search-forward*」系は見つかった文字のうしろにポイントが位置づけられる。「search-backward*」系は逆に前に位置づけられる1。どうしてどちらかにそろってないんだろう……。馬鹿だった。

 というのも

(setq end (search-forward-regexp x))
(setq start (search-forward-regexp x)))

 で、見つかった文字列の前後の位置が簡単にわかるのだから「buffer-substring-no-properties」を使って文字列を取得できるじゃないか。

(buffer-substring-no-properties start end)

 ああ、なんという……。

Footnotes:

1

よくよく考えたらそれで自然なのだけれど。