3
我正在尝试编写一个Vim函数,它将执行一系列操作,然后返回到函数第一次触发的行。是否有可能以某种方式编写可执行此行为的Vim函数?Vim函数返回当前行
例如,如果我在vim缓冲区的某个地方 - 比如第55行,输入gg
去第一行,我可以用<C-o>?
返回第55行。我如何在Vim函数中编写这个行为?先谢谢您的帮助。
我正在尝试编写一个Vim函数,它将执行一系列操作,然后返回到函数第一次触发的行。是否有可能以某种方式编写可执行此行为的Vim函数?Vim函数返回当前行
例如,如果我在vim缓冲区的某个地方 - 比如第55行,输入gg
去第一行,我可以用<C-o>?
返回第55行。我如何在Vim函数中编写这个行为?先谢谢您的帮助。
首先,您可以在通常输入的功能中完成所有功能。要使用<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.
为什么不简单地执行':'''? – abcd 2013-03-02 00:33:09