Vim一直存在的一個問題是,當我在窗口中切換緩衝區(:[n]b
或MiniBufExpl)時,光標位置保持不變,但窗口始終處於自己位置光標所在的行在中間。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