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
よくよく考えたらそれで自然なのだけれど。