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

问题描述:

Vim一直存在的一个问题是,当我在窗口中切换缓冲区(:[n]b或MiniBufExpl)时,光标位置保持不变,但窗口始终处于自己位置光标所在的行在中间。Vim在切换缓冲区时保持窗口位置

这实在让我很烦,因为我在视觉上记住了窗口顶部/底部的位置,而不是光标位于窗口中间位置。

有没有可以改变的设置来保存窗口在缓冲区上的位置?

有趣的是,它没有打扰我,直到我读到你的问题,哈哈。

试试这个:

if v:version >= 700 
    au BufLeave * let b:winview = winsaveview() 
    au BufEnter * if(exists('b:winview')) | call winrestview(b:winview) | endif 
endif 
+1

它也没有打扰我。然而,我曾经有过这样的映射:`nmap :bn ''` – tungd 2010-11-23 16:02:19

该脚本发表@dnets始终将光标在屏幕的顶部对我来说,虽然在文件中的同一位置。

我改成了这个(从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 

而且它现在的作品,因为我想,屏幕和光标的位置保存。