我在Vim中遇到的一个问题是,当我在一个窗口(:[n]b
或MiniBufExpl)中切换缓冲区时,光标位置保持不变,但窗口总是自己定位,所以行是光标在中间。
这真让我感到烦恼,因为我直观地记得窗户的顶部/底部位置,而不是光标位于窗口中间的位置。
我是否可以更改设置以保留窗口在缓冲区上的位置?
答案 0 :(得分:33)
有趣的是,在我读完你的问题之前,它并没有打扰我,哈哈。
试试这个:
if v:version >= 700
au BufLeave * let b:winview = winsaveview()
au BufEnter * if(exists('b:winview')) | call winrestview(b:winview) | endif
endif
答案 1 :(得分:4)
@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
它现在可以正常工作,保存屏幕和光标位置。