We generally think of a cursor having two coordinates, x and y, row and column, but when I call
getcurpos() I get a list with 5 values in it.
:help getcurpos() :echo getcurpos() [0, 4124, 8, 0, 57]
Here are the definitions of those numbers:
bufnum - the number of the buffer when calling
getpos("'A") to get the position with a mark. Always 0 with
lnum - The line number
col - The number of chars used to go this far to the right. is 2. 10 spaces is 10.
off - Is the number of chars past the end of the line. 0 unless using
curswant - Is the column you started on when starting to navigate with j and k. You might start on col 20, and go down to a line with only 10 columns in which case the cursor would be on col 10, but
curswant would still 20. The next navigation to a line with more than 20 characters would put you back on col 20.
With virtualedit turned on
curswant will always be the column position of the cursor.