2010-11-23 20 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

+0

良い仕事、@poisonedbit、おそらくVIMのプログラミングマニュアルをお勧めしますか? – Art

+1

@Art Vimで ':h usr_41.txt'を試してください。さらにSteve Loshの[Vimscriptの難しい方法を学ぶ](http://learnvimscriptthehardway.stevelosh.com/)。 – echristopherson

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 

そして、それは今、画面とカーソル位置が保存されて、私が望むように動作します。

関連する問題