Bạn nên sử dụng getpos()
:
Để tiết kiệm vị trí của bạn trong một biến:
let save_pos = getpos(".")
getpos()
lấy làm đối số một dấu, ở đây "."
đại diện cho vị trí hiện tại của con trỏ của bạn.
Và để khôi phục nó:
call setpos('.', save_pos)
Ở đây, đối số đầu tiên chỉ ra rằng bạn sẽ di chuyển dấu của vị trí hiện tại của con trỏ (do đó là vị trí hiện tại của bạn) và thứ hai là nơi đặt dấu (vị trí mà bạn đã lưu trước đó).
Chức năng của bạn sẽ trông như thế này:
function! DollarSplit()
let save_pos = getpos(".")
normal! 6|r$ " replaces the 6th caracter in line with a $
call setpos(".", save_pos)
endfunction
Để biết thêm chi tiết, xem: :h getpos()
và:h setpos()
Để biết thêm chi tiết về việc sử dụng của bạn execute
: chức năng này sẽ lấy một chuỗi và thực hiện nó. Chuỗi của bạn chỉ có thể là các ký tự được mã hóa cứng giữa các dấu ngoặc kép hoặc nội dung của các biến.
Khi bạn viết
execute col_number."|"
Nếu bạn ở cột thứ 12, chuỗi mở rộng sẽ là 12|
. Execute sẽ cố gắng thực thi lệnh này nhưng nó sẽ không hoạt động vì 12|
không phải là hàm vimscript mà là lệnh chế độ bình thường.
Để thực thi nó từ một vimscript bạn phải nói "thực thi nó như thể tôi đã gõ nó ở chế độ bình thường", đó là những gì bình thường được sử dụng cho.
Vì vậy, nếu không thực hiện, bạn sẽ viết:
normal 12|
Bây giờ để thực hiện execute
cuộc gọi của bạn, bạn phải thêm normal
từ khóa vào chuỗi mở rộng của mình, như thế này:
execute "normal " . col_number . "|"