防止Vim在调用% range函数时跳转到开始



我正在定义一个Vim函数:

function! HelloWorld() range
echo "hello world"
endfunction

我用vim -u NONE filename.txt打开一个有很多行的文本文件,用G跳转到最后一行,用:%call HelloWorld()调用HelloWorld()。我注意到光标跳转到第一行。如何防止这种情况,即保持光标在当前行?非常感谢!

注:上面提到的函数只是一个最小的例子。我知道如果我删除range并调用:call HelloWorld(),问题就会消失,但在我的实际问题中需要它。

编辑:

function! HelloWorld() range
let l:win_view = winsaveview()
echo "hello world"
call winrestview(l:win_view)
endfunction

行不通。

谢谢@Matt。我最终想出了以下解决方案。保持函数HelloWorld不变,然后定义一个环绕函数调用的命令。这个想法是从vim-autoformat偷来的。

command! -range -bar HelloWorld 
 let s:winview=winsaveview() |
 <line1>,<line2>call HelloWorld() |
 call winrestview(s:winview)

现在调用:%HelloWorld将回显文本,而不会移动光标。

不妨这样试试:

function! HelloWorld() range
" get current cursor position
let l = line('.')
let c = col('.')
echo "hello world"
" restore original cursor position
call cursor(l,c)
endfunction

相关内容

  • 没有找到相关文章

最新更新