Why not just let
^ always be a start of line?
Mostly for compatibility.
Vim was originally not able to match patterns across lines. That feature was only introduced in Vim version 6.
Previous to that version, the
$ anchors would only make sense at the start or end of the pattern, resp., and in a few other specific locations around
). But it was safe to make them match the literal characters elsewhere, since that was the only possibility that made sense at the time.
When multi-line matches were introduced, changing the way those characters worked might have broken existing code, since code could have relied on that existing behavior. So rather than change the way those characters match, it was deemed safer to introduce a new match that would also work on patterns meant for multi-line matches (which go along with
\_. and other items under the
:help new-seatchpat, which is part of the changelog for Vim 6 and mentions the introduction of these new pattern items as part of that new feature.
BTW, if you want to match the words
and across a line break, an easier way is to match
/rain\nand, since in your example the
\_^ will only work when the
\_. matches exactly a newline, so you might just match on that explicitly... The
\_^ anchor is more useful when you might be matching patterns separated by a number of lines in between them.