Anda harus menggunakan getpos()
:
Untuk menghemat posisi Anda dalam suatu variabel:
let save_pos = getpos(".")
getpos()
mengambil sebagai argumen sebagai tanda, di sini "."
mewakili posisi kursor Anda saat ini.
Dan untuk mengembalikannya:
call setpos('.', save_pos)
Di sini argumen pertama menunjukkan bahwa Anda akan memindahkan tanda posisi saat ini dari kursor Anda (maka posisi Anda saat ini) dan yang kedua adalah tempat untuk meletakkan tanda (posisi yang Anda simpan sebelumnya).
Fungsi Anda akan terlihat seperti ini:
function! DollarSplit()
let save_pos = getpos(".")
normal! 6|r$ " replaces the 6th caracter in line with a $
call setpos(".", save_pos)
endfunction
Untuk lebih jelasnya lihat: :h getpos()
dan:h setpos()
Untuk detail lebih lanjut tentang penggunaan Anda execute
: fungsi ini akan mengambil string dan menjalankannya. String Anda hanya dapat berupa karakter-karakter dengan kode sandi antara tanda kutip ganda atau konten variabel.
Ketika Anda menulis
execute col_number."|"
Jika Anda berada di kolom ke-12 string yang diperluas akan menjadi 12|
. Jalankan akan mencoba untuk mengeksekusi perintah ini tetapi tidak akan berhasil karena 12|
bukan fungsi vimscript tetapi perintah mode normal.
Untuk menjalankannya dari vimscript Anda harus mengatakan "jalankan itu seolah-olah saya telah mengetiknya dalam mode normal`, itulah yang digunakan untuk normal.
Jadi tanpa eksekusi Anda akan menulis:
normal 12|
Sekarang untuk membuat execute
panggilan Anda berfungsi, Anda harus menambahkan normal
kata kunci ke string Anda yang diperluas, seperti ini:
execute "normal " . col_number . "|"
Fungsi ini juga menyimpan register pencarian Anda. Jadi Anda bisa memberikan perintah sebagai argumen di atasnya.
Beberapa penjelasan
Sebagai contoh:
sumber: https://technotales.wordpress.com/2010/03/31/preserve-a-vim-function-that-keeps-your-state/
sumber
finally
blok. Kalau tidak, jikaa:command
gagal, tidak ada yang akan dipulihkan.