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
答
该脚本发表@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
而且它现在的作品,因为我想,屏幕和光标的位置保存。
它也没有打扰我。然而,我曾经有过这样的映射:`nmap:bn ''` –
tungd
2010-11-23 16:02:19