我定义了一个Vim函数:
function! HelloWorld() range
echo "hello world"
endfunction
我用vim -u NONE filename.txt
打开一个多行的文本文件,用G
跳转到最后一行,用:%call HelloWorld()
调用HelloWorld()
,我注意到光标跳到第一行。如何防止这种情况,即保持光标在当前行?非常感谢!
P.S.上面提到的函数只是一个最小的例子。我知道如果我删除range
并调用:call HelloWorld()
,问题就会消失,但在我的实际问题中需要它。
编辑:
function! HelloWorld() range
let l:win_view = winsaveview()
echo "hello world"
call winrestview(l:win_view)
endfunction
行不通的。
2条答案
按热度按时间des4xlb01#
感谢@Matt。我最终想出了以下解决方案。保持函数
HelloWorld
不变,然后定义一个命令来 Package 函数调用。这个想法是从vim-autoformat那里剽窃来的。现在,调用
:%HelloWorld
将回显文本,并且不会移动光标。我唯一关心的是变量
winview
的全局作用域,但到目前为止我还没有看到任何令人不快的副作用。hc8w905p2#
也许可以试试这个办法: