您应该使用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 . "|"