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 execute
zadzwonić, musisz dodać normal
słowo kluczowe do rozwiniętego ciągu, tak jak poniżej:
execute "normal " . col_number . "|"
Ta funkcja prowadzi również rejestr wyszukiwania. Możesz przekazać komendę jako argument.
Jakieś wyjaśnienie
Na przykład:
źródło: https://technotales.wordpress.com/2010/03/31/preserve-a-vim-function-that-keeps-your-state/
źródło
finally
bloku. W przeciwnym razie, jeślia:command
zawiedzie, nic nie zostanie przywrócone.