Я знаю 0, переходит к началу строки, и $ идет в конец, но является там чем-то в течение середины?
:call cursor(0, len(getline('.'))/2)
Ввод gm сделал бы это, но это перемещается строками экрана. Для получения его работающий в с текстовыми строками, можно повторно отобразить эту команду:
gm
map gm :call cursor(0, virtcol('$')/2)<CR>
Вот решение, которое будет уважать hardtabs и символы мультибайтов также.
:exe 'normal '.(virtcol('$')/2).'|'