linux - vim 中 setpos 和 getpos 的奇怪行为

标签 linux ubuntu vim

当我使用 vim -u NONE 打开文件并获取此代码时:

   function! F()
              let l:savePos=getpos('.')
                         silent normal! gg  
              call setpos('.',l:savePos)
    endfunction

    autocmd InsertLeave *  call F()

当我离开插入模式时,我遇到了奇怪的行为。设置位置有时会发生变化,并且会执行类似 z- 的操作。

您可以看到文件是否大于您的窗口。

你能确认这种行为吗?

我的 vim 是 7.4

最佳答案

通常,如果您想保存和恢复光标位置,最好使用 winsaveview(),因为它还有一些其他有用的功能。

您的代码可以重写为

function! F()
    let view = winsaveview()
    silent normal! gg
    call winrestview(view)
endfunction

autocmd InsertLeave * call F()

此外,函数内的变量自动具有本地作用域,因此您无需在它们前面添加 l: 前缀。

关于linux - vim 中 setpos 和 getpos 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42714836/

相关文章:

linux - Timthumb 和 tmp 文件夹

regex - 使用 PCRE Regex 匹配具有特殊字符的 JSON 值

apache - 为什么我在 ubuntu 中运行 apache2 时遇到问题?

linux - 将变量放入其中的剪切串联

c - valgrind compains on struct sockaddr_nl

php - 如何启用 PHP short_open_tag

php - 通过终端编辑并保存 php.ini

linux - 打开大量文件时导航 vim 分屏

c++ - 如何让omnicppcomplete自动关闭空参数列表?

linux - 如何从守护进程内部执行 rgvim?