2010-11-23 96 views
18

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

這實在讓我很煩,因爲我在視覺上記住了窗口頂部/底部的位置,而不是光標位於窗口中間位置。

有沒有可以改變的設置來保存窗口在緩衝區上的位置?

回答

31

有趣的是,它沒有打擾我,直到我讀到你的問題,哈哈。

試試這個:

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

3

該腳本發表@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 

而且它現在的作品,因爲我想,屏幕和光標的位置保存。

相關問題