Подтвердить что ты не робот

Vim сохраняет положение окна при переключении буферов

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

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

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

4b9b3361

Ответ 1

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

Попробуйте следующее:

if v:version >= 700
  au BufLeave * let b:winview = winsaveview()
  au BufEnter * if(exists('b:winview')) | call winrestview(b:winview) | endif
endif

Ответ 2

То, что script, отправленное @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

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