Você deve usar getpos()
:
Para salvar sua posição em uma variável:
let save_pos = getpos(".")
getpos()
toma como argumento uma marca, aqui "."
representa a posição atual do seu cursor.
E para restaurá-lo:
call setpos('.', save_pos)
Aqui, o primeiro argumento indica que você moverá a marca da posição atual do seu cursor (daí a sua posição atual) e o segundo é onde colocar a marca (a posição que você salvou anteriormente).
Sua função ficaria assim:
function! DollarSplit()
let save_pos = getpos(".")
normal! 6|r$ " replaces the 6th caracter in line with a $
call setpos(".", save_pos)
endfunction
Para mais detalhes, consulte: :h getpos()
e:h setpos()
Para mais detalhes sobre o uso de execute
: esta função pega uma string e a executa. Sua cadeia pode ter apenas caracteres codificados entre aspas duplas ou o conteúdo de variáveis.
Quando você escreve
execute col_number."|"
Se você estiver na 12ª coluna, a string expandida será 12|
. Execute tentará executar este comando, mas não funcionará porque 12|
não é uma função vimscript, mas um comando no modo normal.
Para executá-lo a partir de um vimscript, você deve dizer "execute-o como se eu o tivesse digitado no modo normal", é para isso que o normal é usado.
Portanto, sem a execução, você teria escrito:
normal 12|
Agora, para fazer sua execute
ligação funcionar, você deve adicionar a normal
palavra-chave à sua cadeia expandida, assim:
execute "normal " . col_number . "|"