^ actually takes you to the first non-whitespace character in the line in vim. For start of line you want 0
I don't have (n)vi(m) open right now but I think this only applies to prepending spaces. For prepending tabs, 0 will take you to the first non-tab character as well.
Vim takes me to the first character in the line (the first tab), but displays the cursor on the last gridsquare the tab's width covers.
If you have "set list" to make non-space whitespace visible, it'll go to the leftmost position. I did it long ago along with "set listchars=trail:.,tab:>-" so I can see not only where tabs are, but also their size/alignment without causing the text to shift.