当我两次插入相同的字符时,我一直在尝试编写一些 Vimscript 来调用一个函数,在我的特殊情况下,我希望如果你两次插入分号,以便将分号实际移动到行尾.
command! Semi call Semi()
inoremap ; <C-O>:Semi2<CR>
function! Semi()
let x = getpos(".")
" If we are in the last column..
if col(".")+1 == col("$")
let insert_semi = getline(".") . ";"
call setline(".", insert_semi)
let x[2] += 1
call setpos(".", x)
return
endif
let char = getline(".")[x[2] - 2]
if char == ";"
" if prev char was a semicolon also, remove and append to the end
else
" insert semicolon normally...
endif
endfunction
我遇到的问题是在最后一列调用此函数时,您必须退出插入模式才能调用此函数,光标将进入正常模式并将光标移动到最后一列。有什么方法可以判断光标是附加到行尾还是插入到最后一列之前,以及函数调用完成时将其返回到同一位置?
我很清楚我可以使用插入映射,;;
但是我不喜欢这种行为,Vim 进入等待下一个键模式并且不显示您编写的内容。此问题不仅与我列出的问题有关,而且与第一列中也出现的更普遍的问题有关。