2010-11-23 2 views
18

Проблема, с которой я столкнулся с Vim, заключается в том, что при переключении буферов в окно (либо :[n]b, либо MiniBufExpl) позиция курсора остается прежней, но окно всегда позиционирует себя так, строка курсора находится посередине.Vim держит положение окна при переключении буферов

Это действительно раздражает меня, так как я наглядно помню, где находятся верхние/нижние части окна, а не там, где они должны были бы располагаться курсором в середине окна.

Есть ли параметр, который я могу изменить, чтобы сохранить положение окна над буфером?

ответ

31

Интересно отметить, что это меня не беспокоило, пока я не прочитал ваш вопрос, lol.

Попробуйте это:

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 

И теперь он работает, как я хочу, экран и курсор позиции сохраняются.