To understand what is happening here, let's break down the expression: ^(\w)
^ is anchored to the beginning of the line (option:m)
(\w) the first character to match is a word character after the anchor. So only line 1 matches, because the others have whitespace, then a word.
Instead, use something like this:
Find: ^(\s*)(\w)
Here we start at the beginning of the line (^) then allow for zero or more whitespace (\s*), capturing the result, finally capturing the first word character (\w)
Replace: $1-$2
We preserve any whitespace found, then insert our hyphen at the beginning of the word match.