我有一些Vim函数可以更改文档格式.当我调用此函数时,我目前使用类似以下内容来保存和恢复我的光标位置:
func! Foo()
:norm mz
...
:norm `z
endf
Run Code Online (Sandbox Code Playgroud)
这样可以正确地保存光标位置,但有时会改变窗口位置,以便当前行从靠近屏幕顶部移动到靠近底部,反之亦然.有没有办法保留光标位置和线的屏幕位置?
das*_*ang 27
let l:winview = winsaveview()
" do stuff
call winrestview(l:winview)
Run Code Online (Sandbox Code Playgroud)
这应该完全按照你想要它做的,可能除了光标上方的行数改变(我怀疑光标上方的删除行会产生向下移动光标的效果).
您可以为窗口中显示的第一个屏幕行保存标记,并将其还原.g?
在整个缓冲区上执行命令并恢复两个位置的示例:
:noremap <F11> mkHmlggg?G`lzt`k
Run Code Online (Sandbox Code Playgroud)
走过命令:
mk
:k
为当前位置设置标记H
:转到屏幕上的第一行ml
:l
为此位置设置标记ggg?G
:执行命令: jump to mark
l`zt
:将此行设置为第一个屏幕行: jump to mark
k`只是:h getpos()
let save_cursor = getpos(".")
" MoveTheCursorAround
call setpos('.', save_cursor)
Run Code Online (Sandbox Code Playgroud)