2013-03-01 81 views
3

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

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

+0

为什么不简单地执行':'''? – abcd 2013-03-02 00:33:09

回答

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.