首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >切换缓冲区时保持窗口位置

切换缓冲区时保持窗口位置
EN

Stack Overflow用户
提问于 2010-11-23 08:11:04
回答 2查看 1.9K关注 0票数 23

我在使用Vim时遇到的一个问题是,当我在窗口( :[n]b或MiniBufExpl)中切换缓冲区时,光标的位置保持不变,但窗口始终会自动定位,因此光标所在的行位于中间。

这真的让我很恼火,因为我在视觉上记住了窗口的顶部/底部的位置,而不是光标位于窗口中间时它们会在哪里。

是否有可以更改的设置,以保留窗口在缓冲区上的位置?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-23 20:23:06

有趣的是,在我读完你的问题之前,我没有感到困扰,哈哈。

试试这个:

if v:version >= 700
  au BufLeave * let b:winview = winsaveview()
  au BufEnter * if(exists('b:winview')) | call winrestview(b:winview) | endif
endif
票数 38
EN

Stack Overflow用户

发布于 2015-07-23 16:24:14

@dnet发布的脚本总是将光标设置在屏幕的顶部,尽管在文件中的位置是相同的。

我把它改成这样(从http://vim.wikia.com/wiki/Avoid_scrolling_when_switch_buffers复制)

" Save current view settings on a per-window, per-buffer basis.
function! AutoSaveWinView()
    if !exists("w:SavedBufView")
        let w:SavedBufView = {}
    endif
    let w:SavedBufView[bufnr("%")] = winsaveview()
endfunction

" Restore current view settings.
function! AutoRestoreWinView()
    let buf = bufnr("%")
    if exists("w:SavedBufView") && has_key(w:SavedBufView, buf)
        let v = winsaveview()
        let atStartOfFile = v.lnum == 1 && v.col == 0
        if atStartOfFile && !&diff
            call winrestview(w:SavedBufView[buf])
        endif
        unlet w:SavedBufView[buf]
    endif
endfunction

" When switching buffers, preserve window view.
if v:version >= 700
    autocmd BufLeave * call AutoSaveWinView()
    autocmd BufEnter * call AutoRestoreWinView()
endif

现在它按照我想要的那样工作了,屏幕和光标位置都保存下来了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4251533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档