我正在尝试编写一个Vim函数,该函数将执行一系列操作,然后返回到首次触发函数的行。有可能以某种方式编写一个可以执行此行为的Vim函数吗?
例如,如果我在vim缓冲区中的某个地方 - 比如第55行并输入gg
来转到第一行,我可以使用<C-o>?
返回第55行。我该怎么写这个Vim函数中的行为?在此先感谢您的帮助。
答案 0 :(得分:7)
首先,您可以在您通常键入的功能中执行所有操作。要使用<C-o>
,您只需要正确的转义:
:execute "normal! \<C-o>"
除此之外,您还可以使用专用的Vimscript功能。最简单的是cursor()
,它不会修改跳转列表(使用line('.')
将原始位置保存在变量中;我在此处对其进行硬编码):
:call cursor(55, 0)
如果你希望你的动作完全不可见,那么仅仅恢复光标位置是不够的。这些举动也可能影响了视口;即在窗口中显示哪些缓冲线。为了保持完整,请使用:
:let save_view = winsaveview()
" Your actions here
:call winrestview(save_view)
" Now the window looks exactly as before.