Powinieneś użyć getpos():
Aby zapisać swoją pozycję w zmiennej:
let save_pos = getpos(".")
getpos()przyjmuje jako argument znak, tutaj "."reprezentuje bieżącą pozycję kursora.
I aby go przywrócić:
call setpos('.', save_pos)
Tutaj pierwszy argument wskazuje, że przesuniesz znak bieżącej pozycji kursora (stąd twoja aktualna pozycja), a drugi to miejsce, w którym umieścisz znak (pozycję zapisaną wcześniej).
Twoja funkcja wyglądałaby następująco:
function! DollarSplit()
let save_pos = getpos(".")
normal! 6|r$ " replaces the 6th caracter in line with a $
call setpos(".", save_pos)
endfunction
Aby uzyskać więcej informacji zobacz: :h getpos()i:h setpos()
Aby uzyskać więcej informacji na temat korzystania z execute: ta funkcja pobierze ciąg i wykona go. Ciąg może być tylko zakodowanymi na stałe znakami między podwójnymi cudzysłowami lub zawartością zmiennych.
Kiedy piszesz
execute col_number."|"
Jeśli znajdujesz się w 12. kolumnie, będzie to rozwinięty ciąg 12|. Wykonaj spróbuje wykonać to polecenie, ale nie będzie działać, ponieważ 12|nie jest to funkcja vimscript, ale polecenie trybu normalnego.
Aby wykonać go z vimscript, musisz powiedzieć „wykonaj go tak, jakbym napisał go w trybie normalnym”, do tego właśnie służy normalny.
Bez wykonania napisałbyś:
normal 12|
Teraz, aby executezadzwonić, musisz dodać normalsłowo kluczowe do rozwiniętego ciągu, tak jak poniżej:
execute "normal " . col_number . "|"