あなたが使用する必要がありますgetpos():
変数の位置を保存するには:
let save_pos = getpos(".")
getpos()引数としてマークを取り"."ます。ここでは、カーソルの現在位置を表します。
そしてそれを復元するには:
call setpos('.', save_pos)
ここで、最初の引数はカーソルの現在位置のマークを移動することを示し(したがって現在位置)、2番目はマークを置く場所(以前に保存した位置)を示します。
関数は次のようになります。
function! DollarSplit()
   let save_pos = getpos(".")
   normal! 6|r$                " replaces the 6th caracter in line with a $
   call setpos(".", save_pos)
endfunction
詳細については以下を参照してください:h getpos()と:h setpos()
の使用法の詳細については、executeこの関数は文字列を取得して実行します。文字列は、二重引用符または変数の内容の間のハードコーディングされた文字のみです。
書くとき 
execute col_number."|"
12列目にいる場合、展開された文字列はになります12|。Executeはこのコマンドを実行しようとし12|ますが、vimscript関数ではなく通常モードのコマンドであるため機能しません。
vimscriptから実行するには、「通常モードで入力したかのように実行する」と言わなければなりません。それがnormalの使用目的です。
したがって、実行がなければ、次のように書くことになります。
normal 12|
execute呼び出しを機能させるにはnormal、次のように、展開した文字列にキーワードを追加する必要があります。
execute "normal " . col_number . "|"