The reason that
o works the way it does is that, with
smartindent set, it will insert whitespace in order to match the indentation of the previous line.
When you move downwards in normal mode without entering insert mode, the line remains empty and no text is added, so the cursor moves to the start of the line.
The simplest way to achieve your goal is to:
Accept the fact that when you move to an empty line in normal mode the cursor will move to the start of the line, and
Use a more sophisticated method of auto indentation, and start editing the line by typing either
cc. For the language in your screenshot (Go?)
'cindent' should work fine, and when it is set
cc on an empty line will insert indent as you desire, but even better than this would be to use Vim's included
'indentexpr' for this language. You can do this by allowing Vim to set up indentation when it sets the filetype, which you can achieve by adding the following line to your
filetype plugin indent on
With this in place,
'indentexpr' will be set to
GoIndent(v:lnum) when you start editing a Go file, and using
S on an empty line will insert the appropriate indent.
:help 30.3 for more details on automatic indenting.