3

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

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

4

1 回答 1

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.
于 2013-03-01T11:51:20.390 回答