Ви повинні використовувати getpos()
:
Щоб зберегти вашу позицію в змінній:
let save_pos = getpos(".")
getpos()
бере як аргумент позначку, тут "."
представлено поточне положення вашого курсору.
І відновити його:
call setpos('.', save_pos)
Тут перший аргумент вказує на те, що ви будете переміщувати позначку поточного положення курсору (звідси ваше поточне положення), а другий - куди поставити позначку (позицію, яку ви зберегли раніше).
Ваша функція виглядатиме так:
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 12|
Тепер, щоб ваш execute
дзвінок працював, вам потрібно додати normal
ключове слово до розширеного рядка, наприклад:
execute "normal " . col_number . "|"