Вы должны использовать 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 . "|"
Эта функция также ведет ваш регистр поиска. Таким образом, вы можете передать свою команду в качестве аргумента.
Некоторое объяснение
Например:
источник: https://technotales.wordpress.com/2010/03/31/preserve-a-vim-function-that-keeps-your-state/
источник
finally
блоке. Иначе, еслиa:command
не получится, ничего не будет восстановлено.