Vim功能返回当前行

时间:2013-03-01 11:37:35

标签: vim

我正在尝试编写一个Vim函数,该函数将执行一系列操作,然后返回到首次触发函数的行。有可能以某种方式编写一个可以执行此行为的Vim函数吗?

例如,如果我在vim缓冲区中的某个地方 - 比如第55行并输入gg来转到第一行,我可以使用<C-o>?返回第55行。我该怎么写这个Vim函数中的行为?在此先感谢您的帮助。

1 个答案:

答案 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.